listview icon eklemek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
maqro
Üye
Mesajlar: 132
Kayıt: 11 Eki 2005 10:59

listview icon eklemek

Mesaj gönderen maqro »

s.a

listview deki satırların başına icon eklemek istiyorum, bu şekilde bir işlemi litview kabul edermi ? ederse nasıl :)
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: listview icon eklemek

Mesaj gönderen mkysoft »

normal bir listview'in böyle bir özelliği yok ama siz ekleyebilirsiniz. treeview'i listview gibi kullanabilirsiniz yada jedi companentlerinde olması lazım
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: listview icon eklemek

Mesaj gönderen mrmarman »

@mkysoft yanılıyorsun ListView başına icon eklenebilir. Hatta kaynak kodlu örnek bile hazırlayıp içinde örneklemiştim. bkz. viewtopic.php?f=12&t=18498&p=140357&hilit=listview
Resim
Resim ....Resim
maqro
Üye
Mesajlar: 132
Kayıt: 11 Eki 2005 10:59

Re: listview icon eklemek

Mesaj gönderen maqro »

@mrmarman hocam cevabınız için çok teşekkür ederim. ayrıca kaynak çok işime yaradı.

ben listwiev için mesela 6. satıındaki iconu değiştirmek istiyorum bu mümkünmüdür? imagelist kullanarak belli bi kalasördeki dosyaların iconlarını göstertebiliyorum.

Kod: Tümünü seç

uses
  ShellApi;

procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList);
var
  i: Integer;
  Icon: TIcon;
  SearchRec: TSearchRec;
  ListItem: TListItem;
  FileInfo: SHFILEINFO;
begin
  // Create a temporary TIcon
  Icon := TIcon.Create;
  ListView.Items.BeginUpdate;
  try
    // search for the first file
    i := FindFirst(strPath + '*.*', faAnyFile, SearchRec);
    while i = 0 do
    begin
      with ListView do
      begin
        // On directories and volumes
        if ((SearchRec.Attr and FaDirectory <> FaDirectory) and
          (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then
        begin
          ListItem := ListView.Items.Add;
          //Get The DisplayName
          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
            SizeOf(FileInfo), SHGFI_DISPLAYNAME);
          Listitem.Caption := FileInfo.szDisplayName;
          // Get The TypeName
          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
            SizeOf(FileInfo), SHGFI_TYPENAME);
          ListItem.SubItems.Add(FileInfo.szTypeName);
          //Get The Icon That Represents The File
          SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
            SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
          icon.Handle := FileInfo.hIcon;
          ListItem.ImageIndex := ImageList.AddIcon(Icon);
          // Destroy the Icon
          DestroyIcon(FileInfo.hIcon);
        end;
      end;
      i := FindNext(SearchRec);
    end;
  finally
    Icon.Free;
    ListView.Items.EndUpdate;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Assign a Imagelist to the ListView
  ListView1.SmallImages := ImageList1;
  // Show Listview in Report Style and add 2 Columns
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.Add;
  ListView1.Columns.Add;
  LV_InsertFiles('C:\Windows\', ListView1, ImageList1);
end;
bu kod ile . ama istediğim satıra istediğim iconu yada resimi nasıl ekleyebilirim bunu çözemedim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: listview icon eklemek

Mesaj gönderen mrmarman »

StateIndex için bir ImageList gösterdin diyelim. Dilediğin Item'in StateIndex değerini duruma göre değiştirdiğinde resim de değişmiş olacaktır. Verdiğim örnek aslında oldukça detaylı idi...

- Önce istediğin iconu da imagelist'e ekledin değil mi ?

6. satır derken "Items[6]" demek oluyor, bunu biliyorsun. Burada

Kod: Tümünü seç

ListView1.Items[6].StateIndex := 3
dediğinde de ImageList'deki o resmi o item için görünür hale getirmiş olursun.
Resim
Resim ....Resim
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: listview icon eklemek

Mesaj gönderen mkysoft »

demekki yapılabiliyormuş, benim dikkatimi daha önce çekmemiş, özür dilerim.
Cevapla