![]() |
Delphi Escape Sequenzen
Hallo zusammen,
wie schreibe ich Escape Sequenzen in einen String? In meinem konkreten Fall muss ich einen String erstellen der die Escape Sequenze "ESC-L" enthält. Ich brauche das um über Netzwerk mit einem KBS Pick-by-light System zu kommunizieren. |
AW: Delphi Escape Sequenzen
ESC ist 0x33.
Siehe z.B. ![]()
Delphi-Quellcode:
meinString := #33 + 'L' + einAndererString;
|
AW: Delphi Escape Sequenzen
Schon mal mit #27+'L' probiert? (ESC sollte 27 in ASCII sein).
Oder vielleicht so tun, als sei es ein Drucker und dann mit der Windows Escape oder ExtEscape arbeiten? ![]() |
AW: Delphi Escape Sequenzen
![]() Zwischen zwei StringKonstanten kann man das + weglassen. (bei zwei kollidierenden ' müssen sie dann entfallen)
Delphi-Quellcode:
#27'L'
#27 + 'L' // Dezimal #$1B + 'L' // Hexadezimal Char(VK_ESCAPE) + 'L' // Konstante Und natürlich als String den AnsiString verwenden und nicht den "String". Ab Delphi 2009 ist der String ein UnicodeString und es gibt Spaß mit Konvertierungen der Chars. (CodePage) Natülich kann man auch besser gleich den ![]() |
AW: Delphi Escape Sequenzen
Zitat:
Gruß K-H |
AW: Delphi Escape Sequenzen
Zitat:
|
AW: Delphi Escape Sequenzen
Binär kann es auch nicht :cry:
|
AW: Delphi Escape Sequenzen
Ich nutze für das Project XE7. Ich habe #27 + 'L' schon probiert aber nur mit "string", hätte gedacht, dass writeln das richtig konvertiert. Ich probiere es später mit Ansistring.
*edit* Wenn ich IOHandler.WriteLn(MeinString, IndyTextEncodingASCII) nutze, wird es dann richtg konvertiert, wenn ich "String" nutze? *edit2* OK so wie es in meinem *edit* steht geht es jetzt. Hatte gar nicht gedacht, dass das Encoding nicht richtig ist. |
AW: Delphi Escape Sequenzen
Indy macht leider viel Unsinn mit Zeichen oberhalb von 127. Daher ist IndyTextEncodingASCII zu vermeiden. Grundsätzlich bietet es sich an, die Sachen mit AnsiString oder RawByteString zu machen, aber da WriteLn ja für Text ist, ist der genaue Typ hier egal. Delphi wandelt das um.
Man könnte auch einen DeinString: RawByteString nehmen, um Absatzzeichen ergänzen und diesen dann mit
Delphi-Quellcode:
oder
IOHandler.Write(TBytes(DeinString))
Delphi-Quellcode:
senden.
IOHandler.WriteBuffer(DeinString[1], Length(DeinString))
|
AW: Delphi Escape Sequenzen
Zitat:
String: Der Compiler konvertiert eventuell die CodePage (QuellCode > Unicode in Binary) und dann zur Laufzeit nochmal, abhängig von den Einstellungen des aktuellen Systems (Unicode > ANSI des Windows/Users). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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 by Thomas Breitkreuz