Delphi-PRAXiS
Seite 2 von 2     12   

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/)
-   -   Im OnKeyDown Taste abfangen (https://www.delphipraxis.net/51529-im-onkeydown-taste-abfangen.html)

Die Muhkuh 15. Aug 2005 16:40

Re: Im OnKeyDown Taste abfangen
 
Hi Matze,

ich hab hier eine Lösung, ist IMHO auch nicht die Beste, finde ich aber schöner wie deine ;)

Du brauchst auf deiner Form ein TApplicationEvents.

Danach ein Variable:

Delphi-Quellcode:
IsShift: Boolean;
Im OnCreate stellst du die Variable auf false.

Danach machst du im OnKeyDown deiner Form (vorausgesetzt KeyPreview ist auf true):

Delphi-Quellcode:
IsShift := ssShift in Shift;
Danach brauchst du noch das OnMessage des TApplicationEvents:

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = WM_KEYDOWN then
  begin
    if (Msg.wParam = VK_SPACE) and (IsShift) then
    begin
      SynEdit1.Lines.Add('Blubb');
      Handled := true;
    end;
  end;
end;
Wie gesagt, ist zwar nicht beste Lösung, aber besser wie deine ;)

Matze 15. Aug 2005 16:41

Re: Im OnKeyDown Taste abfangen
 
Zitat:

Zitat von Spider
Wie gesagt, ist zwar nicht beste Lösung, aber besser wie deine ;)

:shock: Kannst du das begründen? Extra dafür AppEvents, finde ich deutlich schlechter, als meine Möglichkeit. ;)

Die Muhkuh 15. Aug 2005 16:43

Re: Im OnKeyDown Taste abfangen
 
Zitat:

Zitat von Matze
Zitat:

Zitat von Spider
Wie gesagt, ist zwar nicht beste Lösung, aber besser wie deine ;)

:shock: Kannst du das begründen? Extra dafür AppEvents, finde ich deutlich schlechter, als meine Möglichkeit. ;)

Upps, sorry. Ich wollte eigentlich schreiben "schöner wie deine" ;) .

Matze 15. Aug 2005 16:44

Re: Im OnKeyDown Taste abfangen
 
Zitat:

Zitat von Spider
Upps, sorry. Ich wollte eigentlich schreiben "schöner wie deine" ;) .

Und wieso soll sie schöner sein? Ich finde das total umständlich. Meinen Code verstehe ich nach einem Jahr noch (wenn ich diese Problematik noch im Hinterkopf habe), aber bei deiner brauch ich erstmal wieder 'ne gewisse Einarbeitungszeit. :mrgreen:

Die Muhkuh 15. Aug 2005 17:00

Re: Im OnKeyDown Taste abfangen
 
Hi Matze,

ich hab nochmal ein bisschen rumprobiert und zu folgender Lösung gekommen:

Klopp das TApplicationEvents erstmal in die Tonne. Die Variable IsShift behälst du aber bei.

Dann folgender Code im OnKeyPress deiner Form:

Delphi-Quellcode:
if IsShift then
    Key := Chr(0);

turboPASCAL 15. Aug 2005 17:41

Re: Im OnKeyDown Taste abfangen
 
Zitat:

Zitat von Matze
Hallo!

Im OnKeyPress kann man eine taste ja allgemein so abfangen:

Delphi-Quellcode:
Key := #0;
da dort Key vom Typ Char ist. Im OnKeyDown ist es jedoch ein Word. Folgendes geht leider nicht:

Delphi-Quellcode:
Key := 0;
Da passiert einfach nichts, der Text wird normal eingefügt. Wie löse ich das Problem?



:gruebel: Was spricht gegen OnKeyPress, bei einem Edit-Felt/Memo funzt das so: (habe kein SynEdit)
Delphi-Quellcode:
// OnKeyPress Edit1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case key of
    #13: begin
           Edit1.Text := Edit1.Text + '
';
           Key := #0;
         end;
    #32: begin
           Edit1.Text := Edit1.Text +'';
           Key := #0;
         end;
    'a': begin
           Edit1.Text := Edit1.Text +'ä';
           Key := #0;
         end;
  end;
end;
:gruebel: ...Man muss halt nur noch den verflixten Cursor richtig positionieren.

Matze 15. Aug 2005 18:16

Re: Im OnKeyDown Taste abfangen
 
Zitat:

Zitat von turboPASCAL
:gruebel: Was spricht gegen OnKeyPress, bei einem Edit-Felt/Memo funzt das so: (habe kein SynEdit)

Dort habe ich kein "Shift" zur Verfügung, was ich aber benötige (siehe oben).

turboPASCAL 15. Aug 2005 18:33

Re: Im OnKeyDown Taste abfangen
 
Zitat:

Zitat von Matze
Zitat:

Zitat von turboPASCAL
:gruebel: Was spricht gegen OnKeyPress, bei einem Edit-Felt/Memo funzt das so: (habe kein SynEdit)

Dort habe ich kein "Shift" zur Verfügung, was ich aber benötige (siehe oben).

Ups, hab ich wohl überlesen, sorry. Dann mach es einfach so:
Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var mgsTemp: TMsg;
begin
 case key of
    VK_Return:
         begin
           memo1.Text := memo1.Text + '
';
           PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
         end;
    VK_Space:
         begin
           memo1.Text := memo1.Text +'';
           PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
         end;
     65: begin
           memo1.Text := memo1.Text +'ae';
           PeekMessage(mgsTemp, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
         end;
  end;
end;


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

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