Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Listview und SmallImages

  Alt 12. Apr 2014, 08:41
Delphi-Quellcode:
  LV.SmallImages.Free; // Free prüft auch nochmal auf nil
  LV.Clear;
  // Erstelle ImageList
  IL := TImageList.Create(Self); // wer gibt das frei, wenn die Form geschlossen wird?
Warum immer neu erstellen?
Einfacher wäre es, wenn du eine ImageList auf die Form legst, da auch gleich mit dem ListView verbindest und im Code die Liste nur noch leerst (ein kleiner Clear-Befehl).


Und es is eine echt blöde Idee, parallel mitzählen zu wollen.
- erstmal hat man dann die Daten/Positionen doppelt und wenn die mal nicht syncron laufen, dann steht alles schief
- und dann liefern viele Funktionen extra das zurück, was sie sind (der eigenen Index oder die Instanz)
Delphi-Quellcode:
procedure Plot_Listview(CSet : TCountrySet; LV : TListView; IL: TImageList=nil);
var z : TCountries;
begin
  if not Assigned(IL) then
    IL := LV.SmallImages;
  LV.Clear;
  IL.Clear;
  IL.Width := 16;
  IL.Height := 11;
  // Lese alle Laender in der Menge CSet ein und fuege sie der Liste hinzu
  for z in CSet do
    with LV.Items.Add do // verwende die Eigenschaten des "wirklich" neuen Eintrags (kann man auch gern in einer Variable zwischenspeichern)
    begin
      Caption := Get_Country(z);
      ImageIndex := IL.Add(Get_Flag_BMP(z), nil); // weise den Index zu, welcher "wirklich" dem neuen Bild entspricht
    end;
  LV.SortType := stboth;
end;
Es kann auch sein, daß der Index vom Add zurückgegeben wird ... Dann natürlich als Index behandeln und nicht als Instanz.

30% weniger Codezeilen und dazu noch viel weniger Fehlerpotential (praktisch Keines).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Apr 2014 um 08:49 Uhr)
  Mit Zitat antworten Zitat