我是在一个主窗体的click事件中写,调用这个时,怎样才能让他只在主窗体的前边显示,而不是一点就跑到后面去了,而且一次只能打开一个,赶紧帮我想想办法啊,谢谢啦!

解决方案 »

  1.   

    调用的代码可以看下面的,至于你说道的只能打开一次,你可以在打开前查找是否有calc.exe这个进程。。至于说的只显示在最前面,如果我没理解错,应该是showmodal这个意思吧。这个东西,等高淫。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,shellapi, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShellExecute(Handle,'open','calc.exe','','',SW_SHOW);end;end.
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    VAR
      h: HWND;
      r: TRect;
    begin
      WinExec( 'calc.exe', SW_SHOW );
      h := FindWindow( Nil, '计算器' );
      GetWindowRect( h, r );
      SetWindowPos( h,
                    HWND_TOPMOST,
                    0,
                    0,
                    260,
                    250, SWP_NOMOVE );  WindowS.SetParent( h, Handle );  //这句很关键,移动Form看看.
    end;
      

  3.   

    GetWindowRect( h, r );
    得到的RECT不准确. 直接设计就行了.
      

  4.   

    wudi_1982(︻┳═一) 前边写那么多没用的,你说的那ShellExecute是不是错了啊,报错,看看是不是写错了,quickly,也确实是showmodal的意思,怎么做啊
      

  5.   

    jjwwang((空园歌独酌,春日赋闲居)):你写的那个确实是不能再往后跑了,真是万分感谢啊,不过在他开着的时候只让他显示一次该怎么设置呢
      

  6.   

    var
      h: THandle;
      r: TRect;
    begin
      h := FindWindowEx(Handle, 0, nil, '计算器');
      if h = 0 then
      begin
        WinExec('calc.exe', SW_SHOW);
        h := FindWindow(nil, '计算器');
        GetWindowRect(h, r);
        SetWindowPos( h,
                      HWND_TOPMOST,
                      0,
                      0,
                      260,
                      250, SWP_NOMOVE );
        Windows.SetParent( h, Handle );
      end;
    end;