Windows API 中的字符串對應這 Delphi 的 PChar(PAnsiChar); 在 API 中使用 Delphi 的字符串還是比較靈活的.
先說賦值://賦值方法1: 給直接量
再說取值:
begin
SetWindowText(Handle, '新標題');
end;
//賦值方法2: 定義它要的類型
var
p: PChar;
begin
p := '新標題';
SetWindowText(Handle, p);
end;
//賦值方法3: 轉換成它要的類型
var
str: string;
begin
str := '新標題';
SetWindowText(Handle, PChar(str));
end;
//賦值方法4: 用字符數組
var
arr: array[0..255] of Char;
begin
arr := '新標題';
SetWindowText(Handle, arr);
end;//取值方法1: 用字符數組(經常被稱作"緩沖區")
定長字符串不是 #0 結束的, 和 API 不好兼容, 一般不用於 API 中. c
var
arr: array[0..254] of Char;
begin
GetWindowText(Handle, arr, 255);
ShowMessage(arr); {Form1}
end;
//取值方法2: 使用 GetMem 給 PChar 分配內存
var
p: PChar;
begin
GetMem(p, 255); {分配內存}
GetWindowText(Handle, p, 255);
ShowMessage(p); {Form1}
FreeMem(p); {釋放內存}
end;
//取值方法3: 用 GlobalAlloc 分配全局內存(比 GetMem 慢)
var
p: HGLOBAL;
begin
p := GlobalAlloc(0, 255); {參數一給 0 或 GMEM_FIXED 表示分配的是固定內存}
GetWindowText(Handle, PChar(p), 255);
ShowMessage(PChar(p)); {Form1}
GlobalFree(p); {釋放內存}
end;
//取值方法4: 直接使用 string; 需要先 SetLength, 然後再去除空白:
var
str: string;
begin
SetLength(str, 255); {先設定 str 的長度}
GetWindowText(Handle, PChar(str), 255);
{但此時 str 的長度是 255 啊!}
str := PChar(str); {這樣可以得到實際長度的字符串}
ShowMessage(str); {Form1}
end;