Работа с ListView

Тема в разделе "WASM.WIN32", создана пользователем MeLkiy, 4 май 2007.

  1. MeLkiy

    MeLkiy New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    1
    Добрый всем день!
    Тут задался целью сделать прожку
    Код (Text):
    1. unit Unit1;
    2.  
    3. interface
    4.  
    5. uses
    6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    7.   Dialogs, StdCtrls, ComCtrls, ShellAPI, ImgList, ShellCtrls;
    8.  
    9. type
    10.   TForm1 = class(TForm)
    11.     ImageList1: TImageList;
    12.     ListView1: TListView;
    13.     ComboBox1: TComboBox;
    14.     Edit1: TEdit;
    15.     procedure FormCreate(Sender: TObject);
    16.     procedure ComboBox1Select(Sender: TObject);
    17.   private
    18.     { Private declarations }
    19.   public
    20.     { Public declarations }
    21.   end;
    22.  
    23. var
    24.   Form1: TForm1;
    25.   LI: TListItem;
    26.   FI: SHFILEINFO;
    27.   I: Integer;
    28.   Icon: TIcon;
    29.   F: TSearchRec;
    30. implementation
    31.  
    32. {$R *.dfm}
    33.  
    34. procedure TForm1.FormCreate(Sender: TObject);
    35. var
    36.   I: Integer;
    37.   begin
    38.   if CreateDir('Shortcut') = true then
    39.   begin
    40.    beep;
    41.    ShowMessage('Первый запуск! Создана папка для работы!');
    42.   end;
    43.   if DirectoryExists('Shortcut') = true then
    44.    SetCurrentDir('Shortcut');
    45.    ComboBox1.Clear;
    46.    I := FindFirst('*', FaDirectory, F);
    47.    while I = 0 do
    48.    begin
    49.    if ((F.Attr and FaDirectory = FaDirectory) and (F.Name<>'.') and (F.Name<>'..'))
    50.    then
    51.     ComboBox1.Items.Add(F.Name);
    52.     I := FindNext(F);
    53.    end;
    54.   FindClose(F);
    55.  
    56. end;
    57.  
    58. procedure TForm1.ComboBox1Select(Sender: TObject);
    59.  begin
    60.   Icon := TIcon.Create;
    61.   I := FindFirst(ComboBox1.text + '\' + '*', FaAnyFile-faDirectory, F);
    62.   ListView1.Clear;
    63.   while I = 0 do
    64.   begin
    65.    if ((F.Attr and FaDirectory <> FaDirectory) and
    66.    (F.Attr and FaVolumeId <> FaVolumeID)) then
    67.     LI := ListView1.Items.Add;
    68.     SHGetFileInfo(PChar(ComboBox1.Text + '\' + F.Name), 0, FI, SizeOf(FI),
    69.     SHGFI_DISPLAYNAME);
    70.     LI.Caption := FI.szDisplayName;
    71.     SHGetFileInfo(PChar(ComboBox1.Text + '\' + F.Name), 0, FI, SizeOf(FI),
    72.     SHGFI_ICON or SHGFI_LARGEICON);
    73.     icon.Handle := FI.hIcon;
    74.     LI.ImageIndex := ImageList1.AddIcon(Icon);
    75.     DestroyIcon(FI.hIcon);
    76.     I := FindNext(F);
    77.    end;
    78.   FindClose(F);
    79.  
    80. end;
    81. end.
    Так вот, мне надо чтобы по двойному клику по созданной иконке в ListView запускалась оригинальная иконка находящаяся в папке с которой они создаются в ListView.
    Пробовал через ShellExecute, но незнаю как присвоить этой команде адрес ярлыка по которому был произведён даблклик в ListView, так что помогите плиз
     
  2. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    MeLkiy
    Придется тебе завести массив, в котором будешь хранить полные пути к файлам. А еще лучше двумерный массив, чтобы хранить как пути к файлам, так и пути к папкам. Дело в том, что при вызове ShellExecute третий параметр - полный путь к файлу, а пятый параметр - путь к папке, в которой файл находится.
    удачи.
     
  3. Scratch

    Scratch New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2005
    Сообщения:
    161
    irrona
    Пятый можно null, а второй ессно open
     
  4. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    MeLkiy

    Вроде как есть компонент ShellTreeView, чем он тебя не устраивает ?