Red de conocimiento informático - Material del sitio web - Cómo integrar completamente la calculadora en la interfaz DELPHI

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

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.