![]() |
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... |
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. |
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; |
AW: Memo-Schriftgröße verändern per Tastenkombination
Noch eine Möglichkeit:
Delphi-Quellcode:
Einfach ein KeyDown Event in deiner Edit-Komponente hinzufügen, den Key noch abändern und was dann passieren soll.
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; In diesem Beispiel, wer hätte es gedacht, wird nur auf STRG+A reagiert. |
AW: Memo-Schriftgröße verändern per Tastenkombination
Zitat:
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 ...
|
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.
|
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) |
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; |
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. |
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 18:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz