VCL: Eingabe Unicodezeichen in Editorcontrol
Heute ist durch einen Kunden eine Frage aufgekommen: wie kann ich in einem Editor Control das Ohm Zeichen (Unicode u+03a9) eingeben? Normalerweise funktioniert es ja mit ALT+nnnn auf dem Zahlenblock. Aber bei '3a9' haut das natürlich nicht hin. Alt + der entsprechende Dezimalwert 937 funktionieren aber auch nicht.
In LibreOffice oder anderen Programmen kann man so etwas machen, in dem man '3a9' eingibt und dann 'ALT+C' drückt. Gibt es so etwas auch für VCL Controls? Bzw., da ich es in einem selbst geschriebenen Editor verwenden will, gibt es hier irgendwelche fertige Unterstützungsroutinen, die man zum Ersetzen verwenden kann? Danke, Uli |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
In einem TRichEdit kannst du den vierstelligen Hex-Code eingeben und ALT-X drücken.
|
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Eigenes Programm und auch änderbar?
Für so Dinge wie Ω, Ø und ± haben wir im Form.OnKeyDown (KeyPreveiw) eigene ShortCut eingebaut. Bzw., inzwischen ist das eine kleine Tabelle, wo die Kunden ShortCuts eintragen können und dazu ein Zeichen oder ganze Texte, welches dann in Edit.SelText reingeschrieben wird. Wenn nur einmalig/selten: [Win] charmap [Enter] ... suchen und dann Copy&Paste |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Danke Uwe, das hilft schon mal weiter. Jetzt muß ich nur noch herausfinden, wie das dort gemacht wird. Ich benötige das Ganze nämlich für einen selbst geschriebenen Editor :(
@himitsu: es muß leider eine allgemeine Lösung sein. Eine Ersetzung nur für einzelne Zeichen hilft mir leider nichts |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Em Einfachsten sind ShortCuts/Tasten, die nur aus einer Sequenz bestehen, aber mehr/längeres geht auch recht "einfach".
z.B. Ordinal ein Char eingeben: mit AltGr+32 ein Leerzeichen :)
Delphi-Quellcode:
Hexadezimal ließe sich auch umsetzen.
type
TForm10 = class(TForm) RichEdit1: TRichEdit; procedure RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private FIsInput: Boolean; FTheChar: Char; end; procedure TForm10.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if FIsInput then begin // hier vielleicht auf 0-9 prüfen und wenn nicht, dann FIsInput:=False und kein Key:=0 Key := 0; Exit; end; if (Key = VK_CONTROL) and (Shift = [ssCtrl]) then begin FIsInput := True; FTheChar := #0; Key := 0; Exit; end; {...} end; procedure TForm10.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if FIsInput then begin if Key = VK_CONTROL then begin RichEdit1.SelText := FTheChar; FIsInput := False; end else if Key in [Ord('0')..Ord('9')] then FTheChar := Char(Ord(FTheChar) * 10 + Key - Ord('0')); Key := 0; Exit; end; {...} end; Oder in KeyEvents der Form (KeyPreview) und dort dann in (ActiveContol as TCustomEdit).SelText schreiben Irgendwo waren neben den Windows-VK_XYZ auch neue platformunabhängige vkXyz in aktuellen Delphis drin (ich glaub da gab es dann auch sowas wie vk0 bis vk9) |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Zitat:
Alt drücken und halten, dann das Plus (+) Zeichen auf dem Zahlenblock und danach der HEX Code mit den Zahlen auf den Zahlenblock und den Zeichen A-F auf der normalen Tastatur. Habe das soeben so in einem TMemo getestet und es geht. ALT+03a9 ergibt das Ohm-Zeichen. Zitat:
|
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Zitat:
Delphi-Quellcode:
procedure TForm599.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var code: Integer; begin if (Shift = [ssAlt]) and (Key = Ord('X')) then begin Memo1.SelLength := -4; if TryStrToInt('$' + Memo1.SelText, code) then begin Memo1.SelText := Chr(code); Key := 0; end; end; end; |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Ω
Wenn der Kunde ein geupdatetes Windows 10 hat, kann er in einem beliebigen Editor auch die Windows-Logo-Taste + . (Punkt zwischen Komma und Strich) drücken. Auf dem dritten "Tab" oben kommt man zu allen möglichen Sonderzeichen. https://support.microsoft.com/de-de/...e-6e5116097942 |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Schon einmal vielen Dank für all die Hinweise und Ratschläge! Ich schau die Tage was sich davon in die bestehende Anwendung integrieren läßt.
|
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Zitat:
|
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Du hast meinen Beitrag auch gesehen? Ich denke du musst da überhaupt nichts selber integrieren, weil in Windows schon alles vorhanden ist um Unicodezeichen einzufügen. Die ALT+XXXX Variante oder Windows-. Sollten doch dicke reichen.
|
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Rolf,
das stimmt schon. Nur funktioniert das nur, wenn Du kein Menü hast, bei dem einer der Buchstaben 'A' - 'F' als Shortcut über den Namen definiert ist, also '&Ansicht' zum Beispiel. Dann klappt das nicht mehr. Man muß also auch in diesem Fall noch was machen, um die Aktivierung des Menü zu vermeiden. |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Ich liebe die Konsistenz von Eingaben:
Ich hab nur die drei Controls auf eine Form gelegt (Delphi 10.2.3, auf deutschem Windows 10 (aktuell)) und dann die obigen Eingaben gemacht. Ist das bei euch auch so? |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Wieso? Ist doch voll konsequent.
* Edit und Memo sind das Gleiche (nur single-line und multi-line) * und sonst macht halt jeder Entwickler das was er für gut empfindet |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Nicht ganz: alle drei basieren doch auf Windows Standard Controls. Und die sollten doch schon einheitlich sein. Insbesondere die letzten 4 Eingaben sollten alle das 'Ω' liefern denn das wäre ja die Unicode Bedeutung: https://codepoints.net/U+03A9
Kann auch sein, daß ich einen Denkfehler hab; aber wenn ja, wo liegt der? |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Nee nee, das Richedit ist was gaaaaanz Anderes.
ALLE Anderen haben #13#10 und ein paar Wenige #10 als Zeilenumbruch. Aber das RichEdit hat #13. Emba hat versucht das zu "beheben", also macht beim Zugruff auf .Text ein Replace nach sLineBreak (#13#10), aber bei den Dingen wie SelStart und SelLength wird die Verschiebung der Indize nicht eingerechnet, also mit jeder Zeile verrutscht das um ein Char. :kotz: |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Zitat:
Übrigens gibt es mehrere Ohm Zeichen mit unterschiedlichen Werten: So ergibt ALT+2126 auch eine Ohmzeichen und das kann nur mit der Zahlenblock eingegeben werden. |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Grad wieder etwas gelernt: das Problem ist, daß die Variante mit ALT + '+' + HexCode nur funktioniert, wenn in der Registry ein spezieller Wert gesetzt ist:
[HKEY_CURRENT_USER\Control Panel\Input Method] "EnableHexNumpad"="1" https://www.heise.de/forum/Make/News...30640563/show/ Und das hat auf meinem Rechner gefehlt. Eingetragen, Rechner neu gestartet, und dann geht die Hex-Eingabe. :? Das Problem mit dem Menü kann ich in der Software lösen. Den Rest kriegen die Kunden als FAQ :-) |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Naja, den Registry-Wert kannst du auch im Programm prüfen und setzen (ggf. zum Programmende wieder auf alten Wert zurück setzen).
Ob das nur so schön ist, ist eine andere Sache. |
AW: VCL: Eingabe Unicodezeichen in Editorcontrol
Das stimmt, aber das ist eine Lösung für Kundenrechner, bei der ich Bauchweh hab (auch wenn ich nicht glaub, daß es stören würde).
Die aktuelle Lösung schaut nun so aus, daß ich ALT+x wie in Word als ShortCut verwende, um den im Editor eingegebenen Hex-Wert in das entsprechende Unicode-Zeichen umzuwandeln. Sprich man tippt i.d.R. den Hexwert in den Editor ein und läßt Alt+X folgen. Vorteil davon, ich bin auch etwas freier, selbst zu entscheiden, was alles vom Editorinhalt als HexWert interpretiert werden soll, d.h. ich kann das auch auf aktuelle Selektionen anwenden. Mein Menü muß im Falle eines aktiven Texteditors ALT+x dann ignorieren und darf nicht versuchen, es auf seine ShortCuts anzuwenden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr. |
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