![]() |
Integer als Adresse eines Records
Ich komm gerade nicht weiter. Ich speichere in einer Integer-Variable die Adresse eines Records (zumindest hoffe ich das):
Delphi-Quellcode:
PacketRec ist eine Referenz auf PacketRec, ein Recordtyp.
LVItem.mask := LVIF_TEXT or LVIF_PARAM;
LVItem.iItem := rowIndex; LVItem.iSubItem := 0; GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, @PacketRec.inTime, 'HH:mm:ss', @curTime, Length(curTime)); LVItem.pszText := @curTime; LVItem.lParam := Integer(PacketRec); //hier SendMessage(hIncIPView, LVM_INSERTITEM, 0, Integer(@LVItem)); Nun (etwas später) will ich den Record wieder auslesen:
Delphi-Quellcode:
Leider bekomm ich hier eine AV. Kann mir jemand helfen?
PacketRec := PPacketRec(LVItem.lParam);
|
Moin Chewie,
Delphi-Quellcode:
müsste wohl
LVItem.lParam := Integer(PacketRec);
Code:
heissen.
LVItem.lParam := Integer([color=red]@[/color]PacketRec);
Die genaue Deklaration von PacketRec wäre eventuell recht hilfreich. |
Das bringt auch nix.
Ich hab mich etwas missverständlich ausgedrückt. Also hier die Deklaration:
Delphi-Quellcode:
PacketRec ist also schon ein Zeiger.
type
TPacketRec = packed record {...} end; PPacketRec = ^TPacketRec; var PacketRec: PPacketRec; |
Moin Chewie,
nur noch mal zum Verständnis: Bei dieser Zeile bekommst Du eine AV
Delphi-Quellcode:
:shock:
PacketRec := PPacketRec(LVItem.lParam);
|
Nein, natürlich nicht :oops: :duck:
Natürlich erst, wenn ich auf ein Element des Records zugreife:
Delphi-Quellcode:
Sorry nochmal :angle:
PacketRec := PPacketRec(LVItem.lParam);
if PacketRec <> nil then begin ShowErrorMsg(PacketRec.srcHost, 'Hinweis', hWnd); end else ShowErrorMsg('Keine Daten', 'Fehler', hWnd); [EDIT]: ShowErrorMsg ist eine Kapselung von MessageBox.[/EDIT] |
Ach, verdammt, wieder so ein einfacher Fehler. Ich muss mich schämen. Der Fehler lag nicht an der Adresse, sondern daran, dass ich das Feld mit der Adresse gar nicht anfordere.
Folgendermaßen muss ich natürlich das Feld lParram holen:
Delphi-Quellcode:
Das markierte Stück hab ich natürlich vergessen. :wall: Jetzt klappt alles.
with PNMHdr(lParam)^ do
begin //falls es das Listview war... if hWndFrom = hIncIPView then begin case code of //Item wurde ausgewählt LVN_ITEMACTIVATE: begin with PNMITEMACTIVATE(lParam)^ do begin LVItem.iItem := iItem; LVItem.iSubItem := 0; LVItem.mask := LVIF_PARAM; //<-- ListView_GetItem(hIncIPView, LVItem); PacketRec := PPacketRec(LVItem.lParam); end; end; end; end; end; Mein Problem mit den Icons hab ich allerdings immer noch, falls also noch jemand zu ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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