Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SetFocus / Taborder im OnKeyPress setzen ? (https://www.delphipraxis.net/73722-setfocus-taborder-im-onkeypress-setzen.html)

Hansa 22. Jul 2006 21:16


SetFocus / Taborder im OnKeyPress setzen ?
 
Hi,

zuerst dieses Codefragment :

Delphi-Quellcode:
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;
Die letzten 2 Zeilen sind lediglich ein Versuch. So gehts mal nicht.

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 ?

Sharky 23. Jul 2006 06:52

Re: SetFocus / Taborder im OnKeyPress setzen ?
 
Hai Hansa,

warum verwendest Du nicht einfach diesen Code zum nächsten Control zu gehen?
Delphi-Quellcode:
if Key = #13 then Parent.Perform(WM_NEXTDLGCTL,0,0);
Ich habe das mal so gemacht:
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 22:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz