Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Фичя,Помогите!


Автор: PavelPro 13.6.2005, 11:34
Я пишу свои невизуальный компонент(TComponent) там есть такие строки
Код

function TnewControl.GetSkin:String;
var
cds:TCOPYDATASTRUCT;
buf:array[0..MAX_PATCH-1] of char;
adr:pointer;
H:HWND;
begin
H:=FindWindow('Component',nil);
adr:=@buf;
cds.dwData:=$10107;
cds.lpData:=@adr;
cds.cbData:=4;
SendMessage(h,WM_COPYDATA,appHWND,lParam(@cds));

объясните как из buf вычленить стринговский Result;
и что это за фишка appHWND а то на этой фигне выскакивает ошибка! smile smile smile smile

Автор: Rrader 13.6.2005, 11:45
Цитата

объясните как из buf вычленить стринговский Result;

StrValue := StrPas(Buf); smile

Цитата

и что это за фишка appHWND а то на этой фигне выскакивает ошибка!

А чёрт её знает! smile
Добавлено @ 11:47
appHWND, как видно, должен быть величиной типа WParam (Integer)!

Автор: Rennigth 14.6.2005, 09:10
PavelPro
lParam: кто такой?
@buf : где описывается?
appHWND: судя названию чей-нить Application.Handle

Автор: PavelPro 14.6.2005, 09:41
Приведу полный листинг функции
Код

cds:TCOPYDATASTRUCT;
buf:array[0..MAX_PATH-1] of char;
adr:pointer;
begin
adr:=@buf;
cds.dwData:=BSP_GetSkin;
cds.lpData:=@adr;
cds.cbData:=4;
SendMessage(bsp_hand,WM_COPYDATA,appHWND,lParam(@cds));
\\appHWND is calling application window handle
 // Get current skin, skin name will be copied to buf

из листинга выходит что appHWND вызывает application.handle, но как эта фигня работает?????
Я пробывал вместо appHWND ставить bsp_hand:HWND ,работает,но result получает такую белеберду!Люди разфигачте мне этот AppHWND,PLEASE!!!!!!!!!!!!!!!!!!!!!! smile smile smile

Rennigth
lParam параметр(так называемые 32 бита доп. информации)
используется при процедуре sendmessage(h:hwnd,message:cardinal,WParam:integer,Lparam:integer);

@buf-его не надо негде описывать ,значок @ указывает адрес переменной ,тут он указывает адрес массива buf !!!

Автор: Rrader 14.6.2005, 10:07
Поставь вместо appHWND:
Код

SendMessage(bsp_hand,WM_COPYDATA, Application.Handle, lParam(@cds));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)