![]() |
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:
Was könnte das sein?
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; |
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 |
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 |
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. |
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 |
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). |
Re: Pointer auf Richedit und Fontänderung
Hi jim_raynor,
also folgender Code funktioniert bei mir (D7) nicht:
Delphi-Quellcode:
Greetz
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; alcaeus [add] Ich sehe gerade, es funktioniert wenn ich
Delphi-Quellcode:
schreibe.
Form1.Tag := Integer(RichEdit);
[/add] |
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? |
Re: Pointer auf Richedit und Fontänderung
Delphi-Quellcode:
Das ist ja auch schon mal Falsch. Durch das @ bekommst du die Adresse der Variable RichEdit1 raus. Nicht die Adresse des Richedit.
procedure TForm1.FormCreate(Sender: TObject);
begin Form1.Tag := Integer(@RichEdit1); end; Schreibst du:
Delphi-Quellcode:
(ohne das @) funktioniert es auch in Delphi 7 ohne Probleme!
procedure TForm1.FormCreate(Sender: TObject);
begin Form1.Tag := Integer(RichEdit1); end; [edit]Alle Objekte werden als Pointer behandelt!!![/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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