![]() |
AW: Button beim drücken der ENTER-Taste ausführen
Bei uns wird auch mit Return weitergesprungen und das ebenfalls seit Jahrzehnten.(im Nummernblock gibt es nunmal kein Tab)
Allerdings wird das hier global im KeyDown+KeyPreview der Form behandelt. |
AW: Button beim drücken der ENTER-Taste ausführen
Aus dem Gedächtnis
Delphi-Quellcode:
Wenn ein Button fokussiert ist und ENTER gedrückt wird, springt man zum nächsten Control (mit SHIFT zum vorherigen). Das ist nicht Windowskonform und wenn jemand anderes als dein Kunde diese Anwendung mit deinem Namen verknüpft, dann hast Du die Ar***karte, denn sowas macht man nicht.
procedure TForm1.FormKeyDown (Sender: TObject; var Key: Word);
begin If (Key = VK_RETURN) and (ActiveControl is TButton) Then Begin If HiWord(GetKeyState(VK_SHIFT)) <> 0 then SelectNext(Sender as TWinControl,False,True) else SelectNext(Sender as TWinControl,True,True) ; Key := 0 end; end; Aber der Kunde ist König, also was will man machen. |
AW: Button beim drücken der ENTER-Taste ausführen
Wie würdest du das machen, bzw. was gehört da hin? Ich kann mit dem Tab gedudel nicht viel anfangen, ich brauche in Anwendugen ein einfaches 'Return'.
|
AW: Button beim drücken der ENTER-Taste ausführen
Also ich habe das zwar noch nie bei Buttons angewendet, aber bei Edits springe ich so zum nächsten Feld:
Delphi-Quellcode:
Mit Edits kein Problem, bei Buttons klappt das nicht so ohne weiteres. Allgemein funktioniert das direkt mit Leertaste, wie (ich glaube) DeddyH es geschrieben hat. Das kann man leicht lösen mit einer Eigenschaft von TButton:
function NextDlgCtl(AForm: TForm; var Key: Char): Boolean;
begin Result := Key = Chr(VK_RETURN); if Result then begin AForm.Perform(WM_NEXTDLGCTL, 0, 0); Key := #0; end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin NextDlgCtl(Self, Key); end;
Delphi-Quellcode:
//EDIT:
procedure TForm1.FormCreate(Sender: TObject);
begin Button1.Default := True; end; Ups, kleiner Fehler, bzw. Korrektur. Default := True führt ein OnClick beim Button aus, d. h. die Funktion wird nicht über OnKeyPress aufgerufen, sondern über OnClick.
Delphi-Quellcode:
Bei Edit Feldern kommt die Funktion in OnKeyPress rein. Bein Button, falls Default := True ist, in OnClick.
procedure TForm1.Button1Click(Sender: TObject);
var Key: Char; begin Key := #13; NextDlgCtl(Self, Key); end; //Edit Ende Es gibt übrigens auch
Delphi-Quellcode:
, mit dem man den nächsten Control in der Reihe finden kann. Dann einfach dem den Fokus geben. Nur falls das oben nicht klappt.
FindNextControl
|
AW: Button beim drücken der ENTER-Taste ausführen
Zitat:
|
AW: Button beim drücken der ENTER-Taste ausführen
Hallo Dejan Vu,
leider auch hier nichts. mit Editfeldern funktioniert die Return-Taste wunderbar, mit den Buttons bsi jetzt nicht. |
AW: Button beim drücken der ENTER-Taste ausführen
Zitat:
Bisher (aber nur überflogen) habe ich gedacht, Du sollst beim ENTER zum nächsten Button springen. Und das sollte der Code machen (ungetestet, hab kein Delphi hier). |
AW: Button beim drücken der ENTER-Taste ausführen
Hi Dejan Vu,
das mit dem activeControlls hatte ich bereits rausgenommen. Es rührt sich wirklich nichts. Ich möchte nur mit der Return-Taste von Button zu Button hüpfen und eine onClick-Routine des angesprungenes Buttons auslösen. |
AW: Button beim drücken der ENTER-Taste ausführen
Dann schreib Dir doch zur Not einen lokalen Tastaturhook. Mich persönlich würde so ein merkwürdiges Programmverhalten allerdings fürchterlich nerven.
|
AW: Button beim drücken der ENTER-Taste ausführen
Zitat:
Versuche es mal mit der Methode 'TForm.FindNextControl'.
Delphi-Quellcode:
So oder ähnlich sollte das funktionieren. Kann sein, das der Button erst geklickt wird und dann wechselt der Fokus. Du darfst aber auch selbst ein wenig herumprobieren. Ich geh nämlich jetzt nach hause.
Procedure TMyForm.FormKeyDown (Sender : TObject; Var Key : Word);
Var nextCtrl : TControl; Begin if Key <> VK_RETURN Then exit; nextCtrl = FindControl(ActiveControl, True, True, False); // mit dem 3.Bool herumprobieren if nextCtrl is TButton then begin ActiveControl := nextCtrl; TButton(nextCtrl).Click(nil); end end; EDIT: Sooo, klar, warum das nicht geht: Der Button klaut der Form das ENTER, selbst, wenn in der Form KeyPreview:=True gesetzt ist. Da müsste man über die 'WndProc' gehen, dort die WM_KEYDOWN-Message abfangen und dann entsprechend verarbeiten, das sollte funktionieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 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 by Thomas Breitkreuz