![]() |
wie interpretiert Windows Steuerzeichen?
Hallo zusammen,
Wir waren uns im Kollegenkreis nicht so ganz einig, und MS hält sich da vornehm zurück. Konkret geht es um x01, x09, x0A,x0D, x1C..x1F. MS sagt, daß Textout bzw. TabbedTextout alle Zeichen so ausgeben, wie der benutze Font es vorsieht. Angeblich interpretiert Textout das Zeichen x09(TAB) nicht, aber was macht er daraus? Ist das jedem Programm/Programmierer selbst überlassen, oder gibt es da Standards/Empfehlungen? Gruß K-H |
AW: wie interpretiert Windows Steuerzeichen?
Ich vermute mal, daß die meisten Schriftarten an Position 9 ein "Leerzeichen" malen.
In Windows haben die Control-Codes (#0 bis #31) eigentlich keine sichtbare Darstellung. Es kommt auch darauf an, was du willst. Willst du sie "darstellen", dann gibt es im Unicode sichtbare "Ersatzzeichen" für verschiedene Control-Codes. z.B. ![]() Genauso gibt es für Fehler bei Codierungs-Konvertierungen im Unicode ein Ersatzzeichen, aber viele Windows-APIs verwenden dort stattdessen das "?" , aber bei Nicht-Unicode-Codierungen ist es eh etwas praktischer, wenn da ein überall existierendes ASCII-Zeichen verwendet wird. ![]() |
AW: wie interpretiert Windows Steuerzeichen?
Nee da hast Du mich mißverstanden.
Es geht darum wie diese Characters interpretiert werden. z.B. x08 Backspace gebe ich einen String, der ein Backspace enthält aus, so erwarte ich eigentlich, daß das Zeichen vor dem Backspace gelöscht wird. Könnte es sein daß diese Interpretation im Font verankert sein muß? z.B. bei den sog. Deadkeys wurden zwei Zeichen kombiniert indem nach dem ersten Zeichen kein Vorwärtsschritt erfolgte. Genauso könnte x08 auch einen Rückwärtsschritt auslösen? Oder liegt die Interpretation der Steuerzeichen bei Windows oder dem Programmierer? Gruß K-H |
AW: wie interpretiert Windows Steuerzeichen?
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:
PS: Per Zuweisung Text:= und via Strg+V bekommt man ins TEdit auch ein "Tablulator"-Zeichen rein.
Edit1.Text := 'abc' + char(VK_BACK) + 'xyz';
ShowMessage(IntToStr(Length(Edit1.Text))); // ist 7, also "abc*xyz" und nicht "abxyz" Standardmäßig ist das TEdit ja so eingestellt, daß es die Tastatueingabe des Tabulators für den Control-Wechsel verwenden soll. |
AW: wie interpretiert Windows Steuerzeichen?
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 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