AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ListView, Icon und SHGetFileInfo

Ein Thema von HomerGER · begonnen am 11. Mai 2004 · letzter Beitrag vom 13. Mai 2004
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von HomerGER
HomerGER

Registriert seit: 8. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#21

Re: ListView, Icon und SHGetFileInfo

  Alt 13. Mai 2004, 11:03
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?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#22

Re: ListView, Icon und SHGetFileInfo

  Alt 13. Mai 2004, 12:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von HomerGER
HomerGER

Registriert seit: 8. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#23

Re: ListView, Icon und SHGetFileInfo

  Alt 13. Mai 2004, 14:29
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 ?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.
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