Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu Pointer (https://www.delphipraxis.net/81608-frage-zu-pointer.html)

bwolf 30. Nov 2006 10:01


Frage zu Pointer
 
Hi all,

folgendes Problem:
Ich habe ein JvExpress Komponente. Dieser Komponente füge ich zur Laufzeit JvExpressButtons hinzu.
Den hinzugefügten Buttons gebe ich über die Data-Eigenschaft Pointer vom Typ integer mit.

Nun würde ich gerne die Werte der Pointer wieder auslesen, und das klappt nich so recht.
Hier mal ein bisschen Code:

Delphi-Quellcode:
// JvExpress zur Laufzeit die Buttons hinzufügen...
procedure TForm1.FormShow(Sender: TObject);
var
  jahr : integer;
begin

  while not DataModule1.q_projekt.Eof do
  begin
    JvExpress1.AddButton;
    jahr := 10;
    JvExpress1.Buttons[JvExpress1.ButtonCount-1].Data := @jahr;
    DataModule1.q_projekt.Next;
  end;
end;

// Bei Click auf einen TButton soll der Wert eines JvExpressButtons ausgelesen werden...
procedure TForm1.Button1Click(Sender: TObject);
var
  pJahr : ^integer;
begin
  pJahr := JvExpress1.Buttons[1].Data;
  showmessage(intToStr(pJahr^)); // Ausgabe ist nicht 10, sondern 15010828
end;
Könnt ihr mir da helfen ?
Danke im vorraus,
Ben

Gruber_Hans_12345 30. Nov 2006 10:03

Re: Frage zu Pointer
 
eventuell mal so probieren ... (nicht getestet)

Delphi-Quellcode:
// JvExpress zur Laufzeit die Buttons hinzufügen...
procedure TForm1.FormShow(Sender: TObject);
var
  jahr : integer;
begin

  while not DataModule1.q_projekt.Eof do
  begin
    JvExpress1.AddButton;
    jahr := 10;
    JvExpress1.Buttons[JvExpress1.ButtonCount-1].Data := Pointer(jahr);
    DataModule1.q_projekt.Next;
  end;
end;

// Bei Click auf einen TButton soll der Wert eines JvExpressButtons ausgelesen werden...
procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(intToStr(integer(JvExpress1.Buttons[1].Data))); // Ausgabe ist nicht 10, sondern 15010828
end;

xaromz 30. Nov 2006 10:09

Re: Frage zu Pointer
 
Hallo,

zur Erklärung der geposteten Lösung: Du speicherst einen Pointer auf eine lokale Variable. Diese ist aber außerhalb der Funktion nicht existent. Folglich zeigt der Pointer irgendwohin. Da ein Pointer aber genauso groß ist wie ein Integer, kannst Du einfach den Integer in den Pointer stopfen.

Gruß
xaromz

bwolf 30. Nov 2006 10:16

Re: Frage zu Pointer
 
Vielen Dank für Lösung + Erklärung !
Edit: Könnt ihr mir noch sagen wie ich das gleiche mit nem String anstelle ?

xaromz 30. Nov 2006 11:13

Re: Frage zu Pointer
 
Hallo,
Zitat:

Zitat von bwolf
Edit: Könnt ihr mir noch sagen wie ich das gleiche mit nem String anstelle ?

Um das Ganze mit einem String machen zu können, musst Du Dir selbst Speicher reservieren, z. B. mit StrAlloc. Dann hast Du einen PChar, also einen Pointer auf einen String. Den kannst Du dann zuweisen. Vergiß aber nicht, dass Du den Speicher dann auch manuell freigeben musst, z. B. mit StrDispose.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 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