AGB  ·  Datenschutz  ·  Impressum  







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

Listview ein Image aus ImageList zuweisen

Ein Thema von ereetzer · begonnen am 4. Aug 2011 · letzter Beitrag vom 5. Aug 2011
Antwort Antwort
Benutzerbild von Luckie
Luckie

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

AW: Listview ein Image aus ImageList zuweisen

  Alt 5. Aug 2011, 06:30
Der Vorschlag von MGC ist ein Schritt den Fehler zu finden. Und warum nicht gleich sauberen Code schreiben?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Listview ein Image aus ImageList zuweisen

  Alt 5. Aug 2011, 06:48
Ich würde die Procedure so schreiben :

Delphi-Quellcode:
procedure TForm1.FindFileFileMatch(Sender: TObject;
  const FileInfo: TFileDetails);
var
  ListItem : TListItem;
begin
  ListView1.Items.BeginUpdate;
  ListItem := ListView1.Items.Add;
  ListItem.Caption := IntToStr(ListView1.Items.Count);
  ListItem.SubItems.Add(FileInfo.Location);
  ListItem.SubItems.Add(FileInfo.Name);
  if LongBool(FileInfo.Attributes and FILE_ATTRIBUTE_DIRECTORY) then
    ListItem.SubItems.Add('Folder')
  else
  begin
    ListItem.SubItems.Add(FormatFileSize(FileInfo.Size));
    ListItem.SubItems.Add(DateTimeToStr(FileInfo.ModifiedTime));
  end;
  if AnsiUpperCase(ExtractFileExt(FileInfo.Name)) = AnsiUpperCase('.mp3') then
    ListItem.ImageIndex := 0
  else
    ListItem.ImageIndex := -1;
  ListView1.Items.EndUpdate;
  if not FindFile.Threaded then
    Application.ProcessMessages;
end;
(nicht getestet, nur runtergeschrieben)

So sollte das Befüllen der ListView funktionieren.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#3

AW: Listview ein Image aus ImageList zuweisen

  Alt 5. Aug 2011, 07:14
Um es noch sauberer zu machen:
Einen Class Helper verwenden, der das ListItem befüllt. Bei der Gelegenheit kann man dann auch gleich konsequent refaktorisieren.
Damit sollten dann die Grundregeln ordentlichen OOP einigermaßen erfüllt sein.

Delphi-Quellcode:
Type
// Es ist die Aufgabe eines TFileInfo, in meiner Applikation das richtige Icon zu liefern
  TIconIndexHelper = Class Helper For TFileInfo
    Function IsDirectory : Boolean;
    Function GetImageIndexFromFileName : Integer;
  End;

// Es ist Aufgabe eines TListItem, in meiner App sich selbst anhand eines TFileInfo zu befüllen
  TListViewItemFillFromFileInfoHelper = Class Helper For TListItem
    Procedure FillSubItemsWithNameInfo (aFileInfo : TFileInfo);
    Procedure FillContentsFromFileInfo (aFileInfo : TFileInfo);
  End;

Const
  iiNoIcon = -1;
  iiMP3Icon = 0;

Function TIconIndexHelper.GetImageIndexFromFileName : Integer;
Begin
  if AnsiUpperCase(ExtractFileExt(Name)) = AnsiUpperCase('.mp3') then
    Result := iiMP3Icon
  else
    Result := iiNoIcon;
End;

Function TIconIndexHelper.IsDirectory : Boolean;
Begin
  Result := LongBool(Attributes and FILE_ATTRIBUTE_DIRECTORY)
End;
    
Procedure TListViewItemFillFromFileInfoHelper.FillSubItemsWithNameInfo (aFileInfo : TFileInfo);
Begin
  SubItems.Add(aFileInfo.Location);
  SubItems.Add(aFileInfo.Name);
  if aFileInfo.IsDirectory then
    SubItems.Add('Folder')
  else begin
    SubItems.Add(FormatFileSize(aFileInfo.Size));
    SubItems.Add(DateTimeToStr(aFileInfo.ModifiedTime));
  end;
End;
      
Procedure TListViewItemFillFromFileInfoHelper.FillContentsFromFileInfo (aFileInfo : TFileInfo);
Begin
  Caption := IntToStr(Self.ListView.Items.Count);
  FillSubItemsWithNameInfo(aFileInfo);
  ImageIndex := aFileInfo.GetImageIndexFromFilename;
end;

...
  ListView1.Items.BeginUpdate;
  Try
    ListView1.Items.Add.FillContentsFromFileInfo (FileInfo);
  Finally
    ListView1.Items.EndUpdate;
  End;
  if not FindFile.Threaded then
    Application.ProcessMessages;
end;
Es ist natürlich 3x soviel Schreibarbeit, aber dafür übersichtlich, verständlich und leichter erweiterbar. Meine Meinung.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#4

AW: Listview ein Image aus ImageList zuweisen

  Alt 5. Aug 2011, 07:25
Danke Euch allen!

@FredlFesl:
Das sieht 1. gut und obendrein so aus, das es sauber funktioniert.

Ich kann es erst am Nachmittag ausprobieren.
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#5

AW: Listview ein Image aus ImageList zuweisen

  Alt 5. Aug 2011, 07:42
Ja, probiere es aus, denn ich habs nur runtergetippt.

Wenn man das aber so aufteilt und jedem Objekt/Klasse seine Aufgaben zuteilt, dann klappt es beinahe automatisch.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz