Tasten abfragen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
haderlump
Beiträge: 188
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Tasten abfragen

Beitrag von haderlump »

Hallo zusammen
Ich möchte per Tastendruck eine Aktion auslösen.
Diese würde ich in die OnKeyDown Procedure schreiben.
Als "Vorübung" habe ich schon mal folgenden Code geschrieben.

Code: Alles auswählen

procedure THauptform.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   showmessage(intToStr(key));
end;  
Aber wenn ich eine Taste drücke springt das programm gar nicht in diese Procedure.
Was fehlt denn da noch.

Gruß Fritz

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Tasten abfragen

Beitrag von m.fuchs »

Dein Tastendruck kommt wahrscheinlich gar nicht beim Formular an, sondern wird vorher von einem anderen Control abgefangen und verarbeitet.

Setz mal die Eigenschaft KeyPreview auf True, dann sollte alles passen. Damit wird das Formular vor seinen Controls über den Tastendruck informiert.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

haderlump
Beiträge: 188
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: Tasten abfragen

Beitrag von haderlump »

Bingo Volltreffer ! jetzt geht es

Herzlichen Dank

haderlump
Beiträge: 188
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: Tasten abfragen

Beitrag von haderlump »

Nach dem das gut klappt, kommt natürlich das nächste Problem.
Konkreter:
das ganze gehört zu einer Modellbahnsteuerung.
Nach dem ich per Maus einen Entkuppler ausgewählt habe, soll dieser mit der Space-Taste betätigt werden. Also taste drücken -> Entkuppler geht hoch,
Space-Taste los lassen -> Entkuppler geht wieder runter. Geht auch alles.
Nun das Problem. Wenn ich auf der Taste bleibe, kommt natürlich die Tastenrepitition (macht ja das Betriebssystem).
Kann man Diese temporär ausschalten? Wenn ja, wie ?

Gruß Fritz

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Tasten abfragen

Beitrag von theo »

Wenn ich das richtig sehe, bekommt man nur ein KeyUp Event, wenn man die Taste wirklich loslässt.
Das könntest ausnutzen.

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tasten abfragen

Beitrag von Mathias »

Das sieht dann etwas so aus:

Code: Alles auswählen

var
  gekuppelt: boolean = False;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
begin
  if Key = VK_SPACE then begin
    if not gekuppelt then begin
      gekuppelt := True;
      writeln('Kuppler Hoch');
    end;
  end;
end;
 
procedure TForm1.FormKeyUp(Sender: TObject; var Key: word; Shift: TShiftState);
begin
  if Key = VK_SPACE then begin
    if gekuppelt then begin
      gekuppelt := False;
      writeln('Kuppler Unten');
    end;
  end;
end; 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten