Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memo-Schriftgröße verändern per Tastenkombination (https://www.delphipraxis.net/195559-memo-schriftgroesse-veraendern-per-tastenkombination.html)

devidespe 9. Mär 2018 17:39

Memo-Schriftgröße verändern per Tastenkombination
 
Hallo,

ich möchte gerne die Möglichkeit schaffen, die Schriftgröße in einem Memo per Tastenkombination zu vergrößern bzw. verkleinern.

Zum Vergrößern habe ich Strg + (Plus Nummernblock) vorgesehen, zum Verkleinern Strg - (Minus Nummernblock).

Mein erster Ansatz war eine ActionList, aber leider existiert bei den ShortCuts diese Tastenkombination nicht.

Sicher könnte ich zwei Buttons erstellen, die die gleiche Funktionalität haben, aber aus Platzgründen wollte ich das gerne per Tastenkombination lösen.

Hat jemand evtl. eine Idee, wie ich das elegant hinbekomme? Danke für Eure Antworten...

Delphi.Narium 9. Mär 2018 17:54

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Actionlist + Shortcut ist schon ok.

Nur die von Dir gewählte Tastenkombination funktioniert nicht.

Strg++ und Strg+- klappen nicht in jedem Kontext.

Im Objektinspektor kann man beim Shortcut das Gewünschte eingeben, auch wenn es nicht in der Auswahlliste enthalten ist.

strg+umsch+alt++ oder strg+umsch+alt+- sollte eingegeben werden können, nur ob's auch funktioniert, weiß ich nicht.

Für die Vergrößerung bzw. die Verkleinerung der Schrift hab' ich mir angewöhnt Strg+F11 bzw. Strg+F12 zu nehmen und das einheitlich bei allen meinen Programmen. Funktioniert klaglos.

Amateurprofi 10. Mär 2018 02:50

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Ich mache solche Sachen gerne im Form.OnShortcut.

Beispiel:
Delphi-Quellcode:
procedure TMain.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var Key:TShortCut; Shift:TShiftState;
begin
   Shift:=[ssShift,ssCtrl,ssAlt]*KeyDataToShiftState(Msg.KeyData);
   Key:=Msg.CharCode;
   if Shift=[ssCtrl] then begin
      case Key of
         VK_Add     : ShowMessage('Plus');
         VK_Subtract : ShowMessage('Minus');
         else Exit;
      end;
      Handled:=True;
   end;
end;

KodeZwerg 10. Mär 2018 10:28

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Noch eine Möglichkeit:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (chr(Key) in ['A', 'a']) then ShowMessage('Ctrl-A pressed!');
end;
Einfach ein KeyDown Event in deiner Edit-Komponente hinzufügen, den Key noch abändern und was dann passieren soll.
In diesem Beispiel, wer hätte es gedacht, wird nur auf STRG+A reagiert.

Amateurprofi 10. Mär 2018 11:33

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Zitat:

Zitat von KodeZwerg (Beitrag 1395717)
Noch eine Möglichkeit:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (chr(Key) in ['A', 'a']) then ShowMessage('Ctrl-A pressed!');
end;
Einfach ein KeyDown Event in deiner Edit-Komponente hinzufügen, den Key noch abändern und was dann passieren soll.
In diesem Beispiel, wer hätte es gedacht, wird nur auf STRG+A reagiert.

Und wenn das Memo gerade nicht den Fokus hat?
Deshalb lieber das KeyDown-Event der Form verwenden. Und Form.KeyPreview=True setzen.
Es ist auch nicht nötig auf 'a' zu prüfen, denn Key bezeichnet die Taste auf der Tastatur.
Und es ist nicht nur überflüssig sondern auch falsch.
Wenn nämlich Chr(Key)='a' ist, dann wurde die 1 auf dem Ziffernblock gedrückt.
Auch nur zu prüfen of ssCtrl in Shift enthalten ist, ist nicht ausreichend, bzw. führt zu vermutlich unerwarteten Ereignissen.
Stell dir vor du wolltest z.B. auf Ctrl-E reagieren.
Nun schreibst du deinen Text, und um ein '€' (Euro) zu tippen drückst du AltGr-E.
In dem Fall ist ssCtrl ebenfalls in Shift enthalten, denn AltGr ist ja im Prinzip [ssCtrl,ssAlt]
Aus diesem Grund:
Delphi-Quellcode:
if [ssShift,ssCtrl,ssAlt]*Shift=[ssctrl] then ...

Delphi.Narium 10. Mär 2018 12:01

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Deshalb nehme ich für sowas 'ne TActionList. Da muss ich mir weder über Ereignisse noch das Wo noch irgendwelche Tastaturkombinationen und deren Nebenwirkungen Gedanken machen. Und es funktioniert im gesamten Programm.

KodeZwerg 10. Mär 2018 12:37

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Bei mir reichen solche Befehle aus um ans Ziel zu kommen.
Was wenn "STRG"+"+" auch eine Neue Datei erstellen/öffnen soll wenn Memo nicht fokussiert ist?
Ich habs lieber auf diese Weise, bestimmt auch weil ich mich mit den TActionsList's nicht auskenne.
Kann die TActionsList doppelte Hotkeys verwalten, je nachdem was gerade den Fokus hat?
Ich komme bestimmt nochmal in einem eigenen Thread darauf zurück wenn ich soweit bin :-)

