Bei Enter eine bestimmte Aktion auslösen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Strathmore
Beiträge: 17
Registriert: So 7. Jan 2007, 00:09
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Bei Enter eine bestimmte Aktion auslösen

Beitrag von Strathmore »

Werte Lazarusgemeinde,

wenn ich in einem Formular mit mehreren Widgets, wobei ganz egal sein soll, welcher Widget gerade den Focus hat, die Taste Enter drücke, dann soll eine bestimmte Aktion ausgelöst werden. Wie z.B.

Code: Alles auswählen

procedure TMain.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key = #13 then
    self.btAnzeigen.Click;
end;
Vielen Dank im Voraus.
Zuletzt geändert von Lori am Mo 10. Jan 2011, 20:58, insgesamt 1-mal geändert.
Grund: Highlighter

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von MmVisual »

Main-Formular, Objektinspektor:
KeyPreview := True;
setzen.

Code: Alles auswählen

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  If Shift = [] Then // Ohne Extra-Tasten
  Begin
    Case Key Of
      VK_RETURN:
        Begin
          ...
        end;
    end;
  end;
end;
EleLa - Elektronik Lagerverwaltung - www.elela.de

Strathmore
Beiträge: 17
Registriert: So 7. Jan 2007, 00:09
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von Strathmore »

Super! Schon klappt es!

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von Foxi1896 »

hey zusammen,

ich weiß nicht ob das jetzt das gleiche ist... Aber ich möchte wenn ich Enter drücke das "procedure TForm1.Start1Click(Sender: TObject); " ausgeführt wird.
was muss da ich da machen?

Hatte jetzt sowas geraten:

Code: Alles auswählen

procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key = #13 then
    self.Start1Click.Click;
end;    
 
Danke schonmal.
Gruß Foxi
Zuletzt geändert von Lori am Di 11. Jun 2013, 17:22, insgesamt 1-mal geändert.
Grund: Highlighter

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von MmVisual »

Code: Alles auswählen

procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
 if Key = #13 then
  Start1Click(Nil);
end; 
EleLa - Elektronik Lagerverwaltung - www.elela.de

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von Foxi1896 »

Cool, danke.
Frage was bedeutet das (Nil)?

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

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von Komoluna »

Start1Click ist eine Procedure mit einem Parameter namens Sender, vom Typ TObject
Nil heißt einfach, dass du statt einer Komponente einfach nur einen Pointer übergibst, der aber kein Ziel besitzt.

wenn du Nil übergibst, darfst du aber in deiner Procedure nicht die Parameter abfrage, oder verändern...(das führt zu RuntimeErrors)

Ich hoffe das war verständlich...

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von corpsman »

Nil = "Not in List"
könnte man mit undefiniert übersetzen. Die Routine erwartet eben einen Parameter "Sender:TObject", wenn du keinen Hast kannst du Nil übergeben. Wenn dein Code in Start1Click den Sender nicht auswertet ist es ohnehin egal was du da rein schreibst.

Sinnvoll wird der Sender wenn du z.B bei mehreren OnkeyDowns von Tedit den Selben Eventhandler nimmst, dann kannst du schreiben :

Code: Alles auswählen

 
Tform1.EditDown(Sender:TObject...);
begin
  if key = #13 then 
   TEdit(sender).text =    TEdit(sender).text +'X';
..
 
und must das nicht n-Mal für alle Edits machen.
--
Just try it

Foxi1896
Beiträge: 87
Registriert: Mo 10. Jun 2013, 09:06

Re: Bei Enter eine bestimmte Aktion auslösen

Beitrag von Foxi1896 »

ah verstanden =)
danke

Antworten