Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Im Stringgrid mit Enter in nächste Zelle (https://www.delphipraxis.net/6180-im-stringgrid-mit-enter-naechste-zelle.html)

Hansa 2. Jul 2003 12:18


Im Stringgrid mit Enter in nächste Zelle
 
Hi,

das bezieht sich hier drauf:

http://www.delphipraxis.net/viewtopi...c964cdbf2803c9

Es geht um Enter zu benutzen, um in ein anderes Feld zu gelangen. Hierzu muß man KeyPreview der Form auf true setzen und das OnKeyDown-Ereignis bearbeiten. Steht alles in dem alten Thread.

Nun lege man mal ein Edit-Feld und ein Stringgrid auf eine Form. Beim Verlassen des Edits soll der Cursor in der ersten Zelle des Stringgrids stehen. Mit Return gehts dann aber nicht weiter von Zelle zu Zelle. Gehe ich so vor, wie in dem Thread beschrieben, hängt der Cursor in der ersten Zelle fest.

Christian Seehase 2. Jul 2003 12:26

Moin Hansa,

im OnKeyDown oder OnKeyUp des Stringgrids:

Delphi-Quellcode:
  if Key = VK_RETURN then begin
    SendMessage(StringGrid1.Handle,WM_KEYDOWN,VK_DOWN,0);
    SendMessage(StringGrid1.Handle,WM_KEYUP,VK_DOWN,0);
  end;

Hansa 2. Jul 2003 12:35

Hi,

ich glaube es liegt daran, daß die Form ein OnKeyDown hat, das Stringgrid aber auch. Jetzt habe ich das EnterTab da eingebaut, nützt aber nichts. Übrigens
Code:
if not (key in [48..57,8,13]) then
geht auch nicht, trotz der Abfrage wird alles akzeptiert. 8)

Delphi-Quellcode:
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var Cell_ID : string;
begin
//   EnterTab(Sender,Key,Shift,[],[],true);
   IF StringGrid1.Col=1 THEN BEGIN
     case Key of
       VK_F9  : SucheArtikel;
     end;
  END;
  if not (key in [48..57,8,13]) then
    key := 0;
  with StringGrid1 do begin
    case key of
      VK_RETURN :
        begin
...
        end;
      VK_ESCAPE :
        begin
          Transaction.Commit;
          Close;
      end;
    end;
  end;
end;

Hansa 2. Jul 2003 13:30

Zitat:

Zitat von Christian Seehase
Moin Hansa,

im OnKeyDown oder OnKeyUp des Stringgrids:

Delphi-Quellcode:
  if Key = VK_RETURN then begin
    SendMessage(StringGrid1.Handle,WM_KEYDOWN,VK_DOWN,0);
    SendMessage(StringGrid1.Handle,WM_KEYUP,VK_DOWN,0);
  end;

geht nicht, im OnkeyDown des Grids komme ich nicht an, das ist der haken.

Christian Seehase 3. Jul 2003 15:20

Moin Hansa,

Zitat:

Zitat von Hansa
Hi,

ich glaube es liegt daran, daß die Form ein OnKeyDown hat, das Stringgrid aber auch. Jetzt habe ich das EnterTab da eingebaut, nützt aber nichts. Übrigens
Code:
if not (key in [48..57,8,13]) then
geht auch nicht, trotz der Abfrage wird alles akzeptiert. 8)

Wenn ich nicht sehr irre hatte ich zu dem Thema schon geschrieben, dass ich das nachvollziehen kann (warum auch immer), dass man diese Abfrage aber im OnKeyPress funktioniert.

Ich hab' eben auch mal ausprobiert, was passiert, wenn ich KeyPreview auf true und eine OnKeyDown im Hauptformular habe:
Es funktioniert trotzdem.

BTW: Wenn Du key auf 48..57,8, 13 einschränkst, nutzt Dir Dein Case key of VK_ESCAPE nichts. Den hast Du nicht zugelassen ;-)

Hansa 3. Jul 2003 15:22

stimmt, 27 habe ich nicht zugelassen :mrgreen:


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