Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VCL: Eingabe Unicodezeichen in Editorcontrol (https://www.delphipraxis.net/206860-vcl-eingabe-unicodezeichen-editorcontrol.html)

ULIK 4. Feb 2021 12:37

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

Uwe Raabe 4. Feb 2021 12:57

AW: VCL: Eingabe Unicodezeichen in Editorcontrol
 
In einem TRichEdit kannst du den vierstelligen Hex-Code eingeben und ALT-X drücken.

himitsu 4. Feb 2021 13:09

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

ULIK 4. Feb 2021 13:12

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

himitsu 4. Feb 2021 13:41

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:
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;
Hexadezimal ließe sich auch umsetzen.
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)

Rolf Frei 4. Feb 2021 13:57

AW: VCL: Eingabe Unicodezeichen in Editorcontrol
 
Zitat:

Zitat von ULIK (Beitrag 1482214)
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

Das geht wie folgt:
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:

Unicode characters can be entered by holding down Alt, and typing + on the numeric keypad, followed by the hexadecimal code – using the numeric keypad for digits from 0 to 9 and letter keys for A to F – and then releasing Alt .

Uwe Raabe 4. Feb 2021 14:00

AW: VCL: Eingabe Unicodezeichen in Editorcontrol
 
Zitat:

Zitat von ULIK (Beitrag 1482225)
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

Bei einem TMemo könnte man das ungefähr so machen:
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;

TiGü 4. Feb 2021 14:24

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

ULIK 4. Feb 2021 14:46

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.

ULIK 4. Feb 2021 15:00

AW: VCL: Eingabe Unicodezeichen in Editorcontrol
 
Zitat:

Zitat von TiGü (Beitrag 1482239)
Ω
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

Vielen Dank dafür, kannte ich auch noch nicht. Das sollte dem Kunden als Workaround erst einmal helfen. :thumb:

Rolf Frei 4. Feb 2021 15:03

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.

ULIK 5. Feb 2021 07:21

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.

ULIK 5. Feb 2021 08:58

AW: VCL: Eingabe Unicodezeichen in Editorcontrol
 
Ich liebe die Konsistenz von Eingaben:

 TEditTMemoTRichEdit
ALT+177±
ALT+0177±±±
ALT+3a9'
ALT+03a9'
ALT+937®®Ω
ALT+0937©©Ω

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?

himitsu 5. Feb 2021 09:35

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

ULIK 5. Feb 2021 10:29

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?

himitsu 5. Feb 2021 10:34

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:

Rolf Frei 5. Feb 2021 11:39

AW: VCL: Eingabe Unicodezeichen in Editorcontrol
 
Zitat:

Zitat von ULIK (Beitrag 1482315)
Ich liebe die Konsistenz von Eingaben:

 TEditTMemoTRichEdit
ALT+177±
ALT+0177±±±
ALT+3a9'
ALT+03a9'
ALT+937®®Ω
ALT+0937©©Ω

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?

Ja da hast du leider recht mit dem Menü. Die ALT+"+" Funktion verlangt aber nach meinem Wissen, ein Hexformat, daher geht auch ALT+937 nicht, weil das eben HEX 937 ist. Was aber geht ist ALT+03a9, sofern kein Shortcut reinfummelt. Das ergibt bei mir ein Ohm Zeichen. Du gibst da aber schon nicht nur ALT und die Zahl eine sondern zuerst noch das + auf dem Zahlenblock? Also "ALT (gedrückt halten)" "+" "3" "a" "9". Sowohl ALT+3a9 als auch ALT+03a9 ergeben bei mir in einem TMemo ein Ohm-Zeichen.hingegen geht ALT+937 nicht weil da 937 als HEX angeschaut wird.

Ü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.

ULIK 5. Feb 2021 12:18

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 :-)

Moombas 8. Feb 2021 11:32

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.

ULIK 8. Feb 2021 14:05

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