![]() |
SetFocus / Taborder im OnKeyPress setzen ?
Hi,
zuerst dieses Codefragment :
Delphi-Quellcode:
Die letzten 2 Zeilen sind lediglich ein Versuch. So gehts mal nicht.
procedure TfrmEing.edNrKeyPress(Sender: TObject; var Key: Char);
begin inherited; KeyPreview := false; if key = #13 then begin ... TabOrder := TIntEdit (Sender).TabOrder + 1; TIntEdit (Sender).SetFocus; Habe 16 Edits für 16 verschiedene DB-Felder. Alle sollen gleich behandelt werden. Aber nur im OnKeyPress ! Bevor zu viele Rückfragen kommen : ja, es sind 16 verschiedene DB-Felder. Die Unterscheidung mache ich im OI. Die Komponente ist ein Abkömmling vom TEdit und hat ein paar Felder mehr, z.B. "DBFeld". Was aber nicht geht : den Focus auf das nächste Feld setzen. Also : wie geht das ? :zwinker: Ich glaube, es müßte so ähnlich gehen, wie oben zu sehen. Wenns irgendwie mit Delphi-Mitteln geht, das wäre mir lieber, als eine WinApi-Funktion. Und weils so schön, ist noch eine Nebenfrage in dem Zusammenhang : ich wandere standardmäßig mit Return zum nächsten Feld. Kann es sein, daß das OnKeyPress hier nur ausgelöst wird, wenn sich das Feld ändert ? "Modified" kommt mir auch seltsam vor. Ähnlicher Effekt. Wann genau wird das intern gesetzt ? |
Re: SetFocus / Taborder im OnKeyPress setzen ?
Hai Hansa,
warum verwendest Du nicht einfach diesen Code zum nächsten Control zu gehen?
Delphi-Quellcode:
Ich habe das mal so gemacht:
if Key = #13 then Parent.Perform(WM_NEXTDLGCTL,0,0);
Delphi-Quellcode:
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 inherited KeyDown(Key, Shift); if (Key = VK_RETURN) and (FEnterAsTab) then begin Parent.Perform(WM_NEXTDLGCTL, 0, 0); PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end; end; procedure Register; begin RegisterComponents('Sharky', [TShEdit]); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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