![]() |
Pointer Problem
Hallo,
die Pointer machen mir mal wieder zu schaffen:
Delphi-Quellcode:
So, schön und gut. Versuche ich später die Daten abzufragen
procedure TformEinstellungen.UpdateMacroLV(Mac: TMacro);
var Cmd: TMacroCommand; begin LVMacro.Items.BeginUpdate; try LVMacro.Clear; // Alles wieder rein for Cmd in Mac.Commands do with LVMacro.Items.Add do begin Caption := frmMacro.cbCmdType.Items[Byte(Cmd.CmdType)]; SubItems.Add(ArrayToStr(Cmd.Parameters)); Data := @Cmd; // <--- ? end; finally LVMacro.Items.EndUpdate; end; end;
Delphi-Quellcode:
knallts.
Cmd := TMacroCommand(LVMacro.Selected.Data^);
Vorher wurde extra immer für ein PMacroCommand Speicher reserviert und die Werte dann eingetragen, allerdings ist jeder Command wie man sieht Teil einer TList<TMacroCommand> und .Remove funktioniert nicht, wenn es eben nicht genau das selbe Objekt ist (wer hätte das gedacht...). Warum funktioniert denn das schon wieder nicht? Diese Pointer machen mich noch wahnsinnig... |
Re: Pointer Problem
Das @ vor dem cmd muss weg.
|
Re: Pointer Problem
Das geht nicht, TMacroCommand ist ja kein Pointer, TListItem.Data aber schon.
|
Re: Pointer Problem
Wenn TMacroCommand ne Klasse ist, dann schon. Bei nem Record würds stimmen (d.h. ein @ müsste davor)
Aber ich tippe darauf, dass das Problem ist, dass du einen Zeiger auf ne lokale Variable speicherst, der nach dieser Methode nichtmehr gültig ist. |
Re: Pointer Problem
Es ist ein Record.
|
Re: Pointer Problem
Zitat:
Edit: Ich glaube ich rede Müll |
Re: Pointer Problem
Aber wie kann ich das ändern? Direkt auf den Record in der Liste pointen kann ich ja auch nicht (Variable erwartet), und ich kann nicht irgendwie New() benutzen wie früher, da ich ja diesen Record will und nicht irgendeine Kopie (damit TList<>.Remove geht).
|
Re: Pointer Problem
Ach ich würde es evtl mal so probieren (Weiß aber nich obs nen Unterschied macht):
Delphi-Quellcode:
type
PMacroCommand = ^TMacroCommand; Cmd := PMacroCommand(LVMacro.Selected.Data)^; |
Re: Pointer Problem
Ist glaube ich so ziemlich dasselbe, knallt immer noch :?
|
Re: Pointer Problem
Es sollte mit New() gehen.
Also nen Pointer auf den Record deklarieren, New() verwenden, befüllen eun in der Liste speichern. Alternativ eine Klasse nehmen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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