var
S: String;
begin
SetLength(S,256);
DragQueryFile(Msg.WParam,0,PChar(S),256);
Showmessage(S);
Memo.Text := S;
Showmessage(Memo.Text);
......
end;为什么两个Showmessage显示不一样呢?
又没有Trim,请问Memo.Text := S;做了什么?
S: String;
begin
SetLength(S,256);
DragQueryFile(Msg.WParam,0,PChar(S),256);
Showmessage(S);
Memo.Text := S;
Showmessage(Memo.Text);
......
end;为什么两个Showmessage显示不一样呢?
又没有Trim,请问Memo.Text := S;做了什么?
但前者又没有空格,是什么字符填充的呢?
看看属性设置哦
TMemo是系统控件,它只接收c语言定义的字符串形式,也就是说遇到#0就认为该字符串结束了
S: String;
begin
SetLength(S,256);
DragQueryFile(Msg.WParam,0,PChar(S),256);
SetLength(S, lstrLen(PChar(S)));
Showmessage(S);
Memo.Text := S;
Showmessage(Memo.Text);
......
end;这样就会一样了!!
S: String;
begin
SetLength(S,256);
DragQueryFile(Msg.WParam,0,PChar(S),256);
S := PChar(S);
Showmessage(S);
Memo.Text := S;
Showmessage(Memo.Text);
......
end; 这样也会一样了!!
不会一样的了!!Delphi的String是不管#0的,而Pchar是遇#0结束的!ShowMessage是纯Delphi的,Show的是string,而Memo.Text := string,其机制是API的SetWindowText(Handle, PChar(string))!简单地说,Delphi的string相当于Byte数组!如果不用Delphi的showmessage,而用API的MessageBox,那肯定一样了!