![]() |
Memofelder und Tastaturbotschaften
Hallo Zusammen,
Diese Memo-Felder machen mich noch wahnsinnig! Mit einer Ereignisbehandlungsroutine für WM_KEYDOWN kann man ja, bekanntermaßen, ;-), Tastaturereignisse abfangen und behandeln. Das geht aber nur solange, wie kein Memo-Feld (Tmemo) auf der Form liegt, weil das offensichtlich, ungefragt, alle Messages abfängt. Denn ohne Tmemo funktioniert untenstehende Behandlungsroutine einwandfrei, ist ein Tmemo da, tut sich mal gar nix. Kann mir mal bitte jemand verraten, wo hier der Code begraben liegt? ;-)
Delphi-Quellcode:
Freundliche Grüße
TForm1 = class(TForm)
Memo1: TMemo; procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN; private { Private-Deklarationen } public { Public-Deklarationen } end; .... procedure TForm1.WMKeyDown(var Message: TWMKeyDown); begin inherited; case Message.CharCode of VK_RETURN: // ENTER pressed if (Message.KeyData and $1000000 <> 0) then // Test bit 24 of lParam ShowMessage('ENTER on numeric keypad') else ShowMessage('ENTER on Standard keyboard'); end; end; Marco |
Re: Memofelder und Tastaturbotschaften
.. hast Du keyPreview der Form auf true gesetzt?
Grüße Klaus |
Re: Memofelder und Tastaturbotschaften
Geht trotzdem dann nicht. Das Problem ist, dass das Memo sich den Focus holt und dann alle Messages bearbeitet und nicht mehr weiterschickt. Du müsstest den Focus des Memos verlassen.
|
Re: Memofelder und Tastaturbotschaften
Zitat:
Viele Grüße Marco |
Re: Memofelder und Tastaturbotschaften
Du kannst doch die Verarbeitungsroutinge des Memos verändern. Also müsstest von TMemo ableiten und dann dein eigenes Memo instanzieren.
|
Re: Memofelder und Tastaturbotschaften
Zitat:
Hiiilfe! |
Re: Memofelder und Tastaturbotschaften
.. die WinProc des Memos vielleicht?
|
Re: Memofelder und Tastaturbotschaften
Hallo Zusammen,
Wer also jemals ein Memofeld hat, und die Enter-Tasten unterscheiden will/muß, hier die Lösung. Klasse ableiten
Delphi-Quellcode:
und dann kann im KeyDown des aufrufenden Formulars beispielsweise stehen:
uses
Windows, STDCTRLS, Messages; type TTextfeldKomponente = Class (TMemo) public NumPadEnter: boolean; // true, wenn enter auf dem Nummernblock gedrückt wird. procedure WndProc(var Msg: TMessage); override; end; implementation procedure TTextfeldKomponente.WndProc(var Msg: TMessage); begin if msg.msg = WM_KEYDOWN then if TWMKEYDOWN(msg).CharCode = VK_RETURN then NumPadEnter := (TWMKEYDOWN(msg).KeyData and $1000000 <> 0); inherited; end; end.
Delphi-Quellcode:
Viel Spaß damit!
case key of
VK_RETURN: begin if tf.NumPadEnter then begin // mach was, wenn enter auf dem Nummernblock gedrückt wurde... Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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