AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi ListView Perform LVM_INSERTITEM - Zugriffsverletzung

ListView Perform LVM_INSERTITEM - Zugriffsverletzung

Ein Thema von wth · begonnen am 21. Dez 2008 · letzter Beitrag vom 22. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2   
wth

Registriert seit: 17. Sep 2008
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 21. Dez 2008, 22:46
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;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 21. Dez 2008, 22:55
du schreibst das es funktioniert sagst aber gleichzeitig das der Code einen Fehler verursacht? Welcher Code funktioniert dann?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
wth

Registriert seit: 17. Sep 2008
43 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 21. Dez 2008, 23:00
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 21. Dez 2008, 23:16
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
wth

Registriert seit: 17. Sep 2008
43 Beiträge
 
RAD-Studio 2009 Arc
 
#5

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 21. Dez 2008, 23:18
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 22. Dez 2008, 00:31
Ja, greife auf VCL Elemente des Hauptthread über Synchronize zu. Oder schick eine Nachricht mit den Daten an den Haupthread.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 22. Dez 2008, 09:05
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
wth

Registriert seit: 17. Sep 2008
43 Beiträge
 
RAD-Studio 2009 Arc
 
#8

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 22. Dez 2008, 13:56
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 22. Dez 2008, 15:11
Es gibt auch eine statische Variante von Synchronize.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
wth

Registriert seit: 17. Sep 2008
43 Beiträge
 
RAD-Studio 2009 Arc
 
#10

Re: ListView Perform LVM_INSERTITEM - Zugriffsverletzung

  Alt 22. Dez 2008, 16:14
Zitat von Apollonius:
Es gibt auch eine statische Variante von Synchronize.
Und wie sieht diese aus?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:27 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