AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi SetFocus / Taborder im OnKeyPress setzen ?
Thema durchsuchen
Ansicht
Themen-Optionen

SetFocus / Taborder im OnKeyPress setzen ?

Ein Thema von Hansa · begonnen am 22. Jul 2006 · letzter Beitrag vom 23. Jul 2006
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

SetFocus / Taborder im OnKeyPress setzen ?

  Alt 22. Jul 2006, 21:16
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 ? 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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: SetFocus / Taborder im OnKeyPress setzen ?

  Alt 23. Jul 2006, 06:52
Hai Hansa,

warum verwendest Du nicht einfach diesen Code zum nächsten Control zu gehen?
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.
Stephan B.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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