AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Systemicons und Listview

Ein Thema von Lamy · begonnen am 9. Mai 2004 · letzter Beitrag vom 5. Jun 2004
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#1

Systemicons und Listview

  Alt 9. Mai 2004, 16:15
Hi!

Mal wieder ne Frage meinerseits [wie könnts nur ander sein ]

Ich möchte zu meinen Dateien die in einer Listview angezeigt werden, die dzgh. Icons auflisten lassen.

http://www.swissdelphicenter.ch/de/showcode.php?id=421

Wenn ich das aber so übernehme wie das oben im Tut geschrieben steht, führt der immer nur ein einziges Icon auf und fügt es jedem einzelnen Eintrag hinzu.

Warum?
Muss man einen anderen Pfad bei WindowsXp angeben damit das funzt?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Systemicons und Listview

  Alt 9. Mai 2004, 16:19
Ich weiß nicht welchen Pfad du meinst, du suchst ja immer nur nach Dateien, zu denen du die Icons hinzufügen willst. Hast du den Code per Copy&Waste übernommen? So wie der aussieht müsste er funktionieren.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#3

Re: Systemicons und Listview

  Alt 9. Mai 2004, 16:23
Jo, habsch 8) [siehe Ahpha *räusper*]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Systemicons und Listview

  Alt 9. Mai 2004, 16:28
Dir ist klar: Listbox <> Listview?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#5

Re: Systemicons und Listview

  Alt 9. Mai 2004, 16:30
?

Sollte doch auch auf eine Listview anzuwenden sein oder nicht?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Systemicons und Listview

  Alt 9. Mai 2004, 16:31
nicht auch, sondern nur
Listbox kann nicht vsIcon, vsReport und diese Sachen.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#7

Re: Systemicons und Listview

  Alt 9. Mai 2004, 16:32
Ach so, sorry, ich meine natürlich Listview, nicht Listbox, Schreibfehler [korrigiert]!!!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Systemicons und Listview

  Alt 9. Mai 2004, 17:10
Nichts gegen die Schweizer, aber das Beispiel scheint mir ein wenig ... äh ... na, sagen wir: wenig ressourcen-schonend. Die Systemicons werden von Windows durch eine spezielle System-Imageliste zur Verfügung gestellt, an die man rankommen kann.

Das momentane Problem scheint mir zu sein, dass für jede gefundene Datei das Icon ermittelt und in die eigene Imageliste eingetragen wird. Ich habe den Code jetzt nicht 100% analysiert, aber gäbe es bspw. zwei BAT-Dateien, dann würde die Imageliste 2x das gleiche Symbol enthalten.

Ich denke, da kommt man günstiger weg, wenn man besagte System-Imageliste holt und dann nur noch den Index für das jeweilige Icon ermittelt und zuweist. Wie das geht, zeigt u.a. der List-View-Beitrag in den viel gerühmten Win32-API-Tutorials.

Das Wissen lässt sich IMHO auch problemlos auf die VCL übertragen.
  Mit Zitat antworten Zitat
Lamy

Registriert seit: 11. Apr 2004
119 Beiträge
 
Delphi 7 Personal
 
#9

Re: Systemicons und Listview

  Alt 9. Mai 2004, 17:28
öhm...

Da stehen bestimmt viele interessante Sachen drin aber ich hab erstmal Schwierigkeiten durch die Grundlagen durchzusteigen...


Gibts da nicht was einfacheres=
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Systemicons und Listview

  Alt 9. Mai 2004, 17:55
Na ja, evtl. sehe ich das mehr aus dem Blickwinkel des etwas fortgeschritteneren Anwenders. Ich persönlich finde es nicht allzu schwer.

1. Also, du pappst 2 Imagelisten auf deine Form, lässt sie aber komplett leer. Eine nennst du "ilSmall", die andere "ilBig". Und enorm wichtig!: Stell bei beiden im Objektinspektor die Eigenschaft "ShareImages" auf TRUE.

2. Im "OnCreate"-Ereignis deiner Form machst du folgendes:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  hImgSm,
  hImgBig : HIMAGELIST;
  fi : TSHFileInfo;
begin
  // Imageliste mit kleinen Symbolen ermitteln
  hImgSm := HIMAGELIST(SHGetFileInfo('',0,fi,sizeof(fi),
    SHGFI_SYSICONINDEX or SHGFI_SMALLICON));
  // und an die Imageliste auf der Form übergeben
  if(hImgSm <> 0) then
    ilSmall.Handle := hImgSm;

  // Imageliste mit großen Symbolen ermitteln
  hImgBig := HIMAGELIST(SHGetFileInfo('',0,fi,sizeof(fi),
    SHGFI_SYSICONINDEX or SHGFI_ICON));
  // und an die Imageliste auf der Form übergeben
  if(hImgBig <> 0) then
    ilBig.Handle := hImgBig;
end;
3. Jetzt kannst du die Dateien auslesen und mit ihrem Symbol anzeigen lassen. Ich habe das auf die Schnelle via Button-Klick und nicht rekursiv machen lassen. Aber es geht ja auch nur um´s Prinzip:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ds : TSearchRec;
  res : integer;
  li : TListItem;
  fi : TSHFileInfo;
begin
  res := FindFirst('c:\*.*',faAnyFile,ds);
  while(res = 0) do
  begin
    if(ds.Attr and faDirectory = 0) and
      (ds.Name <> '.') and
      (ds.Name <> '..') then
    begin
      // Name der Datei eintragen
      li := Listview1.Items.Add;
      li.Caption := ds.Name;

      // jetzt Zugriff auf die System-Imageliste
      // und nur den Typennamen und das Symbol
      // ermitteln!
      ZeroMemory(@fi,sizeof(fi));
      SHGetFileInfo(pchar('c:\' + ds.Name),0,fi,sizeof(fi),
        SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME);

      // Icon-Index zuweisen, ...
      li.ImageIndex := fi.iIcon;
      // "iIcon" ist eine Integer-Variable und erhält somit
      // wirklich nur den Index auf das Symbol, aber nicht
      // das Symbol als solches. Daher ist es nun egal, wie
      // oft ein Dateityp im Ordner vorkommt.


      // ... & Typennamen als Untereintrag hinzufügen
      li.SubItems.Add(fi.szTypeName);
    end;

    res := FindNext(ds);
  end;
  FindClose(ds);
end;
Fertig.


PS: Wird zwar auch in den Tutorials erwähnt, aber der Vollständigkeit halber: Gib die Imagelisten auf der Form bitte NICHT frei!. Sonst sind evtl. deine Symbole im Explorer weg. Ein Neustart behebt das Problem. Allerdings dürfen die Imagelisten in dem Fall eben nicht freigegeben werden. Sie werden ja auch nicht in deinem Programm erzeugt sondern vom System zur Verfügung gestellt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 17:41 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