![]() |
Delphi-Version: 2007
Listview.OnMouseMove löst AV aus, ich weiß nicht warum
Hallo zusammen,
bin nun schon einige Zeit zugange und finde das Problem einfach nicht. Andere Fehler konnte ich beseitigen mit Assigned. Ziel ist es, wenn die Maus den Itemindex wechselt innerhalb der 1. Spalte(!), soll eine andere Form geschlossen werden. Sowie ich aber mit der Maus aus der ersten Spalte (caption!) in den Bereich einer anderen Spalte (SubItem[x]) komme, gibt es eine Zugriffsverletzung. Im Moment verwende ich folgendes:
Delphi-Quellcode:
Ich erkenne anscheinend das Problem nicht und weiß somit auch nicht wie ich reagieren muss.
procedure TMain_Form.ListView1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var Item: TListItem; begin Item := ListView1.GetItemAt(0, Y); if Assigned(item) then begin if ((ListView1.GetItemAt(X, Y).Index) <> (ListView1.ItemIndex)) then begin with Sender as TListView do begin if Assigned(Fotovorschau_am_Mauszeiger_Form) then begin Preview_Form.Close; end; end; end; end; end; Kann jemand das Problem erkennen? Vielen Dank schon mal vorab! |
AW: Listview.OnMouseMove löst AV aus, ich weiß nicht warum
Wie ist es so?
Delphi-Quellcode:
procedure TMain_Form.ListView1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var Item: TListItem; begin Item := ListView1.GetItemAt(0, Y); if Assigned(item) then begin Item := ListView1.GetItemAt(X, Y); if Assigned(Item) and (Item.Index <> ListView1.ItemIndex) then begin with Sender as TListView do begin if Assigned(Fotovorschau_am_Mauszeiger_Form) then begin Preview_Form.Close; end; end; end; end; end; |
AW: Listview.OnMouseMove löst AV aus, ich weiß nicht warum
Hallo Detlef,
super, das funktioniert. Vielen Dank!:thumb: Ich setze mich seit den letzten Tage mit der Listview auseinander und wir "sind noch keine Freunde". Aber je mehr man sich damit beschäftigt, desto mehr erkennt man auch die Strukturen und wie es zusammenhängt. Einen schönen Tag noch! Ps.: Deinen Lösungsvorschlag finde ich übrigens ziemlich interessant, wäre da nie drauf gekommen. |
AW: Listview.OnMouseMove löst AV aus, ich weiß nicht warum
GetItemAt kann auch nil zurückgeben, deshalb muss man immer daraufhin prüfen, bevor man mit dem Item weiterarbeitet. Du hast das nur im 2. Aufruf vergessen ;)
|
AW: Listview.OnMouseMove löst AV aus, ich weiß nicht warum
genau, aus der Hilfe hatte ich mir das so auch erlesen.
Nur dachte ich dass diesbezüglich damit ALLES erledigt wäre. Zitat:
Natürlich hatte ich es nur "vergessen".... :mrgreen: :dp: |
AW: Listview.OnMouseMove löst AV aus, ich weiß nicht warum
'ne Meldung ala "Zugriffsverletzung bei Adresse $000000xx" weist eigentlich fast immer auf irgendeine Art von NIL-Pointer hin.
(Ja, den genauen Fehlertext hat man uns wieder mal verschwiegen, aber was soll's manchmal funktioniert unsere Glaskugel :glaskugel: doch mal) Da hatte man sich also mal fragen können wo ein NIL auftreten könnte. Außerdem wäre es keine schlechte Idee gewesen sich mal anzusehn in welcher Zeile der Fehler auftritt (notfalls über das, welches man Debuggen nennt). In der entsprechenden Zeile gab es nun nur noch 2 Stellen, welche nil sein könnten, wobei man eine davon (das ListView1) schonmal ausschließen konnte. :zwinker: OK, nun noch was Anderes. Warum verwendest du einmal Sender und ansonsten ListView1 PS:
Delphi-Quellcode:
.
if Assigned(Fotovorschau_am_Mauszeiger_Form) then
Dieses sollte man besser als Erstes abfragen, da dann alle anderen Abfragen eingespart werden könnten, falls dieses False ist. PSS: Ist die Abfrage von
Delphi-Quellcode:
überhaupt notwendig?
ListView1.GetItemAt(0, Y);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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 by Thomas Breitkreuz