![]() |
Beepen bei OnKeyDown global unterdrücken
Hallo liebe DP-Gemeinde,
ich habe hier in der Code-Library folgenden Code zum unterdrücken des typischen Windows-Beep beim OnKeyDown Event gefunden:
Delphi-Quellcode:
Meine Frage wäre nun, wie ich das vielleicht global setzen kann? Ich habe derzeit eine Anwendung mit hunderten von TEdits, und würde gerne den o.g. Code für alle TEdit setzen.
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var mgsTemp: TMsg; begin if Key = VK_RETURN then begin PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; end; Ist das möglich? Wenn ja: wie genau? Vielen Dank schonmal für Eure Hilfe. |
Re: Beepen bei OnKeyDown global unterdrücken
Du könntest beim Programmstart durch Components der Forms iterieren und jedem Edit den Eventhandler zuweisen, wenn es nicht direkter funktioniert.
|
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
|
Re: Beepen bei OnKeyDown global unterdrücken
Moin
das könnte so in der Art aussehen:
Delphi-Quellcode:
procedure EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var mgsTemp: TMsg; begin if Key = VK_RETURN then begin PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; end; // ... var i: Integer; begin for i := 0 to ComponentCount - 1 do begin if Components[i] is TEdit then (Components[i] as TEdit).OnKeyDown := EditKeyDown; end; |
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
Danke, das sieht gut aus, nur ich denke mal das wird nicht ganz funktionieren, da ich für einige meiner TEdits im OnKeyDown-Event eigene Anweisungen stehen habe und die würden doch dann nicht ausgeführt werden, oder? |
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
|
Re: Beepen bei OnKeyDown global unterdrücken
Steig auf .Net um und nimm Delegates.
Scherz :wink: Entweder baust du eine Klasse, die den alten Eventhandler aufnimmt und diesen zusammen mit dem neuen aufruft, oder(ohne Klasse) du leitest die WindowProc der Edits um. Code kann ich heute aus Zeitgründen leider nicht mehr bieten :wink: . |
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
|
Re: Beepen bei OnKeyDown global unterdrücken
Du musst entweder in den paar edits, die schon ein onkeydown haben, einen eventhandler definieren, der die anderen aufruft, oder ... dazu kommen wir später :mrgreen:
Wenn du wirklich die WndProc überschreiben willst, dann schau such mal nach ![]() |
Re: Beepen bei OnKeyDown global unterdrücken
1.)
Zitat:
![]() 2.) Weise jedem Editfeld die selbe OnKeyDown zu. Das geht mit der Shifttaste und der Maus oder über Matze's Code-Beispiel. Wenn du unterschiedliche Sachen im OnKeyDown-Ereignis abfangen musst, kanst du über die Tags und einer Case-Abfrage darauf reagieren. // die edits sind zu dieser stunde normal ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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 by Thomas Breitkreuz