• panel内嵌程序窗体


    function RunAppInPanel(const AppFileName: string; ParentHandle: HWND; var WinHandle: HWND): Boolean;
    var
      si: STARTUPINFO;
      pi: TProcessInformation;
    begin
      Result := False;
    
      // 启动进程
      FillChar(si, SizeOf(si), 0);
      si.cb := SizeOf(si);
      si.wShowWindow := SW_SHOW;
      if not CreateProcess(nil, PChar(AppFileName), nil, nil, true,
        CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then Exit;
    
      // 等待进程启动
      WaitForInputIdle(pi.hProcess, 10000);
    
      // 取得进程的 Handle
      WinHandle := GetProcessWindow(pi.dwProcessID);
      if WinHandle > 0 then begin
        // 设定父窗体
        Windows.SetParent(WinHandle, ParentHandle);
    
        // 设定窗体位置
        SetWindowPos(WinHandle, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);
    
        // 去掉标题栏
        SetWindowLong(WinHandle, GWL_STYLE, GetWindowLong(WinHandle, GWL_STYLE)
          and (not WS_CAPTION) and (not WS_BORDER) and (not WS_THICKFRAME));
    
        Result := True;
      end;
    
      // 释放 Handle
      CloseHandle(pi.hProcess);
      CloseHandle(pi.hThread);
    end;
    
    //var hWin: HWND = 0;
    //FormClose
    //  if hWin > 0 then PostMessage(hWin, WM_CLOSE, 0, 0);
    //FormResize
    //  if hWin <> 0 then MoveWindow(hWin, 0, 0, panel1.ClientWidth, panel1.ClientHeight, True);
    
    //if not RunAppInPanel(App, panel1.Handle, hWin) then ShowMessage('App not found');
  • 相关阅读:
    模拟
    广搜——最优方案
    动态规划——背包
    动态规划——树规
    动态规划——区间
    fill 的用法
    状态压缩dp
    超大背包问题
    lower_bound
    弹性碰撞 poj 3684
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3710446.html
Copyright © 2020-2023  润新知