Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: wie interpretiert Windows Steuerzeichen?

  Alt 9. Aug 2016, 12:12
Steuerzeichen steuern das Verhalten des Verarbeiters und wie oder was der behandelt, ist ihm überlassen.

Beispiel: TEdit/TMemo/EDIT/MEMO
Im Single-Line-Mode behandeln die #10 und #13 als "Zeichen" (meißt unsichtbar mit der Breite 0, da das "Zeichen" in vielen Fonts so definiert ist)
Im Multi-Line-Mode werden die als Steuerzeichen interpretiert, aber manchmal z.B. nur #13#10 und nicht #10 oder #13, siehe der Windows-Editor.

Entsprechend reagiert DrawText unterschiedlich, je nach Optionen (DT_SINGLELINE DT_TABSTOP DT_PREFIXONLY DT_NOPREFIX DT_HIDEPREFIX DT_RTLREADING)
Bei PREFIXONLY und DT_HIDEPREFIX ist sogar das & ein Steuerzeichen.

TextOut
TabbedTextOut
PolyTextOut
DrawText
DrawTextEx
ExtDrawText

So ist "Backspace" auch nur ein Zeichen.
Das Zeichen ist und bleibt ein Zeichen, aber ein EDIT reagiert bei Tastatureingaben entsprechend darauf und löscht dann, anstatt die Eingabe als Zeichen in seinen Text einzufügen.
Keycodes und Chars darf man da nicht verwechseln, auch wenn die ordinalen Werte hierfür sich "zufällig" teilweise gleichen.
#13#10#9 werden bei der Anzeige im Edit/Memo dann entsprechend als "Steuerzeichen" ausgewertet und bei Eingabe von VK_RETURN wird auch nicht nur #13 ins EDIT/MEMO kopiert, sondern bei SingleLine-Mode gibt es nur ein BEEP und im MultiLine-Mode wird dafür die Sequenz für den Zeilenumbruch eingefügt, abhängig von Komponente/Betriebssystem/Einstellungen.
Delphi-Quellcode:
Edit1.Text := 'abc' + char(VK_BACK) + 'xyz';
ShowMessage(IntToStr(Length(Edit1.Text))); // ist 7, also "abc*xyz" und nicht "abxyz"
PS: Per Zuweisung Text:= und via Strg+V bekommt man ins TEdit auch ein "Tablulator"-Zeichen rein.
Standardmäßig ist das TEdit ja so eingestellt, daß es die Tastatueingabe des Tabulators für den Control-Wechsel verwenden soll.
$2B or not $2B

Geändert von himitsu ( 9. Aug 2016 um 12:22 Uhr)
  Mit Zitat antworten Zitat