AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tab im Edit unterdrücken

Offene Frage von "digleu"
Ein Thema von digleu · begonnen am 24. Aug 2005 · letzter Beitrag vom 29. Aug 2005
Antwort Antwort
digleu

Registriert seit: 28. Okt 2003
Ort: Alfter, das dach der Welt
16 Beiträge
 
#1

Tab im Edit unterdrücken

  Alt 24. Aug 2005, 19:04
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:
if Key = #9 then Key := #0 (bei OnKeyPress)
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
Code:
if Key = VK_TAB then PostMessage(Handle, WM_NextDlgCtl, 1, 0);
aufzurufen (um zum vorherigen Control zurückzuspringen), aber dann springt der Fokus immer so lustig im Formular rum, unschön anzusehen ...

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
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#2

Re: Tab im Edit unterdrücken

  Alt 24. Aug 2005, 19:07
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
Sebastian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Tab im Edit unterdrücken

  Alt 24. Aug 2005, 19:17
Hallo Lars,

wenn du das Verlassen eines Controls per Tab verhindern möchtest, dann kannst du eine OnExit Routine benutzen:

Delphi-Quellcode:
procedure TDemoForm.TestEditExit(Sender: TObject);
begin
  with Sender as TWinControl do
    SetFocus;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
digleu

Registriert seit: 28. Okt 2003
Ort: Alfter, das dach der Welt
16 Beiträge
 
#4

Re: Tab im Edit unterdrücken

  Alt 24. Aug 2005, 22:27
@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? :)
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Tab im Edit unterdrücken

  Alt 24. Aug 2005, 22:40
Hallo Lars!

Mit "SelStart"legst du fest, wo die Selektierung beginnen soll und mit "SelLength", die Anzahl der zu markierenden Zeichen. Also:

Delphi-Quellcode:
Edit1.SetFocus;
Edit1.SelStart := 0;
Edit1.SelLength := 0;
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Tab im Edit unterdrücken

  Alt 25. Aug 2005, 08:49
Hallo Lars,

die Markierung des Textinhaltes ist an das Ereignis OnEnter gekoppelt:

Delphi-Quellcode:
procedure TDemoForm.TestEditEnter(Sender: TObject);
begin
  with Sender as TCustomEdit do
    SelLength := 0;
end;
marabu
  Mit Zitat antworten Zitat
digleu

Registriert seit: 28. Okt 2003
Ort: Alfter, das dach der Welt
16 Beiträge
 
#7

Re: Tab im Edit unterdrücken

  Alt 25. Aug 2005, 12:01
ok, damit konnte ich auf jedenfall jetzt schon ne ganze Menge reißen, wenn es Interessiert:
Code:
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;
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Tab im Edit unterdrücken

  Alt 25. Aug 2005, 12:38
Naja, ob es elegant ist weiß ich nicht

Zwei Dinge: if Key = #9 then Key := #0 (bei OnKeyPress) sollte das nicht eher if Key = VK_TAB then Key := #0 (bei OnKeyPress) heißen?
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

LG
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#9

Re: Tab im Edit unterdrücken

  Alt 25. Aug 2005, 13:02
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  {...}
  private
    { Private-Deklarationen }
    procedure OnAppMessage(var Msg: TMsg; var Handled: Boolean);
  {...}
  end;
Delphi-Quellcode:
{--------------------------------------------------------------------------------------------------}

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;

{--------------------------------------------------------------------------------------------------}
Unterbindet Tabstop in Edit1 und Edit2.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
digleu

Registriert seit: 28. Okt 2003
Ort: Alfter, das dach der Welt
16 Beiträge
 
#10

Re: Tab im Edit unterdrücken

  Alt 29. Aug 2005, 02:27
na perfekt, genau das war mein Anliegen. Vielen Dankeschön (natürlich auch an alle Helfer aus den vorherigen Posts)!
  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:58 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