AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Pointer

Ein Thema von bwolf · begonnen am 30. Nov 2006 · letzter Beitrag vom 30. Nov 2006
Antwort Antwort
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Frage zu Pointer

  Alt 30. Nov 2006, 11:01
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
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Frage zu Pointer

  Alt 30. Nov 2006, 11:03
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;
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Frage zu Pointer

  Alt 30. Nov 2006, 11:09
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Frage zu Pointer

  Alt 30. Nov 2006, 11:16
Vielen Dank für Lösung + Erklärung !
Edit: Könnt ihr mir noch sagen wie ich das gleiche mit nem String anstelle ?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Frage zu Pointer

  Alt 30. Nov 2006, 12:13
Hallo,
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:56 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