Delphi-PRAXiS
Seite 1 von 2  1 2      

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 OnKeyPress automatisch auslösen (https://www.delphipraxis.net/25747-onkeypress-automatisch-ausloesen.html)

Hansa 11. Jul 2004 21:20


OnKeyPress automatisch auslösen
 
Hi,

ich habe hier eine Form. In der wähle ich einen Wert aus. Dieser soll an ein Stringgrid übergeben werden, so als wäre er von Hand eingegeben und mit Enter bestätigt worden.

Den Wert bekomme ich richtig in die passende Zelle hinein. Das Feld ist dann blau hinterlegt, ich drücke Enter und die gewünschte Aktion wird ausgeführt. Die manuelle Enter-Eingabe ist aber überflüssig. Wenn ich Key auf #13 setzte, so nützt das auch nichts.

Was kann ich da machen, bzw. wo muß was eingestellt werden ?

Luckie 11. Jul 2004 21:22

Re: OnKeyPress automatisch auslösen
 
Schon mal
Delphi-Quellcode:
SendMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
im OnKeyDown Ereignis probiert?

BKempf 12. Jul 2004 00:03

Re: OnKeyPress automatisch auslösen
 
Und dann
Delphi-Quellcode:
SendMessage(Handle, WM_KEYUP, VK_RETURN, 0);
Wir wollen ja nicht, daß die Taste bis an ihr Lebensende gedrückt bleibt.
:zwinker:

Edit: Naja, das gehört dann wohl ins entsprechende OnKeyUp-Ereignis.

Hansa 12. Jul 2004 12:34

Re: OnKeyPress automatisch auslösen
 
Mist, geht beides nicht. Egal ob alleine oder beide.

Sharky 12. Jul 2004 12:36

Re: OnKeyPress automatisch auslösen
 
Zitat:

Zitat von Hansa
Mist, geht beides nicht. Egal ob alleine oder beide.

Hai Hansa,

wenn ich es richtig verstehe trägst Du Programmseitig Daten in dein Grid ein. Warum rufst Du nach dem Eintragen nicht einfach die OnKeyPress Methode des Grids auf?

Hansa 12. Jul 2004 12:47

Re: OnKeyPress automatisch auslösen
 
Genau so ist es: programmseitig wird die Zahl eingetragen, die auch manuell eingegeben werden könnte. Den key setze ich manuell auf #13 um eben Enter zu simulieren. Im OnKeyPress kommt das aber nicht an, bzw. lande ich da erst gar nicht. Würde das OnkeyPress ausgelöst, so würde es gehen wie gewünscht.

P.S.: was ist denn mit KeyPreview etc. Wo könnte man noch nachsehen ?

Sharky 12. Jul 2004 12:55

Re: OnKeyPress automatisch auslösen
 
Lagere das was nach dem OnKeyPress passieren soll in eine eigene Methode aus (trennung von Funktion und GUI).

z.B.:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.Cells[1,1] := 'meow';
  MacheEtwasImGrid (StringGrid1);
end;

procedure TForm1.MacheEtwasImGrid(Sender: TObject);
begin
  ShowMessage ('blubb');
end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if (key = #13) then
  begin
    MacheEtwasImGrid (sender);
  end;
end;

Hansa 12. Jul 2004 17:40

Re: OnKeyPress automatisch auslösen
 
Zitat:

Zitat von Sharky
Lagere das was nach dem OnKeyPress passieren soll...

Das ist ja das Problem. Ich gelange erst gar nicht ins OnKeyPress. Wenn ich das von Hand mache (Enter drücken) wird ja gemacht, was ich will. Setze ich Key := #13; im OnKeyDown, dann passiert eben nichts.

Hansa 12. Jul 2004 18:54

Re: OnKeyPress automatisch auslösen
 
Kann hiermit einer was anfangen ? :shock:

Zitat:

After you assign the value to Cells[I, J], invoke the method that
responds to [Enter] directly:

Cells[I, J] := somestring;
EnterButton.OnClick(EnterButton);

Or, if you know the name of the method, just call that:

Cells[I, J] := somestring;
EnterButtonClick(EnterButton);
Der Wert steht ja im Stringgrid, aber was will der mit dem Button ?? :gruebel:

TStringlist 12. Jul 2004 19:57

Re: OnKeyPress automatisch auslösen
 
Hier nochmal eine perHand-Simulation, die eigentlich ganz gut gehen müsste. Beim OnKeyPress-Eventhandler kämst du da z.B. auch vorbei.


Delphi-Quellcode:
  StringGrid1.cells[X,Y] := 'hallo';
  StringGrid1.Col := X;
  StringGrid1.Row := Y;
  StringGrid1.SetFocus;

  // Wenn du das OnKeyPress-Ereignis brauchst:
  keybd_event(vk_return, 0, 0, 0);
  keybd_event(vk_return, 0, KEYEVENTF_KEYUP, 0);

  StringGrid1.EditorMode := false; // Kniff, um die Zelle in den
  StringGrid1.EditorMode := true; // neutralen Zustand zurückzusetzen


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Seite 1 von 2  1 2      

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