Вверх ↑
Разработчик
Ответов: 26170
Рейтинг: 2127
#1: 2008-05-14 00:50:02 ЛС | профиль | цитата
Вот смотри, что получилось



Add(MainForm,3118620,196,252)
{
Left=20
Top=105
Width=341
Height=144
}
Add(InlineCode,990011,343,245)
{
EventPoints=#8:Messages|6:WParam|6:LParam|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|17: FWnd:THandle;|9: public|24: Messages:THI_Event;|22: WParam:THI_Event;|27: LParam:THI_Event; |24: constructor Create;|34: destructor Destroy; override;|5: end;|0:|14:implementation|0:|83:function MyWndProc(wnd:THandle; wMsg:cardinal; wParam,lParam:DWORD):DWORD; stdcall;|26:var MySelf: THiAsmClass;|5:begin|57: MySelf := THiAsmClass(GetWindowLong(wnd,GWL_USERDATA));|46: _hi_onEvent(MySelf.WParam, integer(wParam));|48: _hi_onEvent(MySelf.LParam, integer(lParam)); |46: _hi_onEvent(MySelf.Messages, integer(wMsg));|50: Result := DefWindowProc(wnd,wMsg,wParam,lParam);|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|13: inherited;|114: FWnd := CreateWindow('ReceiveMessages','',{WS_OVERLAPPEDWINDOW or }WS_POPUP, 0, 0, 0, 0, 0, 0, hInstance, nil);|51: SetWindowLong(FWnd,GWL_USERDATA,cardinal(Self));|7:end; |0:|31:destructor THiAsmClass.Destroy;|5:begin|31: Windows.DestroyWindow(FWnd);|13: FWnd := 0;|13: inherited;|4:end;|0:|29:var MyWindowClass: TWndClass;|0:|14:initialization|0:|27: MyWindowClass.style := 0;|42: MyWindowClass.lpfnWndProc := @MyWndProc;|32: MyWindowClass.cbClsExtra := 0;|32: MyWindowClass.cbWndExtra := 0;|39: MyWindowClass.hInstance := hInstance;|27: MyWindowClass.hIcon := 0;|29: MyWindowClass.hCursor := 0;|35: MyWindowClass.hbrBackground := 0;|36: MyWindowClass.lpszMenuName := nil;|51: MyWindowClass.lpszClassName := 'ReceiveMessages';|31: RegisterClass(MyWindowClass);|0:|4:end.|
link(Messages,1535947:doCase,[])
link(WParam,11902145:doValue,[(415,258)(415,300)])
link(LParam,13613115:doValue,[(440,265)(440,391)])
}
Add(Button,1802014,196,301)
{
Left=20
Top=20
link(onClick,9300100:doFind,[])
}
Add(FindWindow,9300100,259,301)
{
ClassName="ReceiveMessages"
SkipParam=1
link(onFind,705416:doSendMessage,[(303,307)(303,335)(247,335)(247,363)])
}
Add(SendMessage,705416,259,357)
{
Message=1
WParam=123
LParam=456
link(Handle,9300100:Handle,[])
}
Add(Case,1535947,399,245)
{
Value=Integer(1024)
DataOnTrue=String(WM_USER)
link(onTrue,16042993:doEvent1,[])
}
Add(Edit,10247673,532,252)
{
Left=105
Top=20
Width=185
Text=""
}
Add(Edit,9970630,532,343)
{
Left=105
Top=45
Width=85
Text=""
link(Str,11902145:Value,[])
}
Add(Edit,3141866,532,434)
{
Left=105
Top=70
Width=85
Text=""
link(Str,13613115:Value,[])
}
Add(Memory,11902145,532,294)
{
}
Add(Memory,13613115,532,385)
{
}
Add(Hub,16042993,455,252)
{
OutCount=3
link(onEvent1,10247673:doText,[])
link(onEvent2,9970630:doText,[(509,265)(509,349)])
link(onEvent3,3141866:doText,[(509,272)(509,440)])
}


------------ Дoбавленo:


И еще -- как передавать указатель на строку (в LParam) при выполнении запроса WM_SETTEXT в компоненте SendMessage не применяя дополнительно IC-код, ведь компонент считывает данные типа Integer в LParam. Или этот компонент дорабатывать надо

Вот, что-то типа того проще нельзя сделать



