真的就没人会吗?请教高手:在一个Panel里怎么显示另外一个EXE文件?或OCX文件?在线等待!

whdly 2003-08-25 10:28:48
在一个form表单里有一个Panel控件,我想在这个Panel里显示另外一个EXE或OCX文件。注意:是显示!不是调用!有什么可行的方法吗?很急!!谢谢!!!
...全文
28 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
whdly 2003-08-28
  • 打赏
  • 举报
回复
OLE方式应该怎么解决呢??
ZyxIp 2003-08-28
  • 打赏
  • 举报
回复
将UIP.exe 做成DLL 一定是可以的。


如果程序是别人的只能用OLE方式吧,不过没试过。



whdly 2003-08-27
  • 打赏
  • 举报
回复
我的意思是说:我写了一个uip.exe或uip.ocx文件。保存在C:根目录下。我又重新写了一个新的er.exe文件。里面有一个form。这个form里有一个panel1。而我现在想在这个panel1里显示出以前的uip.exe文件。这个显示的意思就是:uip.exe文件的窗口在panel1里,是嵌入在panel1里,这样程序运行时只有一个er.exe文件。关掉er.exe时,那个uip.exe也关掉了。而且这个uip.exe的窗口就是这个panel1的大小。各位明白了吗?我真的很着急啊。谢谢大家给我出了这些点子!!!我的QQ:58645810 信箱是:whdld@163.com。谁能帮我做个简单的事例发给我?万分感谢呀!!!
ZyxIp 2003-08-27
  • 打赏
  • 举报
回复
各位给个例子好吗???

zyxwl@263.net
Paddle 2003-08-27
  • 打赏
  • 举报
回复
就如楼上所说
不过说反了

windows.SetParent(exeHwnd,self.handle) ;
exeHwnd为其它应用程序的主窗体
这里主要是用了windows api 中的setparent函数
与form的setparent不同
Hewin 2003-08-27
  • 打赏
  • 举报
回复
如果你說的另一個Exe是你寫的那就好辦! 如果你寫過一個完整的屏保那你應該知道怎么辦了.
假設你說所的另一個exe叫 c.exe, 那在你主窗體Create時接收起動參數,這個參數是決定c.exe的主窗體在哪里顯示,如:
procedure TForm1.FormCreate(Sender: TObject);
var
parentHandle : HWND ;
begin
caption := inttostr(paramcount);
if ParamCount >=1 then
begin
parentHandle := strtointdef(ParamStr(1),0) ;
if parentHandle <> 0 then
begin
windows.SetParent(self.Handle,parentHandle) ;
Align := alClient ;
end;
end;
end;
在你要調用c.exe的程序里要使c.exe顯示在Panel1上,就這樣寫
ShellExecute(self.Handle,nil,'F:\tmp\c\c.exe',pchar(inttostr(Panel1.Handle)),nil,SW_SHOW) ;
在D7 & Win2000測試通過!
智商无下限 2003-08-27
  • 打赏
  • 举报
回复
显示而不是调用?不明白,具体一点好吗?
huangskar 2003-08-27
  • 打赏
  • 举报
回复
不太明白你的问题
tongki 2003-08-27
  • 打赏
  • 举报
回复
奇才!
WuLoveXue 2003-08-27
  • 打赏
  • 举报
回复
这样也行?
pingshx 2003-08-27
  • 打赏
  • 举报
回复
Panel里显示OCX文件?????????把ocx安装到D上,拖到panel不就ok???
lance 2003-08-27
  • 打赏
  • 举报
回复
如果进程b是别人写的怎么办?
mrbuddha 2003-08-25
  • 打赏
  • 举报
回复
1.你说的是像资源管理器那样浏览吗?

2.你说的是在进程A的Panel中显示进程B的窗体吗?

若是1,我就懒得讲了.

若是2的话,实现方发如下: (当然还有别的方法,抛砖引玉而已)

(1): 在进程A中创建共享内存,内存结构有一参数:_Handle: THandle; (记录Panel句柄)

(2): 在运行进程B时,进程B的主窗体重载一下CreateParams函数.

如下:
protected
procedure CreateParams(var Params: TCreateParams); override;

//---实现: p是共享内存结构,p^._Handle是A进程的Panel句柄---//
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited Createparams(params);
if Assigned(p) then
begin
params.Style:=WS_CHILD or WS_CLIPSIBLINGS;
Params.WndParent := p^._Handle;
end;
end;
DWGZ 2003-08-25
  • 打赏
  • 举报
回复
OleContainer(System)
Cipherliu 2003-08-25
  • 打赏
  • 举报
回复
怪怪的,帮你顶一下吧

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