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 Pointer auf Richedit und Fontänderung (https://www.delphipraxis.net/33860-pointer-auf-richedit-und-fontaenderung.html)

der-C 13. Nov 2004 21:32


Pointer auf Richedit und Fontänderung
 
Hallo
ich habe ein Popupmenu welches in der Tag Property ein Pointer auf ein richedit hat.
nun will ich die Font(color,...) ändern aber es kommt bei der zuweisung immer eine AV
Delphi-Quellcode:
var
temprich:^trichedit;
begin
  TempRich := Pointer(Popupmenu1.Tag);
  if Fontdialog1.Execute then
  begin
    temprich.SelAttributes.Name := fontdialog1.Font.Name; // <--- Hier tritt die AV auf
  end;
end;
Was könnte das sein?

alcaeus 13. Nov 2004 21:41

Re: Pointer auf Richedit und Fontänderung
 
Hi der-C,

ist mit dem FontDialog alles ok? Bei mir hat der Code funktioniert, allerdings habe ich direkt was zugewiesen, und nicht über den Fontdialog.

Greetz
alcaeus

der-C 13. Nov 2004 21:45

Re: Pointer auf Richedit und Fontänderung
 
ja das habe ich auch ausprobiert das geht auch bei mir aber mit Fontdialog kommt AV,
das kann ich mir nicht erklären
wenn ich aber einem Richedit direkt ändere (also statt ^Trichedit nur TRichedit) dann gehts auch
vieleicht liegts ja an der addresse

jim_raynor 13. Nov 2004 21:50

Re: Pointer auf Richedit und Fontänderung
 
Dein Fehler liegt hier:

temprich:^trichedit;

TRichEdit ist bereits ein Pointer.

Bei der Zuweisung zur Tag Eigenschaft musst du nur sowas machen:

Popup.Tag:=Integer(RichEdit1);

Beim Auslesen reicht es dann wenn du

TRichEdit(Popup.Tag) schreibst. Die Variable temprich muss dann auch als

temprich: TRichEdit

definiert sein.

alcaeus 13. Nov 2004 21:59

Re: Pointer auf Richedit und Fontänderung
 
Hi der-C,

wird der FontDialog vllt. dynamisch erstellt? Und wie speicherst du die Adresse des Richedit ins Tag?
@jim-Raynor: dein Weg funktioniert leider nicht. Wenn die Adresse abgespeichert wird, dann musst du auch wieder mit einem Pointer drauf zugreifen. Du musst ihn aber nicht dereferenzieren.

Greetz
alcaeus

jim_raynor 13. Nov 2004 22:05

Re: Pointer auf Richedit und Fontänderung
 
Warum sollte es nicht funktionieren? TRichEdit ist doch quasi ein Pointer. Nur wird es von Delphi geschickt versteckt, da keinerlei Referenzierung notwendig sind.

Du kannst ohne Probleme:

temprich:=TRichEdit(Popup.Tag) machen (zumindest war es in Delphi 5 noch so).

alcaeus 13. Nov 2004 22:07

Re: Pointer auf Richedit und Fontänderung
 
Hi jim_raynor,

also folgender Code funktioniert bei mir (D7) nicht:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Tag := Integer(@RichEdit1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var temprich: TRichEdit;
begin
  temprich := TRichEdit(Form1.Tag);
  FontDialog1.Execute;
  temprich.SelAttributes.Name := FontDialog1.Font.Name;
end;
Greetz
alcaeus

[add]
Ich sehe gerade, es funktioniert wenn ich
Delphi-Quellcode:
Form1.Tag := Integer(RichEdit);
schreibe.
[/add]

der-C 13. Nov 2004 22:10

Re: Pointer auf Richedit und Fontänderung
 
es funktioniert so wie es jim_raynor gesagt hat
danke :thumb:
sind alle von TWinControl abgeleitete Datendypen Pointer, woran erkenne ich was Pointer ist und was nicht?

jim_raynor 13. Nov 2004 22:11

Re: Pointer auf Richedit und Fontänderung
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Tag := Integer(@RichEdit1);
end;
Das ist ja auch schon mal Falsch. Durch das @ bekommst du die Adresse der Variable RichEdit1 raus. Nicht die Adresse des Richedit.


Schreibst du:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Tag := Integer(RichEdit1);
end;
(ohne das @) funktioniert es auch in Delphi 7 ohne Probleme!

[edit]Alle Objekte werden als Pointer behandelt!!![/edit]


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