![](/img/trans.png)
[英]Is calling ShowModal with setting PopupParent a good idea and is it necessary in newer Delphi versions?
[英]Why can the circumflex sign be used for control chars in Delphi and is it a good idea?
我剛剛用一種奇怪的語法遇到了關於SO的答案:
MyString := 'Hello,' + ^M + ^J + 'world!';
我已經使用Delphi幾年了,但我不知道你可以使用抑揚符號來控制字符。
這只是早期德爾福或Turbo Pascal時代遺留下來的嗎?
它現在應該用嗎?
PS:我不是在詢問關於換行符的建議,有sLineBreak和原始問題中討論的其他方法。
不,它不是來自Turbo Pascal的日子。 它是從TP之前的幾十年,在MS-DOS之前,甚至可能在UNIX之前。 像早期的300比特每秒撥號調制解調器和DEC VT-52終端,PDP-8機器上的RT-8操作系統和早期版本的C的舊版本。或者甚至更老 - 雖然對我來說比較老的僅僅是傳說:-) 。
“^”符號是“Ctrl”鍵的快捷方式。 所以傳統表示法中的^C
代表Microsoft表示法中的Ctrl+C
這種符號在MS-DOS時代被廣泛用於文本模式菜單,如前面提到的Turbo Pascal,Norton Utilities,DOS Navigator等。
在我的記憶中,您可以將“^”視為“減去64”。
因此Chr(65)
是'A'
那么Chr(1)
將是^A
並且^@
將是#0
:-) AFAIR在MS-DOS時按Ctrl + Shift +“2 / @”實際上會產生#0
進入BIOS鍵盤緩沖區:-)
^ [將AFAIR稱為#27
又名Esc(猿)char - 如果你運行telnet.exe
你會看到它被提示為轉義字符。
所以Turbo Pascal很久以前選擇遵循時間祝福的慣例,然后從那時起就開始實施向后兼容規則。 就個人而言,當你想要它在一條線上時,我會把'bla-bla'^M^J'foo-baz'
文字比'bla-bla'#13#10'foo-baz'
更像字符串。 當你的文字需要多個源代碼行時,使用plus構造值更適合。
遺憾的是,Delphi IDE中的語法高亮顯示在這種常量上無可救葯地被打破。
是的,這是昔日的遺產。
不,你不應該養成使用這個功能的習慣。 請記住,代碼的讀取頻率高於編寫代碼。 總是想到你的讀者很可能不會知道這種語法的含義。
是的,這是從TP天遺留下來的。 你也可以這樣寫你的陳述
mystring:= 'Hello'#13#10'world!';
這可能比使用^ M和^ J更不明顯,更容易理解。 當然,你應該真正定義常量
const
crlf = #13#10
begin
mystring:= 'Hello' + crlf + 'world!';
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.