Nachtrag, auf jedenfall ist es korrekt das ich keine weiteren Sicherungen eingebaut habe, daß kann man ja nun dank des Tipps nachholen (shit und alt tasten ausgrenzen)

Delphi.Narium 10. Mär 2018 12:59

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Einfach in der Ereignisroutine der Action abfragen, ob eine bestimmte Komponente den Focus hat und dementsprechend reagieren.

Nehmen wir an, wir haben zwei Actions für die Änderung der Schriftgröße. Bei der Action für die Schriftvergrößerung ist die Eigenschaft Tag auf 1 gesetzt und bei der Action für die Schriftverkleinerung ist die Eigenschaft Tag auf -1 gesetzt.
Delphi-Quellcode:
procedure TForm1.acSchritgroesseExecute(Sender: TObject);
begin
  if not Sender is TAction then Exit;
  if Memo1.Focused then begin
    Memo1.Font.Size := Memo1.Font.Size + TAction(Sender).Tag;
  end else
  if Memo2.Focused then begin
    Memo2.Font.Size := Memo2.Font.Size + TAction(Sender).Tag;
  end else
  if Memo3.Focused then begin
    Memo3.Font.Size := Memo3.Font.Size + TAction(Sender).Tag;
  end else begin
    Self.Font.Size := Self.Font.Size + TAction(Sender).Tag;
  end;
end;

KodeZwerg 10. Mär 2018 20:11

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Danke Delphi.Narium für die neuen Erkenntisse (für mich neu).
Dank deinem Beispiel erübrigt sich meine Fragerei nach mehr Wissen und Dank .TAG feature sind jedenfalls bei mir alle Fragen wegen "Multi-Aufruf-Eines-Hotkeys-Per-TActionList" bestens geklärt, ich hoffe der TE ist auch glücklich mit dieser Lösung.

FritzAT 12. Mär 2018 20:41

AW: Memo-Schriftgröße verändern per Tastenkombination
 
Es gibt da vielleicht nochwas...
Delphi-Quellcode:
procedure TMainForm.FormKeyDown(Sender:TObject; var Key:Word;Shift:TShiftState);
var FS: Integer;
begin
  // Strg und "+"
  if (ssCtrl in Shift) and (Key = vk_Add) then
  begin
    FS:= Memo.Font.Size; // akt. Fontsize
    if FS >= 18 then EXIT;  // max. größe
    inc(FS, 2);             // FontSize größe +2
    Memo.Font.Size:= FS;
    // ...
  end;
  // Strg und "-"
  if (ssCtrl in Shift) and (Key = vk_Subtract) then
  begin
    FS:= Memo.Font.Size; // akt. Fontsize
    if FS = 10 then EXIT; // min. Größe
    dec(FS, 2);  // Fontsize -2
    // ...
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Seite 1 von 2  1 2      

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