![]() |
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 ? |
Re: OnKeyPress automatisch auslösen
Schon mal
Delphi-Quellcode:
im OnKeyDown Ereignis probiert?
SendMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
|
Re: OnKeyPress automatisch auslösen
Und dann
Delphi-Quellcode:
Wir wollen ja nicht, daß die Taste bis an ihr Lebensende gedrückt bleibt.
SendMessage(Handle, WM_KEYUP, VK_RETURN, 0);
:zwinker: Edit: Naja, das gehört dann wohl ins entsprechende OnKeyUp-Ereignis. |
Re: OnKeyPress automatisch auslösen
Mist, geht beides nicht. Egal ob alleine oder beide.
|
Re: OnKeyPress automatisch auslösen
Zitat:
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? |
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 ? |
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; |
Re: OnKeyPress automatisch auslösen
Zitat:
|
Re: OnKeyPress automatisch auslösen
Kann hiermit einer was anfangen ? :shock:
Zitat:
|
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 07:12 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