향상 검색만 하다가 도져히 안되어 질문을 드립니다.
아래 프로그램과 같이 그림파일을 LISTVIEW에 표시하는 프로그램을 만드는데,
CAPTION에 파일명을 입력을 하고있읍니다.
LISTVIEW에 있는 ITEM을 선택하면 그화일이 IMAGE에 표시하려고 합니다.
문제는 CAPTION을 보이지않게 하려고합니다
procedure TForm1.Button1Click(Sender: TObject);
var
tmpJpg : TJPEGImage ;
Bit_map1 , Bit_map2 : TBitmap;
ThumbList : TListItem;
tmpRect : TRect;
tmpHeight ,tmpWidth ,i : Integer;
begin
IF opendialog1.Execute THEN
for I := 0 to opendialog1.Files.Count -1 do begin
{ image1.Picture.LoadFromFile(opendialog1.Files[i]);}
if LowerCase(ExtractFileExt(opendialog1.Files[i])) = '.jpg' then
begin
tmpJpg := TJPEGImage.Create;
Bit_map2 := TBitmap.Create;
Bit_map1 := TBitmap.Create;
Bit_map1.Width := ImageList1.Width;
Bit_map1.Height := ImageList1.Height;
ThumbList := ListView1.Items.Add;
tmpJpg.LoadFromFile(opendialog1.Files[i]);
Bit_map2.Assign(tmpJpg);
end;
if Bit_map2.Width > Bit_map2.Height then // 가로가 긴경우
begin
tmpRect.Left := 0; // 가로는 기니깐
tmpRect.Right := ImageList1.Width; // 최고길이로 셋팅
// 아래부턴 세로의 길이를 어떻게 할지 계산
tmpHeight := round(ImageList1.Width / Bit_map2.Width * Bit_map2.Height);
tmpRect.Top := round((ImageList1.Height - tmpHeight) / 2);
tmpRect.bottom := tmpRect.Top + tmpHeight;
end
else // 세로가 긴경우
begin
tmpRect.Top := 0; // 세로는 최대 길이로 셋팅
tmpRect.Bottom := ImageList1.Height;
// 가로 비율 맞춘다.
tmpWidth := round(ImageList1.Height / Bit_map2.Height * Bit_map2.Width);
tmpRect.Left := round((ImageList1.Width - tmpWidth) / 2);
tmpRect.Right := tmpRect.Left + tmpWidth;
end;
Bit_map1.Canvas.StretchDraw(tmpRect, Bit_map2);
ThumbList.Caption := opendialog1.Files[i] ;
ThumbList.ImageIndex := ImageList1.Add(Bit_map1, nil);
tmpJpg.Free ;
Bit_map1.free ;
Bit_map2.free ;
end;
end;
LISTVIEW에 SMALLIMAGE , VIEWSTYLE = vssmallicon 을 표시하였읍니다.
아니면 file명을 저장할수 있는 다른방법이 있는지요.
부탁드립니다.
1. Caption에 내용을 넣지 않는다.
2. ListView를 OwnerDraw로 draw하면서 caption은 안그린다.
3. Column의 Width=0 로 한다.
방법1이 편리하겠네요
그런데 님께서 원하시는것은 Caption에 내용을 안보이게 하는것이 목적이 아니라
filename을 저장하고 싶은것이죠
1. 특정 subitem에 file명을 넣으시고 그 subitem의 Column의 Width=0 로 하면 안보이겠네요
==> Column의 Width가 조정되면 보일수도...
2.TListItem 에는 Pointer(void *)형의 Data라는 멤버가 있습니다.
file명은 다른데 저장해주시고 이 data라는 멤버에 file명이 저장해둔곳의 pointer를 저장해주시면 됩니다.
3. TStringList 를 하나 만들어서 filename을 ListView의 아이템 순서대로 넣습니다.
item을 선택했을때 그 아이템에 해당한는 순서를 가지고 StringList에서 filename을 가져옵니다.
4.기타...
그럼