Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView, Icon und SHGetFileInfo (https://www.delphipraxis.net/22059-listview-icon-und-shgetfileinfo.html)

HomerGER 13. Mai 2004 11:03

Re: ListView, Icon und SHGetFileInfo
 
ich habe leider noch ein Problem

mein LV steht auf vsReport
In der SmallImages eine ImageList (LargeImage ist ja nur für vsIcon)
aus dieser ImagesList kommen die Icon für die Columns

jetzt lese ich dateien/laufwerke aus dem System ein
und möchte aus SHFIleInfo das passende Icon haben
dieses Icon soll dann in der ListView angezeigt werden

jetzt brauch ich aber noch eine ImagesList, und wie bekomme ich die ins ListView ohne die ImagesList für die Columns zu überschreiben?

MathiasSimmack 13. Mai 2004 12:16

Re: ListView, Icon und SHGetFileInfo
 
IMHO wirst du da wohl auf das API ausweichen müssen, weil die VCL-List-View eben nur "SmallImages" und "LargeImages" kennt. Die Spalten gehören aber zu einem separaten Control (genannt "Header"), und dem Ding kann man über das API eigene Pics verpassen.

Als Anregung empfehle ich dir den List-View-Beitrag in den Win32-API-Tutorials für Delphi von Luckie. Stichwort: "Die Sortierrichtung im Spaltenkopf anzeigen". Da geht es zwar nur darum, den Sortierpfeil korrekt anzuzeigen, aber das Prinzip ist ja eben genau das: Eine Bitmap auf dem jeweiligen Spaltenkopf zu platzieren.

Musst mal schauen ob dir das irgendwie hilft.


@Daniel: Ich fordere ein Update der "bbcode.php", die das Vorkommen von Win32-API-Tutorials für Delphi automatisch in einen Link auf Luckies Homepage umbaut. :mrgreen:

HomerGER 13. Mai 2004 14:29

Re: ListView, Icon und SHGetFileInfo
 
hab die Icon in den Columns weggelassen

nur hab ich jetzt folgenden effekt

ich hab 2 ListView

lass ich mir in ListView1 alle dateien anzeigen zeigt auch die Icon zu den Dateien
lass ich mir dann ListView2 die Dateien anzeigt zeigt er AUCH die Icon an

nun kommt es

start ich das programm neu und laß mir erst die Dateien in ListView2 anzeigen sind keine Icon da
lass ich sie dann wieder in ListView2 anzeigen sind sie da und kann ich sie mir auch in ListView1 anzeigen lassen

Delphi-Quellcode:
//******************************************************************************
//IE CookieCache lesen
Procedure IECache_Cookie_Lesen_IECU();
var
ie_cache : PINTERNETCACHEENTRYINFO;
size_dw : DWord;
cache_dir_dw : DWord;
icon_list_il : HImageList;
list_item_li : TListItem;
file_info_fi : TSHFileInfo;
begin
    //Icon laden
    icon_list_il := HImageList(SHGetFileInfo('', 0, file_info_fi, SizeOf(file_info_fi), SHGFI_SYSICONINDEX or SHGFI_ICON));

    if (icon_list_il <> 0) then
    begin
        Haupt_Form.Wartung_Temp_ImageList1.Handle := icon_list_il;
        Haupt_Form.Wartung_Temp_ImageList1.Height := 16;
        Haupt_Form.Wartung_Temp_ImageList1.Width := 16;
    end;

    Haupt_Form.Wartung_ListView01.Items.BeginUpdate;
    Haupt_Form.Wartung_ListView01.Items.Clear;

    size_dw := 65536;
    ie_cache   := AllocMem(size_dw);

    try
        cache_dir_dw := FindFirstUrlCacheEntry(NIL, ie_cache^,size_dw);

        while cache_dir_dw <> 0 do
        begin
            Application.ProcessMessages;

            if ((ie_cache^.CacheEntryType AND COOKIE_CACHE_ENTRY) = COOKIE_CACHE_ENTRY) then
            begin
                //Name
                list_item_li := Haupt_Form.Wartung_ListView01.Items.Add;
                list_item_li.Caption := ie_cache^.lpszSourceUrlName;

                //Icon
                SHGetFileInfo(ie_cache^.lpszLocalFileName, 0, file_info_fi, SizeOf(file_info_fi), SHGFI_SYSICONINDEX or SHGFI_ICON);
                list_item_li.ImageIndex := file_info_fi.iIcon;

                //Grösse
                list_item_li.SubItems.Add(Datei_Groesse_Format_GU(Datei_Groesse_GU(ie_cache.lpszLocalFileName)));
            end;

            size_dw := 65536;

            if not FindNextURLCacheEntry(cache_dir_dw,ie_cache^,size_dw) then
            begin
                cache_dir_dw := 0;
            end;
        end;
    finally
        FreeMem(ie_cache,65536);
        Haupt_Form.Wartung_ListView01.Items.EndUpdate;
    end;
end;


//******************************************************************************
//IE URLHistoryCache lesen Verläufe
Procedure IECache_URLHistory_Lesen_IECU();
var
ie_cache : PINTERNETCACHEENTRYINFO;
size_dw : DWord;
cache_dir_dw : DWord;
icon_list_il : HImageList;
list_item_li : TListItem;
file_info_fi : TSHFileInfo;
begin
    //Icon laden
    icon_list_il := HImageList(SHGetFileInfo('', 0, file_info_fi, SizeOf(file_info_fi), SHGFI_SYSICONINDEX or SHGFI_ICON));

    if (icon_list_il <> 0) then
    begin
        Haupt_Form.Wartung_Temp_ImageList1.Handle := icon_list_il;
        Haupt_Form.Wartung_Temp_ImageList1.Height := 16;
        Haupt_Form.Wartung_Temp_ImageList1.Width := 16;
    end;      

    Haupt_Form.Wartung_ListView11.Items.BeginUpdate;
    Haupt_Form.Wartung_ListView11.Items.Clear;

    size_dw := 65536;
    ie_cache   := AllocMem(size_dw);

    try
        cache_dir_dw := FindFirstUrlCacheEntry(NIL, ie_cache^,size_dw);

        while cache_dir_dw <> 0 do
        begin
            Application.ProcessMessages;

            if (ie_cache^.CacheEntryType AND URLHISTORY_CACHE_ENTRY) = URLHISTORY_CACHE_ENTRY then
            begin
                //Name
                list_item_li := Haupt_Form.Wartung_ListView11.Items.Add;
                list_item_li.Caption := ie_cache^.lpszSourceUrlName;

                //Icon
                SHGetFileInfo(ie_cache^.lpszLocalFileName, 0, file_info_fi, SizeOf(file_info_fi), SHGFI_SYSICONINDEX or SHGFI_ICON);
                list_item_li.ImageIndex := file_info_fi.iIcon;
            end;

            size_dw := 65536;

            if not FindNextURLCacheEntry(cache_dir_dw,ie_cache^,size_dw) then
            begin
                cache_dir_dw := 0;
            end;
        end;
    finally
        FreeMem(ie_cache,65536);
        Haupt_Form.Wartung_ListView11.Items.EndUpdate;
    end;
end;


Es ist aber immer nur eine ListView sichbar

kannst du helfen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz