![]() |
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
|
Re: Beepen bei OnKeyDown global unterdrücken
Moin,
mit einem TApplicationEvents-Objekt und dessen OnMessage-Property sollte das möglich sein. Hinter einer solchen Property steht nämlich so etwas wie ein lokaler Hook, dh.: Du kannst in dem entsprechenden OnMessage-Eventhandler dann so ziemlich alle Messages abfangen, die vom System an die Controls deiner Application abgeschickt wurden. Also auch alle WM_Char-Messages an alle TEdits deiner Anwendung:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); var ATWinControl : TWinControl; begin if Msg.message = WM_Char then if Msg.wParam = vk_Return then begin ATWinControl := FindControl(Msg.hwnd); if (ATWinControl <> Nil) and (ATWinControl is TEdit) then Handled := true; end; end; |
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
Delphi-Quellcode:
abfragen ob es ein Edit ist, und dann das Event zuweisen...
Components[n] is TEdit
|
Re: Beepen bei OnKeyDown global unterdrücken
Hai ihr,
warum denn nicht den einfachsten Weg nehmen und sich ein eigene Komponente von TEdit ableiten und in dieser dann die gewünschte Funktionalität einbauen? EDIT: Das ganze könnte dann zum Beispiel so aussehen:
Delphi-Quellcode:
Einfach die Unit in ein Package laden, compilieren, installieren und verwenden.
unit ShEdit;
interface uses Classes, StdCtrls, Controls, Messages, Windows; type TShEdit = class(TEdit) protected FEnterAsTab: Boolean; procedure KeyDown(var Key: Word; Shift: TShiftState); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property EnterAsTab: Boolean Read FEnterAsTab Write FEnterAsTab default True; end; procedure Register; implementation constructor TShEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FEnterAsTab := True; end; destructor TShEdit.Destroy; begin inherited Destroy; end; procedure TShEdit.KeyDown(var Key: Word; Shift: TShiftState); var mgsTemp : TMsg; begin if (Key = VK_RETURN) then begin if (FEnterAsTab) then begin Parent.Perform(WM_NEXTDLGCTL, 0, 0); end; PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; inherited KeyDown(Key, Shift); end; procedure Register; begin RegisterComponents('Sharky', [TShEdit]); end; end. |
Re: Beepen bei OnKeyDown global unterdrücken
Er hat doch schon hunderte von Edits in seinem projekt. Dann müsste er all diese Edits durch sein neues Edit austauschen...
|
Re: Beepen bei OnKeyDown global unterdrücken
Das könnte er z.B. durch Search/Replace in den entsprechenden .dfm-Dateien machen. (Vorher Sicherungskopien machen...)
Gruß, teebee |
Re: Beepen bei OnKeyDown global unterdrücken
du kannst ja eine Klasse schreiben, die die Methode enthält, die du mit ComponentCount zuweist, und einen Verweis auf die alte Methode. Dann machst du ein dynamisches Array dieser Klasse und durchläufst alle edits des forms mit componentcount, und immer, wenn du einen Edit findest, erzeugst du ein neues Element des Arrays und setzt die alte Methode. Die führst du in der neuen Prozedur aus.
|
Re: Beepen bei OnKeyDown global unterdrücken
Mit dieser Idee kommst du exakt 10 Posts zu spät :wink: . Aber du willst wirklich für eine variable Länge dynamische Arrays einsetzen?
|
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
|
Re: Beepen bei OnKeyDown global unterdrücken
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 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