AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Im OnKeyDown Taste abfangen

Ein Thema von Matze · begonnen am 14. Aug 2005 · letzter Beitrag vom 15. Aug 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 17:40
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:

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

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

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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 17:41
Zitat von Spider:
Wie gesagt, ist zwar nicht beste Lösung, aber besser wie deine
Kannst du das begründen? Extra dafür AppEvents, finde ich deutlich schlechter, als meine Möglichkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 17:43
Zitat von Matze:
Zitat von Spider:
Wie gesagt, ist zwar nicht beste Lösung, aber besser wie deine
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" .
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 17:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 18:00
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);
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#16

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 18:41
Zitat von Matze:
Hallo!

Im OnKeyPress kann man eine taste ja allgemein so abfangen:

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

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


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;
...Man muss halt nur noch den verflixten Cursor richtig positionieren.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 19:16
Zitat von turboPASCAL:
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).
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#18

Re: Im OnKeyDown Taste abfangen

  Alt 15. Aug 2005, 19:33
Zitat von Matze:
Zitat von turboPASCAL:
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 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