Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tabulator-Taste simulieren, um ins nächste Editfeld zu... (https://www.delphipraxis.net/47869-tabulator-taste-simulieren-um-ins-naechste-editfeld-zu.html)

Tyler 17. Jun 2005 07:09


Tabulator-Taste simulieren, um ins nächste Editfeld zu...
 
... gelangen :)


Salut!


Meine Form ist voll mit Editfeldern, knapp 30 an der Zahl. Nun soll der Benutzer von einem ins nächste gelangen, indem er Enter drückt, anstatt Tab. (linke Hand woanders, da ist das recht angenehm, wenn man mit der rechten was eingibt und mit Enter weiterkommt).

ICh könnte zwar die Editfelder durchnummerieren von 1 bis 30, und dann per FindComponent eine einzige Proc schreiben, die immer in das nächsthöhere Editfeld "springen" lässt, ich könnte auch für jedes OnKeyDown-Ereignis eine Proc schreiben, die in das nächste Editfeld springen lässt, oder aber ich könnte...?

Das suche ich. Die 3. Lösung. Die Editfelder sollten bezeichnende Namen beibehalten, und ich will nicht 30 Proceduren schreiben, für jedes OnKeyDown eine.

Habt ihr ne Idee?


thx

tyle

mikhal 17. Jun 2005 07:15

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
Versuch es mal hiermit:
Delphi-Quellcode:
//next control:
   SendMessage(Form1.Handle, WM_NEXTDLGCTL, 0, 0);
//prior control:
   SendMessage(Handle, WM_NEXTDLGCTL, 1, 0);
Grüße
Mikhal

uschi 17. Jun 2005 07:15

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
on key press:

Delphi-Quellcode:
 if Key = #13 then begin
    Key := #0;
    PostMessage(Handle,WM_NEXTDLGCTL,0,0);
 end;

Tyler 17. Jun 2005 07:31

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
super! Danke für die schnellen Antworten, und danke für die Lösung.


Funktioniert beides, ich entscheide mich für PostMessage, da jenes laut Hilfe den Aufruf verzögert weitergibt. Kann vielleicht von Vorteil sein :)


thx a lot

tyler

Luckie 17. Jun 2005 07:38

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
PostMessage gibt die Nschricht verzögert weiter? Wo hast du denn das gelesen? Im Gegensatz zu SendMessage kehrt PostMessage sofort zurück, während SendMessage erst zurückkehrt, wenn die Nachricht vom Empfänger verarbeitet wurde.

toms 17. Jun 2005 07:40

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
Hallo,

Dieser Code ueberprueft auch, ob Shift + Tab gedruckt wird.
(um Fokus ins vorherige Control zu setzen)

Delphi-Quellcode:
  if Key = #13 then
  begin
    Key := #0;
    { check, ob SHIFT - Taste gehalten }
    if GetKeyState(VK_Shift) and $8000 <> 0 then
      PostMessage(Handle, WM_NEXTDLGCTL, 1, 0)
    else
      PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
  end;

Tyler 17. Jun 2005 11:06

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
Zitat:

Zitat von Luckie
PostMessage gibt die Nschricht verzögert weiter? Wo hast du denn das gelesen? Im Gegensatz zu SendMessage kehrt PostMessage sofort zurück, während SendMessage erst zurückkehrt, wenn die Nachricht vom Empfänger verarbeitet wurde.

ups, sorry, falsch gelesen, es muss heissen:

Zitat:

Mit dem Windows-API-Aufruf PostMessage senden Sie eine Botschaft an ein Steuerelement, wobei dieses erst dann auf Ihre Botschaft reagiert, nachdem es alle anderen abgearbeitet hat. PostMessage erwartet dieselben Parameter wie SendMessage .
Danke für den Hinweis Lucky :)

@toms:

DAnke, aber Shift+Tab funktioniert ja auch so, mir gings wirklich nur darum, die Editfelder mit Enter in einem Rutsch mit einer Hand am Keyboard durchspringen zu können.... (wie damals, zu alten Pascal-Zeiten ;) )


tyler

trockentaucher 23. Dez 2005 17:55

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
Zitat:

Zitat von mikhal
Versuch es mal hiermit:
Delphi-Quellcode:
//next control:
   SendMessage(Form1.Handle, WM_NEXTDLGCTL, 0, 0);
//prior control:
   SendMessage(Handle, WM_NEXTDLGCTL, 1, 0);
Grüße
Mikhal

Möchte den Thread noch mal aufwärmen... Bei dieser Methode reagiert Windows bei jedem VK_RETURN mitz einem Beep; kann dieser Beep unterbunden werden???

mfg,
trocki

Sharky 23. Dez 2005 17:57

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
Zitat:

Zitat von trockentaucher
... bei jedem VK_RETURN mitz einem Beep; ...

Hai Du trockentaucher,

hast Du mal den Code von Toms versucht?
Sprich Key := #0 in deiner Methode?

trockentaucher 23. Dez 2005 22:52

Re: Tabulator-Taste simulieren, um ins nächste Editfeld zu..
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von trockentaucher
... bei jedem VK_RETURN mitz einem Beep; ...

Hai Du trockentaucher,

hast Du mal den Code von Toms versucht?
Sprich Key := #0 in deiner Methode?

Hai... nee, hatte ich nicht. Hatte lediglich das SendMessage unter OnKeyDown stehen... Da waren die Finger mal wieder schneller als der Kopf... Toms Variante läuft nun ohne das blöde Beep

Mercie für den Hinweis!

trocki


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 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