如何才能象联众游戏那样在主窗口调用其他程序时在主窗口的一个页里显示?(10分)

  • 主题发起人 主题发起人 54see
  • 开始时间 开始时间
5

54see

Unregistered / Unconfirmed
GUEST, unregistred user!
如何才能象联众游戏那样在主窗口调用其他程序(例如拱猪、拖拉机、象棋等)时在主窗口的一个页(像PageControl那样的功能)里显示?
是用ShellExecute?还是其他办法。
联众每个小游戏是单独的可执行EXE程序。
 
本人以一个调用一个计算器为例说明,调用外部计算器,并放到一个TPanel中去
本过程涉及大量API,不懂的话不要问我!虽然是我原创的!我只管要分
-----------------------------------------------------------------
procedure Tf.Button1Click(Sender: TObject);
var r:TRect;h:HWND;
begin
WinExec('calc.exe',SW_SHOW);//自己选择路径,这里是系统默认
h:=FindWindow(nil,'计算器');//我用的是中文版,计算器就是这个名字
GetWindowRect(h,r);
windows.SetParent(h,Panel1.Handle);
MoveWindow(h,0,0,r.Right-r.Left,r.Bottom-r.Top,true);
end;
 
楼上的回答已经很不错了,要的就是这样的答案

不懂就查HELP吧
 
要是使用ShellExecute呢?又该如何?
 
用shellexecute执行,再调用楼上的代码
 
procedure TForm1.Button3Click(Sender: TObject);
var
r:TRect;
h:HWND;
begin
ShellExecute(0,'open','1/Project1.exe','aaa111','''+ExtractFilePath(Application.Exename)+''',sw_normal);
// WinExec('calc.exe',SW_SHOW);//
h:=FindWindow(nil,'计数器');//这行我不明白,这个“计算器”是什么参数?
GetWindowRect(h,r);
windows.SetParent(h,Panel1.Handle); //在指定位置打开
MoveWindow(h,0,0,r.Right-r.Left,r.Bottom-r.Top,true);
end;
// h:=FindWindow(nil,'计数器');//这行我不明白,帮助里是windowname,是标题?文件名?窗口名?窗口名是什么?是form的name?这个“计算器”是什么参数?
//为什么不行呀,我打开计数器也可以,但这个就不行。
 
计算器好像没有标题
 
等待高手帮助。
 
每人来帮我吗?
 
The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.
HWND FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);
lpWindowName
Points to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.

这个参数就是在任务栏上的名字

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部