![]() |
direktive "message"
hi,
wie funktioniert das ganze mit der "message" direktive? kann ich damit nachrichten prozefuren überschreiben die an das fenster gesendet werden? ich hab mal folgendes versucht:
Delphi-Quellcode:
es wird beim entern in mein richedit aber keine message angezeigt :(
procedure WMSetFocus(var msg: TWMSetFocus); message WM_SETFOCUS;
... procedure TForm2.WMSetFocus(var msg: TWMSetFocus); begin ShowMessage('hi'); end; |
Re: direktive "message"
Zitat:
|
Re: direktive "message"
hm,
wie kann ich denn ein setfocus für ein richedit abfangen? (mit "message") |
Re: direktive "message"
Natürlich indem du den Handler in einem Nachfahren von TRichEdit implementierst. ;)
Delphi-Quellcode:
type TMiep = class(TRichEdit)
procedure WMSetFocus(var msg: TWMSetFocus); message WM_SETFOCUS; end; |
Re: direktive "message"
Delphi-Quellcode:
Es sollte genug selbserklärend sein.
type
TmyRichEdit = class(TRichEdit) procedure WMSetFocus(var msg: TWMSetFocus); message WM_SETFOCUS; end; TForm1 = class(TForm) RichEdit1: TRichEdit; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } REdit : TmyRichEdit; end; var Form1: TForm1; done : boolean = false; implementation {$R *.dfm} procedure TmyRichEdit.WMSetFocus(var msg: TWMSetFocus); begin inherited; if not done then begin Application.MessageBox('Und jetzt ist die schon ausgeführt.','FOCUS MESSAGE'); done := true;// damit nur einmal diese Meldung kommt end; end; procedure TForm1.FormCreate(Sender: TObject); begin REdit := TmyRichEdit.Create(self); with REdit do begin Parent := Self; Align := alLeft; Visible := true; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin REdit.Free; end; |
Re: direktive "message"
Was war an meiner Erklärung weniger verständlich? :gruebel:
PseudoDingsbums ist ja nicht so doof wie sein Nickname. :zwinker: :mrgreen: |
Re: direktive "message"
Ich wollte nur auf die Nummer sicher gehen.. :wink: :???:
|
Re: direktive "message"
moin,
danke sniper/robert ;) Mit anderen Worten, ich muss eine klasse von TRichEdit ableiten, damits klappt, das weusst ich nicht ;) Zitat:
|
AW: direktive "message"
Hallo,
und was bewirkt die Message Direktive: hier:
Delphi-Quellcode:
procedure WMxxxxxxx(var Msg: TWMxxxxxxxx); [B]Message WM_xxxxxxxxx;[/B]
|
AW: direktive "message"
Wird eine Message mit dieser ID an das Handle des entsprechenden TWinControl gesendet, dann wird diese Methode aufgerufen.
Aber zuerst kommt die Message bei
Delphi-Quellcode:
vorbei.
procedure WndProc(var Message: TMessage); override;
|
AW: direktive "message"
Im grunde ist es ein zusätzlicher Eintrag in der WndProc des jeweiligen Fensters.
|
AW: direktive "message"
Hallo,
Wenn es nur um 1 einzelnes Richedit oder so geht, dann ginge auch folgendes:
Delphi-Quellcode:
(Habs jetzt ausm Kopf getippt. Hoffe mal dass ich keine Fehler drin hab)
TForm1 = class(TForm)
Richedit1: TRichedit; private FOldWndProc: TWndMethod; procedure NewWndProc(var Msg: TMessage); public { Public-Deklarationen } end; procedure TForm1.FormCreate(Sender: TObject); begin FOldWndProc := Richedit1.WndProc; Richedit1.WndProc := NewWndProc; end; procedure TForm1.NewWndProc(var Msg: TMessage); begin FOldWndProc(Msg); // => "inherited" if Msg.Msg = WM_SETFOCUS then ShowMessage('SetFocus!'); end; Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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