Shortcut-Folgen

Rund um die LCL und andere Komponenten
diogenes
Beiträge: 202
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien

Shortcut-Folgen

Beitrag von diogenes »

In der IDE geht es zum Beispiel, bei gedrückter Strg-Taste nicht nur eine, sondern zwei (oder vielleicht noch mehr?) tasten zu drücken, um etwas auszulösen, z.B. einen ausgewählten Block im Editor auf konsequente Kleinschreibung umzustellen, was mit Ctrl+K,O geschieht. Wie krieg' ich das bei einer Anwendung hin?
Ceterum censeo computatores per Pascal docendos esse.

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

Re: Shortcut-Folgen

Beitrag von theo »

Ich fürchte das geht nicht so out-of-the-box. Musst wahrscheinlich mit OnKeyUp/Down arbeiten.
Ich glaube auch, dass in der IDE nur Synedit das macht, mit dem eigenen Command Processor.

diogenes
Beiträge: 202
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien

Re: Shortcut-Folgen

Beitrag von diogenes »

Schade. Un wie wird das bei dem SynEdit gemacht?
Ceterum censeo computatores per Pascal docendos esse.

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

Re: Shortcut-Folgen

Beitrag von theo »

Ich habe keine Ahnung.
Aber die gute Nachricht ist: Du hast sämtlichen Quellcode, sowohl für Synedit wie für die IDE. :wink:

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

Re: Shortcut-Folgen

Beitrag von Michl »

K.A., wie das in SynEdit implementiert ist, könntest aber auch einfach sowas machen:

Code: Alles auswählen

uses ..., LCLType;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    FControlKeys: Array of Word;
...
 
procedure TForm1.FormKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key <> VK_CONTROL) then
  begin
    SetLength(FControlKeys, Length(FControlKeys) + 1);
    FControlKeys[High(FControlKeys)]:=Key;
  end
  else
    SetLength(FControlKeys, 0);
 
  if (Length(FControlKeys) = 2) and
     (FControlKeys[0] = VK_K) and
     (FControlKeys[1] = VK_O) then
  begin
    ShowMessage('<CTRL> + <K> + <O> pressed');
    SetLength(FControlKeys, 0);
  end;
end;               

Code: Alles auswählen

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

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

Re: Shortcut-Folgen

Beitrag von Mathias »

Ich habe es probiert, mit einem Menu geht es.

Die ShortCuts können natürlich auch im Objectinspector angegeben werden.

Code: Alles auswählen

  MenuItem2.ShortCut:=TextToShortCut('O');
  MenuItem2.ShortCutKey2:=TextToShortCut('Ctrl+K');
Kleiner Wermutstropfen im Menu-Eintrag werden Ctrl+K, O vertauscht angezeigt.

So wird es richtig angezeigt, aber es funktioniert nicht.

Code: Alles auswählen

  MenuItem2.ShortCutKey2:=TextToShortCut('O');
  MenuItem2.ShortCut:=TextToShortCut('Ctrl+K');
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Shortcut-Folgen

Beitrag von theo »

Mathias hat geschrieben:Ich habe es probiert, mit einem Menu geht es.

Die ShortCuts können natürlich auch im Objectinspector angegeben werden.

Code: Alles auswählen

  MenuItem2.ShortCut:=TextToShortCut('O');
  MenuItem2.ShortCutKey2:=TextToShortCut('Ctrl+K');
So wird die Aktion einfach bei jedem "O" ausgelöst. Das ist wohl nicht der Sinn der Sache.

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

Re: Shortcut-Folgen

Beitrag von Mathias »

So wird die Aktion einfach bei jedem "O" ausgelöst. Das ist wohl nicht der Sinn der Sache.
Stimmt, das habe ich gar nicht gemerkt. :oops:

Dafür habe ich festgestellt, das ShortCutKey2 auf keine Art und Weise reagiert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2906
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: Shortcut-Folgen

Beitrag von m.fuchs »

Mathias hat geschrieben:Dafür habe ich festgestellt, das ShortCutKey2 auf keine Art und Weise reagiert.
Was vermutlich im Zusammenhang damit steht, dass die Eigenschaft im Trunk überhaupt nicht mehr vorhanden ist.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Re: Shortcut-Folgen

Beitrag von theo »

m.fuchs hat geschrieben: Was vermutlich im Zusammenhang damit steht, dass die Eigenschaft im Trunk überhaupt nicht mehr vorhanden ist.
Bei TMenuItem ist sie noch da. Bei TAction giibt es SecondaryShortCuts. Afaik sind beide aber für Alternativen und nicht für Sequenzen.

diogenes
Beiträge: 202
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien

Re: Shortcut-Folgen

Beitrag von diogenes »

Ich seh schon, das werd' ich wohl mit der Hand irgendwie stricken müssen.
Und wie krieg' ich die Anzeige im Menü hin? Wenn ich einfach den Eintragstext mit Tabulator und, sagen wir, "STRG+K,O" erweitere, werden die Erweiterungen nicht rechtsbündig angezeigt, sondern nur mit einem Abstand vom eigentlichen Text.
Ceterum censeo computatores per Pascal docendos esse.

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

Re: Shortcut-Folgen

Beitrag von Mathias »

Ich wollte in den Lazarus Code der IDE gucken.

Weis jemand wie die Komponente heisst, dort wo das Menü und die Komponenten-leiste ist ?

Im Menu Bearbeiten hat es auch solche Doppel-ShortCuts.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

martin_frb
Beiträge: 610
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Shortcut-Folgen

Beitrag von martin_frb »

Soweit ich mich erinnere, reicht die IDE die keystrokes einfach an SynEdit durch, und kriegt das Ergebnis dann in einem Event OnCommandProcess / OnUserCommandProcess oder aehnlich)

keystrokes ide/*key*.pas

menu: search for TIDEMenuItem

diogenes
Beiträge: 202
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien

Re: Shortcut-Folgen

Beitrag von diogenes »

Danke. Ich schau mir's an.
Ceterum censeo computatores per Pascal docendos esse.

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

Re: Shortcut-Folgen

Beitrag von Mathias »

menu: search for TIDEMenuItem
Ich habe den ganzen Lazarus-Ordner, inklusive Datei-Inhalt, nach TIDEMenuItem durchsucht.
Konnte aber nichts finden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten