Cómo integrar completamente la calculadora en la interfaz DELPHI
El siguiente código está escrito en línea como referencia: unit?frmTestEmbedApp;
Interfaz
Usa Windows,?Messages,?SysUtils,?Variables, clases, gráficos , control, formulario, cuadro de diálogo, ExtCtrls;
Escriba TForm1 = clase (TForm)
pnlApp:?TPanel;
Proceso?FormCreate(Remitente:? TObject);
procedimiento?FormClose(Sender:?TObject;?var?Action:?TCloseAction);
procedimiento?FormResize(Sender:?TObject privado
);{?Declaraciones?} public{¿Públicas?declaraciones?} end;
var Form1:?TForm1; hWin:?HWND?=?0;
implementación
{$R?*.dfm}
tipo //Información del formulario de almacenamientoPProcessWindow?=?^TProcessWindow; TProcessWindow?=?record
ProcessID:?Cardinal <; /p>
FoundWindow:?hWnd; end;
/?Función de enumeración de formulario
función?EnumWindowsProc(Wnd:?HWND;?ProcWndInfo:?PProcessWindow) :?BOOL ;?stdcall;
var WndProcessID:?Cardinal;?
comenzar GetWindowThreadProcessId(Wnd,?@WndProcessID); if?WndProcessID:=?ProcWndInfo^.ProcessID?entonces comenzar p>
ProcWndInfo^.FoundWindow:=?Wnd;
Resultado:=?False;?//Encontrado, así que detenga ?EnumWindows end else
Resultado:=? True;//continuar buscando
end;
//¿Encontrar formulario?Manejar por ?ProcessID?
función?GetProcessWindow(ProcessID:?Cardinal):HWND ;
var ProcWndInfo:?TProcessWindow;
comenzar ProcWndInfo.ProcessID:=?ProcessID;ProcWndInfo.FoundWindow?:=?0;EnumWindows(@EnumWindowsProc,?Integer( @ProcWndInfo) );?//?FindWindow Result?:=?ProcWndInfo.FoundWindow;
end;
/?Ejecutar el programa en línea en el panel
función? RunAppInPanel(const?AppFileName:?string;?ParentHandle:?HWND;?var?WinHandle: HWND):?Boolean;
var si:?STARTUPINFO pi:?TPro;
cessInformation;
¿iniciar resultado?Iniciar el proceso FillChar(si,?SizeOf(si),?0); si.cb?:=?SizeOf(si); si.wShowWindow?:=?SW_SHOW; if ?
CREATE_NEW_CONSOLE o NORMAL_PRIORITY_CLASS, nil, nil, si, pi) entonces? Espere a que se inicie el proceso WaitForInputIdle(pi.hProcess,?10000 //Obtenga el identificador del proceso WinHandle); =?GetProcessWindow(pi. dwProcessID); if?WinHandle?>?0?then?begin
/?Establecer el formulario principal
Windows.SetParent(WinHandle,?ParentHandle);
/?Establecer posición de la ventana
SetWindowPos(WinHandle,?0,?0,?0,?0,?0,?0,?SWP_NOSIZE?or?SWP_NOZORDER);
/?Eliminar barra de título
SetWindowLong(WinHandle,?GWL_STYLE,?GetWindowLong(WinHandle,?GWL_STYLE) y?(no?WS_CAPTION)?y?(no?WS_BORDER)?y ?(not?WS_THICKFRAME) );
Resultado?:=?True; end;//?Libera el identificador CloseHandle(pi.hProcess);
end;
procedure?TForm1.FormClose(Sender:?TObject;?var?Action:?TCloseAction);
begin ///?Enviar un mensaje de cierre al programa integrado cuando saliendo de if?hWin?>? 0?then?PostMessage(hWin,?WM_CLOSE,?0,?0);
end;
procedimiento?TForm1.FormCreate(Sender:? TObject);
const App?=?' calc.exe';
begin pnlApp.Align?:=?alClient //Iniciar el programa integrado si?not?RunAppInPanel; (Aplicación,?pnlApp.Handle,?hWin)?luego
ShowMessage('App?not?found');
end;
procedimiento?TForm1 .FormResize(Sender:?TObject );
begin ///?Mantenga el programa integrado lleno de pnlApp if?hWin?<>?0?then
MoveWindow(hWin,?0 ,?0,?pnlApp.ClientWidth ,?pnlApp.ClientHeight,?True);
end;.
end.