Delphi-PRAXiS

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 kurze Frage zu Listview und Programmabsturz (https://www.delphipraxis.net/140098-kurze-frage-zu-listview-und-programmabsturz.html)

RedShakal 11. Sep 2009 18:59


kurze Frage zu Listview und Programmabsturz
 
Hallo, ich verwende in meinem Programm eine Listview. Immer wenn ein Eintrag angeklickt wird, wird ein Bild von einem Server geladen und in TImage angezeigt. Dabei stehe ich aber leider vor einem Problem:

Wenn ich die Procedure ListviewClick aufrufe, funktioniert zwar alles Prima, aber sobald man auf eine Leere Spalte klickt, stürzt das Programm mit einem Memory Access Fehler ab.

Wenn man das gleiche mit der Procedure OnSelectItem macht, passiert der Fehler zwar nicht wenn man in eine leere Spalte klickt, aber er kommt sobald man das 2te mal einen Eintrag auswählen will. D.h. Wenn man das erste mal Klickt funktioniert alles Super. Klickt man das 2te mal etwas an, Crasht das Programm.

Ich poste einfach mal den Codefetzen, vielleicht weiß ja irgentwer woran es liegen könnte.

Delphi-Quellcode:
procedure TForm3.MaplistSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  Stream : TFileStream;
begin
  Maplist.Enabled := false; // soll verhindern das geklickt wird während ein Download läuft. ( Programmabsturz )
  Stream := TFileStream.Create(Maplist.Selected.Caption+'.png', fmCreate); // Cache erstellen ( Windows Temp führt bei Vista zu Problemen ka wieso )
  Downloadstatus.Get('http://***/'+Maplist.Selected.Caption+'.png', Stream); // Dateidownload
  Stream.free;
  Minimap.Picture.LoadFromFile(Maplist.Selected.Caption+'.png'); // Cache laden
  deletefile(Maplist.Selected.Caption+'.png'); // Nach dem Laden löschen
  Maplist.Enabled := true; // Eintrag wieder freigeben
end;
Maplist = Listview
Minimap = TImage
Downloadstatus = IdHttp

Hoffe mir kann jemand helfen :mrgreen:

TheReaper 11. Sep 2009 19:53

Re: kurze Frage zu Listview und Programmabsturz
 
Das ist ein Bug der ListView bei den ältern Delphiversionen. Schreib einfach in die erste Zeile deines OnClick Ereignises:
Delphi-Quellcode:
if ListView1.Selected = nil then exit;
Dann dürfte das Problem umgangen sein.

RedShakal 11. Sep 2009 20:00

Re: kurze Frage zu Listview und Programmabsturz
 
Danke, das hat das Problem gelöst. Irgentwie habe ich aber das Gefühl das die Ladezeiten jetzt zu lang sind.

Bei einem Listview wechsel vergehen zwischen Bild download und Anzeigen teilweise fast 3 Sekunden

( Habe DSL 16000 und keines der PNG Bilder ist größer als 40 KB )

Woran kann das liegen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 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