![]() |
Tab im Edit unterdrücken
Hi @ll,
besuche diese Seite schon eine Weile und habe schon sehr viele Anstöße und Ideen hierher bekommen, also großes Lob an alle dafür, dass es so eine effiziente und freundliche Delphi-Community im Netz gibt. Nun zu meinem Anliegen: Wie kann ich erreichen, dass man mit der Tabluator-Taste nicht mehr von einem Edit-Feld (z.B.) ins nächste springen kann? Das Problem ist nämlich, dass die Events OnKeyPress und OnKeyDown auf die Tabulator-Taste garnicht reagieren und ich somit sowas wie:
Code:
nicht machen kann. Das Event OnKeyUp reagiert zwar auf die Tab-Taste, allerdings ist es dann ja schon zu spät (der Fokus ist schon auf dem nächsten Control). Natürlich gibt es die Möglichkeit OnKeyUp
if Key = #9 then Key := #0 (bei OnKeyPress)
Code:
aufzurufen (um zum vorherigen Control zurückzuspringen), aber dann springt der Fokus immer so lustig im Formular rum, unschön anzusehen ...
if Key = VK_TAB then PostMessage(Handle, WM_NextDlgCtl, 1, 0);
also vielen Dank im Vorraus, Suche wurde natürlich genutzt, google auch und ich bin zu keinem adäquaten Ergebniss gekommen. Viele Grüße Lars |
Re: Tab im Edit unterdrücken
Schau dir mal die Eigenschaft TabStop eines Editfeldes an.
In ein Editfeld, bei dem TabStop = False ist, wird nicht mit #9 reingesprungen. -> Also alle Edits.TabStop := False |
Re: Tab im Edit unterdrücken
Hallo Lars,
wenn du das Verlassen eines Controls per Tab verhindern möchtest, dann kannst du eine OnExit Routine benutzen:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.TestEditExit(Sender: TObject);
begin with Sender as TWinControl do SetFocus; end; |
Re: Tab im Edit unterdrücken
@SebE: ne das wollte ich nicht, aber trotzdem danke!
@marabu: ja genau, perfekt, genau das war mein Anliegen ... ich will ja jetzt nicht zu hohe Ansprüche stellen, aber bei dieser Methode wird der Text, der im Edit-Feld drin ist bei drücken von Tab einmal vollständig markiert ... geht das noch anders? :) |
Re: Tab im Edit unterdrücken
Hallo Lars!
Mit "SelStart"legst du fest, wo die Selektierung beginnen soll und mit "SelLength", die Anzahl der zu markierenden Zeichen. Also:
Delphi-Quellcode:
Grüße
Edit1.SetFocus;
Edit1.SelStart := 0; Edit1.SelLength := 0; Faux |
Re: Tab im Edit unterdrücken
Hallo Lars,
die Markierung des Textinhaltes ist an das Ereignis OnEnter gekoppelt:
Delphi-Quellcode:
marabu
procedure TDemoForm.TestEditEnter(Sender: TObject);
begin with Sender as TCustomEdit do SelLength := 0; end; |
Re: Tab im Edit unterdrücken
ok, damit konnte ich auf jedenfall jetzt schon ne ganze Menge reißen, wenn es Interessiert:
Code:
allerdings habe ich immernoch ein Problem, denn mir ist gestern nicht aufgefallen, dass man das Edit-Feld ja jetzt _garnicht_mehr verlassen kann ... weder mit Enter (also in diesem Fall über PostMessage) noch mit der Maus.
procedure TForm1.Edit1Exit(Sender: TObject);
begin with Sender as TCustomEdit do begin // Die aktuelle Auswahlposition in der nicht verwendeten Eigenschaft Tag speichern Tag := SelStart; SetFocus; end; end; procedure TForm1.Edit1Enter(Sender: TObject); begin with Sender as TCustomEdit do begin // Die aktuelle Auswahlposition aus der sonst nicht verwendeten Eigenschaft Tag lesen SelStart := Tag; SelLength := 0; end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin {#13 = Enter} Key := #0; PostMessage(Handle, WM_NextDlgCtl, 0, 0); end; end; So spontan fällt mir auch nicht ein wie ich das mit der Maus hinbekommen sollte. Für die Enter-Taste fällt mir spontan so ein übler Hack ein, also z.B. OnKeyPress den DragCurser von crDrag auf crNormal setzen (und bei allen anderen Tasten auf crDrag) und den Inhalt von OnExit nur ausführen lassen, wenn der DragCurser auf crNormal gesetzt ist (ja das vergewaltigt die Bedeutung von DragCurser, aber solange ich kein Drag&Drop realisieren will...). Hat hier vielleicht wer eine elegantere Idee? Lg Lars |
Re: Tab im Edit unterdrücken
Naja, ob es elegant ist weiß ich nicht :zwinker:
Zwei Dinge:
Delphi-Quellcode:
sollte das nicht eher
if Key = #9 then Key := #0 (bei OnKeyPress)
Delphi-Quellcode:
heißen?
if Key = VK_TAB then Key := #0 (bei OnKeyPress)
Zweitens hätte ich eine ganz eine andere Idee: Ein MainMenu mit einem Eintrag mit visible := False und standardmäßig auch enabled := False, dann mit Shortcut auf die Tabulator-Taste: im onEnter-Event setzt du enabled des MenuItems auf True, im onExit auf False. Nicht so elegant, aber es sollte funktionieren :wink: LG |
Re: Tab im Edit unterdrücken
Delphi-Quellcode:
type
TForm1 = class(TForm) {...} private { Private-Deklarationen } procedure OnAppMessage(var Msg: TMsg; var Handled: Boolean); {...} end;
Delphi-Quellcode:
Unterbindet Tabstop in Edit1 und Edit2.
{--------------------------------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := OnAppMessage; end; {--------------------------------------------------------------------------------------------------} procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean); begin Handled := False; if Msg.message = WM_KEYDOWN then if Msg.wParam = VK_TAB then if (ActiveControl = Edit1) or (ActiveControl = Edit2) then Handled := True; end; {--------------------------------------------------------------------------------------------------} |
Re: Tab im Edit unterdrücken
na perfekt, genau das war mein Anliegen. Vielen Dankeschön (natürlich auch an alle Helfer aus den vorherigen Posts)!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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