Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ListView Perform LVM_INSERTITEM - Zugriffsverletzung (https://www.delphipraxis.net/126269-listview-perform-lvm_insertitem-zugriffsverletzung.html)

wth 21. Dez 2008 21:46


ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Hallo,

Ich möchte per LVM_INSERTITEM einer Listview einen Eintrag hinzufügen. Das funktioniert auch, aber kurz nach dem Ausführen von folgendem Code, erhalte ich eine Zugriffsverletzung. Weiss jemand, was daran falsch ist?
Die ListView steht auf "vsReport" und hat 2 Spalten. (Bei einer Spalte erhalte ich keine Exception.)

Delphi-Quellcode:
var itm: TLVItem;
begin
itm.mask:=LVIF_TEXT;
itm.iItem:=0;
itm.iSubItem:=0;
itm.pszText:='test';
listview1.Perform(LVM_INSERTITEM,0,lparam(@itm))
end;

SirThornberry 21. Dez 2008 21:55

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
du schreibst das es funktioniert sagst aber gleichzeitig das der Code einen Fehler verursacht? Welcher Code funktioniert dann?

wth 21. Dez 2008 22:00

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Zitat:

Zitat von SirThornberry
du schreibst das es funktioniert sagst aber gleichzeitig das der Code einen Fehler verursacht? Welcher Code funktioniert dann?

Man sieht noch kurz, dass der Eintrag in der LV erscheint und gleich danach stürzt die Anwendung mit einer Zugriffsverletzung ab.

Ich habe es jetzt auch mal so versucht, aber der Fehler bleibt.
Delphi-Quellcode:
var lvi: TLVItem;
begin
lvi.mask     := LVIF_TEXT;
lvi.iItem    := 0;
lvi.iSubItem := 0;
lvi.pszText  := 'Test';
SendMessage(listview1.handle, LVM_INSERTITEM, 0, LParam(@lvi));
lvi.iSubItem := 1;
lvi.pszText  := 'Test2';
SendMessage(listview1.handle, LVM_SETITEM, 0, LParam(@lvi));
end;

Luckie 21. Dez 2008 22:16

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Warum machst du das nicht über die VCL, da du sie anscheinend sowieso benutzt? Vermischt man VCL und nonVCL, kann das durchaus unvorhersehbare Nebenwirkungen haben.

wth 21. Dez 2008 22:18

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Zitat:

Zitat von Luckie
Warum machst du das nicht über die VCL, da du sie anscheinend sowieso benutzt? Vermischt man VCL und nonVCL, kann das durchaus unvorhersehbare Nebenwirkungen haben.

Ich muss in einigen Threads Items zur LV hinzufügen und da man das ja nicht über die VCL machen darf, wollte ich es über Messages machen.

Gibt es da eine bessere Möglichkeit?

Luckie 21. Dez 2008 23:31

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Ja, greife auf VCL Elemente des Hauptthread über Synchronize zu. Oder schick eine Nachricht mit den Daten an den Haupthread.

sirius 22. Dez 2008 08:05

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Zitat:

Zitat von wth
Ich muss in einigen Threads Items zur LV hinzufügen und da man das ja nicht über die VCL machen darf,

Grafiksachen under Windows generell nicht. Da kann die vCL noch nicht einmal etwas dafür.

wth 22. Dez 2008 12:56

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Zitat:

Zitat von Luckie
Ja, greife auf VCL Elemente des Hauptthread über Synchronize zu. Oder schick eine Nachricht mit den Daten an den Haupthread.

OK, Danke, Synchronize kann ich nicht benutzen, da es kein TThread ist, sondern BeginThread(). Das mit den Nachrichten hört sich gut an, wie sieht es denn aus, wenn man z.B mal 1000 Einträge hinzufügen möchte, das wären 1000 Messages, ist das nicht zuviel, oder geht das ohne Probleme?

Apollonius 22. Dez 2008 14:11

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Es gibt auch eine statische Variante von Synchronize.

wth 22. Dez 2008 15:14

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung
 
Zitat:

Zitat von Apollonius
Es gibt auch eine statische Variante von Synchronize.

Und wie sieht diese aus? :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.
Seite 1 von 2  1 2      

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