Add(MainForm,3118620,301,245)
{
Left=20
Top=105
Width=341
Height=144
}
Add(Button,1802014,301,301)
{
Left=20
Top=20
link(onClick,9300100:doFind,[])
}
Add(FindWindow,9300100,364,301)
{
ClassName="ReceiveMessage"
SkipParam=1
link(onFind,705416:doSendMessage,[])
}
Add(SendMessage,705416,420,301)
{
Message=10
WParam=-1
link(LParam,7468057:LParam,[])
}
Add(InlineCode,7468057,434,245)
{
VarPoints=#6:LParam|
DataPoints=#4:Text|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|19: Text:Thi_Event;|50: procedure LParam(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.LParam;|5:begin|57: dtInteger(_Data, Integer(PChar(ToStringEvent(Text))));|8:end; |0:|4:end.|
link(Text,10259976:Value,[])
}
Add(Memory,10259976,434,196)
{
Default=String(123456789)
}


------------ Дoбавленo:


Ну вот к нему и приемник для проверки.



Add(MainForm,3118620,182,231)
{
Left=20
Top=105
Width=341
Height=144
Point(Handle)
}
Add(InlineCode,990011,182,294)
{
EventPoints=#7:Message|6:WParam|6:LParam|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|17: FWnd:THandle;|9: public|23: Message:THI_Event;|22: WParam:THI_Event;|27: LParam:THI_Event; |24: constructor Create;|34: destructor Destroy; override;|5: end;|0:|14:implementation|0:|83:function MyWndProc(wnd:THandle; wMsg:cardinal; wParam,lParam:DWORD):DWORD; stdcall;|26:var MySelf: THiAsmClass;|5:begin|57: MySelf := THiAsmClass(GetWindowLong(wnd,GWL_USERDATA));|46: _hi_onEvent(MySelf.WParam, integer(wParam));|48: _hi_onEvent(MySelf.LParam, integer(lParam)); |45: _hi_onEvent(MySelf.Message, integer(wMsg));|50: Result := DefWindowProc(wnd,wMsg,wParam,lParam);|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|13: inherited;|113: FWnd := CreateWindow('ReceiveMessage','',{WS_OVERLAPPEDWINDOW or }WS_POPUP, 0, 0, 0, 0, 0, 0, hInstance, nil);|51: SetWindowLong(FWnd,GWL_USERDATA,cardinal(Self));|7:end; |0:|31:destructor THiAsmClass.Destroy;|5:begin|31: Windows.DestroyWindow(FWnd);|13: FWnd := 0;|13: inherited;|4:end;|0:|29:var MyWindowClass: TWndClass;|0:|14:initialization|0:|27: MyWindowClass.style := 0;|42: MyWindowClass.lpfnWndProc := @MyWndProc;|32: MyWindowClass.cbClsExtra := 0;|32: MyWindowClass.cbWndExtra := 0;|39: MyWindowClass.hInstance := hInstance;|27: MyWindowClass.hIcon := 0;|29: MyWindowClass.hCursor := 0;|35: MyWindowClass.hbrBackground := 0;|36: MyWindowClass.lpszMenuName := nil;|50: MyWindowClass.lpszClassName := 'ReceiveMessage';|31: RegisterClass(MyWindowClass);|0:|4:end.|
link(Message,15312136:doValue,[])
link(WParam,14681702:doValue,[])
link(LParam,12200622:doValue,[])
}
Add(SendMessage,9819632,308,420)
{
Message=10
Point(Message)
link(Handle,13275602:Handle,[])
link(WParam,14681702:Value,[(321,388)(244,388)])
link(LParam,12200622:Value,[(328,380)(293,380)])
link(Message,15312136:Value,[])
}
Add(Memory,15312136,329,294)
{
link(onData,9819632:doSendMessage,[(373,300)(373,363)(296,363)(296,426)])
}
Add(Memory,14681702,238,301)
{
}
Add(Memory,12200622,287,308)
{
}
Add(Label,13275602,301,238)
{
Left=65
Top=20
Width=205
Height=25
Font=[MS Sans Serif,12,1,0,1]
Caption=""
AutoSize=1
Alignment=2
Point(Handle)
}


Таким способом можно управлять любыми своими приложениями, и даже текст передавать. Это, конечно, не совсем то, о чем мы давно рассуждлали (что нет у нас рессивера сообщений), хотя, он выполняет прием сообщений вполне успешно, но что-то все равно получилось интересное, и гораздо проще, чем DDE.


карма: 22

0