Prozedur durch Tastatur auslösen

Rund um die LCL und andere Komponenten
Antworten
Tanketorion
Beiträge: 25
Registriert: Mo 7. Apr 2014, 20:55

Prozedur durch Tastatur auslösen

Beitrag von Tanketorion »

Hi Leute

Ich möchte in eins meiner Programme eine Prozedur einbauen die dann startet wenn man eine bestimmte Taste auf der Tastaur drückt.
Wie kann man das umsetzten?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
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: Prozedur durch Tastatur auslösen

Beitrag von m.fuchs »

Zum Beispiel indem du KeyPreview und OnKeyPress deines Forms benutzt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Tanketorion
Beiträge: 25
Registriert: Mo 7. Apr 2014, 20:55

Re: Prozedur durch Tastatur auslösen

Beitrag von Tanketorion »

OK danke
aber wie bindet man das ein?? :oops:

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

Re: Prozedur durch Tastatur auslösen

Beitrag von Mathias »

Mit dem Objectinspector, dort kommen bei Ereignissen als Onxxx Funktionen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Tanketorion
Beiträge: 25
Registriert: Mo 7. Apr 2014, 20:55

Re: Prozedur durch Tastatur auslösen

Beitrag von Tanketorion »

Ich habe das auf 2 wege ausprobiert und jedesmal kommt die selbe Fehlermeldung...

1. Versuch

Code: Alles auswählen

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  KeyPreview:=True;
  if Key=VK_S Then ShowMessage ('Hallo')
end;

2. Versuch

Code: Alles auswählen

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  KeyPreview:=True;
  case Key of
    VK_S : ShowMessage('Hallo');
  end;
end;  

Und jedesmal kommt die Meldung
unit1.pas(36,10)Error:Identifier not found "VK_S"

was mache ich falsch??
Zuletzt geändert von Lori am Mi 27. Aug 2014, 15:20, insgesamt 1-mal geändert.
Grund: Highlighter

mulcheo
Beiträge: 57
Registriert: Do 1. Aug 2013, 15:11

Re: Prozedur durch Tastatur auslösen

Beitrag von mulcheo »

Code: Alles auswählen

procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  if key='s' then (...)
end; 
wenn du keypreview im Objektinspektor true setzt, geht's auch, sonst schlucken dir die Buttons und Memos mit Fokus zuvor die Tasten weg :)

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Prozedur durch Tastatur auslösen

Beitrag von Michl »

Tanketorion hat geschrieben:unit1.pas(36,10)Error:Identifier not found "VK_S"

Code: Alles auswählen

uses ..., LCLType;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Tanketorion
Beiträge: 25
Registriert: Mo 7. Apr 2014, 20:55

Re: Prozedur durch Tastatur auslösen

Beitrag von Tanketorion »

OK danke

also gibt es da dann 3 Möglichkeiten?

1. if key=83 then
2. if key='s' then
3. case key of VK_S mit LCLType bei Uses??

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Prozedur durch Tastatur auslösen

Beitrag von Komoluna »

du kannst jede Kombination von 's', 83, VK_S und if, case verwenden.
Zum Beispiel

Code: Alles auswählen

if Key = VK_S then ...
's', 83 und VK_S(=$53 = 83) ist in diesem Fall alles dasselbe
und case ist eigentlich nur ein erweitertes if

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Antworten