procedure Tfrm_Jsyl.Button23Click(Sender: TObject);
var
SHOWSTRINGCFG:NET_DVR_SHOWSTRING_V30;
osd: string ;
buf: array[0..43] of Char;
s :string;
i: Integer;
begin
SHOWSTRINGCFG.dwSize := sizeof(SHOWSTRINGCFG); // 獲取結構體空間大小
// showmessage(inttostr(lUserID));
osd:='video test';
SHOWSTRINGCFG.struStringInfo[0].wShowString:=1; //1為顯示
strpcopy(@buf,osd);
// showmessage(buf[0]);
SHOWSTRINGCFG.struStringInfo[0].sString:=buf; -----》這句提示錯誤了 Incompatible types
SHOWSTRINGCFG.struStringInfo[0].wStringSize:=120;
SHOWSTRINGCFG.struStringInfo[0].wShowStringTopLeftX:=110;
SHOWSTRINGCFG.struStringInfo[0].wShowStringTopLeftY:=200;
NET_DVR_SetDVRConfig(lUserID, NET_DVR_SET_SHOWSTRING_V30,strtoint(Edit_Ch_no.text), @SHOWSTRINGCFG,sizeof(SHOWSTRINGCFG)) ;
showmessage(inttostr(NET_DVR_GetLastError()));
end;
SHOWSTRINGCFG.struStringInfo[0].sString:=buf; -----》這句提示錯誤了 Incompatible types
以下是NET_DVR_SHOWSTRINGINFO的 結構體,請問如何解決???
{///單字符引數(子結構) }
type
NET_DVR_SHOWSTRINGINFO = record
wShowString: Word;
wStringSize: Word;
{= 該行字符的長度,不能大于44個字符 }
wShowStringTopLeftX: Word;
{= 字符顯示位置的x坐標 }
wShowStringTopLeftY: Word;
{= 字符名稱顯示位置的y坐標 }
sString: Array[0..44-1] of Char;
{= 要顯示的字符內容 }
end
uj5u.com熱心網友回復:
move(buf, SHOWSTRINGCFG.struStringInfo[0].sString, 44)uj5u.com熱心網友回復:
如果是Delphi 2010及以上版本,Char是UniCode Char, 因此上面的Char要改為AnsiCharuj5u.com熱心網友回復:
Delphi的一個糟糕之處就在于它的型別系統設計太嚴格,有時候顯得很弱智,實際上,如果你把array[0..43] of Char;單獨宣告為一個型別:type
String44 = array[0..43] of Char;
然后把buf、sString都定義為String44型別,是可以互相賦值的
uj5u.com熱心網友回復:
move(buf, SHOWSTRINGCFG.struStringInfo[0].sString,44);
SHOWSTRINGCFG.struStringInfo[0].sString:=buf;
這樣嗎? 還是報錯
uj5u.com熱心網友回復:
我把buf 已經定義成
buf: array[0..44-1] of Char;
那變數 SHOWSTRINGCFG.struStringInfo[0].sString ,的型別應該一樣的啊
但是還是不能賦值
uj5u.com熱心網友回復:
SHOWSTRINGCFG.struStringInfo[0].sString:=buf;s'd'd'g'd'f'g'd改為
move(buf, SHOWSTRINGCFG.struStringInfo[0].sString,44);
另外,報錯的原因,就是Delphi編譯器認為record里面的array[0..43] of Char和其它地方的array[0..43] of Char不是同一個型別,這是編譯器判斷型別不夠精確的問題,用戶沒辦法改變。
uj5u.com熱心網友回復:
把SHOWSTRINGCFG.struStringInfo[0].sString:=buf;改為
move(buf, SHOWSTRINGCFG.struStringInfo[0].sString,44);
另外,報錯的原因,就是Delphi編譯器認為record里面的array[0..43] of Char和其它地方的array[0..43] of Char不是同一個型別,這是編譯器判斷型別不夠精確的問題,用戶沒辦法改變。
uj5u.com熱心網友回復:
type
String44 = array[0..43] of Char;
NET_DVR_SHOWSTRINGINFO = record
wShowString: Word;
wStringSize: Word;
{= 該行字符的長度,不能大于44個字符 }
wShowStringTopLeftX: Word;
{= 字符顯示位置的x坐標 }
wShowStringTopLeftY: Word;
{= 字符名稱顯示位置的y坐標 }
sString: String44;
// ...
var
buf: String44;
uj5u.com熱心網友回復:
回圈一個字符一個字符設定就可以了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11154.html
標籤:VCL組件開發及應用
下一篇:delphi XE 練手
