在外部程序上插入按钮 ( 积分: 100 )

  • 主题发起人 主题发起人 gebizhimu
  • 开始时间 开始时间
G

gebizhimu

Unregistered / Unconfirmed
GUEST, unregistred user!
已取得外部程序(B程序)的ToolBar控制条的句柄(Handle),如何在A程序中实现在B程序的ToolBar控制条上添加一个按钮
 
没试过,用CreateParented不行吗?
 
var<br>&nbsp;&nbsp;Form1:&nbsp;TForm1;<br>&nbsp;&nbsp;h:&nbsp;HWND;<br>&nbsp;&nbsp;proc:&nbsp;LongInt;<br><br>function&nbsp;WndProc2(hwnd:&nbsp;HWnd;&nbsp;Msg:&nbsp;UINT;&nbsp;wParam:&nbsp;wParam;&nbsp;lParam:&nbsp;LPARAM):&nbsp;Integer;&nbsp;stdcall;<br><br>implementation<br><br>{$R&nbsp;*.dfm}<br><br>function&nbsp;WndProc2(hwnd:&nbsp;HWnd;&nbsp;Msg:&nbsp;UINT;&nbsp;wParam:&nbsp;wParam;<br>&nbsp;&nbsp;lParam:&nbsp;LPARAM):&nbsp;Integer;<br>var<br>&nbsp;&nbsp;i:&nbsp;Integer;<br>begin<br>&nbsp;&nbsp;case&nbsp;Msg&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;WM_LBUTTONUP:&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBeep(MB_ICONASTERISK);<br>&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;CallWindowProc(TFNWndProc(proc),&nbsp;hwnd,&nbsp;Msg,&nbsp;wParam,&nbsp;lParam);<br>end;<br><br>procedure&nbsp;TForm1.InsertButton(const&nbsp;AParentHandle:&nbsp;THandle);<br>var<br>&nbsp;&nbsp;l:&nbsp;LongInt;<br>begin<br>&nbsp;&nbsp;h&nbsp;:=&nbsp;CreateWindow('BUTTON',&nbsp;'Hello',<br>&nbsp;&nbsp;WS_VISIBLE&nbsp;+&nbsp;WS_CHILD,&nbsp;0,&nbsp;0,&nbsp;200,&nbsp;20,&nbsp;AParentHandle,&nbsp;0,&nbsp;0,&nbsp;nil);<br>&nbsp;&nbsp;proc&nbsp;:=&nbsp;GetWindowLong(h,&nbsp;GWL_WNDPROC);<br>&nbsp;&nbsp;l&nbsp;:=&nbsp;LongInt(@WndProc2);<br>&nbsp;&nbsp;SetWindowLong(h,&nbsp;GWL_WNDPROC,&nbsp;l);<br>end;
 
wo&nbsp;ding
 
liyinwei&nbsp;的方法可行<br>&nbsp;&nbsp;但是插入的按键总是在目标程序ToolBar的最前瑞,并且覆盖了原来的按钮,能否在目标程序ToolBar的最后端插入,并且不能覆盖目标程序一年来的按钮
 
//&nbsp;&nbsp;AParentHandle:&nbsp;被插入按钮的窗口句柄<br>//&nbsp;&nbsp;AWidth:&nbsp;被插入的按钮的宽度<br>procedure&nbsp;TForm1.InsertButton(const&nbsp;AParentHandle:&nbsp;THandle;<br>&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;AWidth:&nbsp;Integer);<br>var<br>&nbsp;&nbsp;l:&nbsp;LongInt;<br>&nbsp;&nbsp;r:&nbsp;TRect;<br>&nbsp;&nbsp;x,iHeight:&nbsp;Integer;<br>begin<br>&nbsp;&nbsp;//获得坐标<br>&nbsp;&nbsp;GetWindowRect(AParentHandle,r);<br>&nbsp;&nbsp;//计算插入坐标<br>&nbsp;&nbsp;x&nbsp;:=&nbsp;r.Right&nbsp;-&nbsp;r.Left&nbsp;-&nbsp;AWidth;<br>&nbsp;&nbsp;iHeight&nbsp;:=&nbsp;r.Bottom&nbsp;-&nbsp;r.Top&nbsp;-&nbsp;2;<br>&nbsp;&nbsp;h&nbsp;:=&nbsp;CreateWindow('BUTTON',&nbsp;'Hello',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WS_VISIBLE&nbsp;+&nbsp;WS_CHILD,&nbsp;x,&nbsp;1,&nbsp;AWidth,&nbsp;iHeight,&nbsp;AParentHandle,&nbsp;0,&nbsp;0,&nbsp;nil);<br>&nbsp;&nbsp;proc&nbsp;:=&nbsp;GetWindowLong(h,&nbsp;GWL_WNDPROC);<br>&nbsp;&nbsp;l&nbsp;:=&nbsp;LongInt(@WndProc2);<br>&nbsp;&nbsp;SetWindowLong(h,&nbsp;GWL_WNDPROC,&nbsp;l);<br>end;
 
接受答案。谢谢liyinwei<br>新插入的按钮和原来的ToolBar在样式上有些不同,不知有没有方法修改样式新按钮的样式
 
后退
顶部