procedure TfrmMain.CheckBox27Click(Sender: TObject);
var
I: Integer;
begin
if CheckBox27.Checked then
begin
for I := 0 to Length(RunGate) - 1 do
begin
if RunGate[I].boGetStart and (RunGate[I].btStartStatus = 2) then
begin
Windows.SetParent(RunGate[I].MainFormHandle, 0);
end;
end;
end
else
begin
for I := 0 to Length(RunGate) - 1 do
begin
if RunGate[I].boGetStart and (RunGate[I].btStartStatus = 2) then
begin
Windows.SetParent(RunGate[I].MainFormHandle, ScrollBoxPanel.Handle);
Windows.GetWindowRect(RunGate[I].MainFormHandle, hRect);
Windows.MoveWindow(RunGate[I].MainFormHandle, 0, 0, hRect.Right - hRect.Left, hRect.Bottom - hRect.Top, True); //设置窗口位置
ShowWindow(RunGate[I].MainFormHandle, SW_HIDE);
ShowWindow(RunGate[I].MainFormHandle, SW_MINIMIZE); //最小化
ShowWindow(RunGate[I].MainFormHandle, SW_SHOW);
end;
end;
end;
end;
procedure TfrmMain.ProcessLogServerMsg(wIdent: Word; sData: string);
var
nHandle: THandle;
hRect: TRect;
begin
case wIdent of
SG_FORMHANDLE: begin
nHandle := Str_ToInt(sData, 0);
if nHandle <> 0 then begin
LogServer.MainFormHandle := nHandle;
// SetWindowPos(Self.Handle,Handle,Self.Left,Self.Top,Self.Width,Self.Height,$40);
end;
end;
SG_STARTNOW: begin
MainOutMessage(sData);
end;
SG_STARTOK: begin
LogServer.btStartStatus := 2;
MainOutMessage(sData);
// 可选:将子窗口嵌入到 ScrollBoxPanel(仅在界面勾选时执行)
if CheckBoxWindosInto.Checked then
begin
if Windows.SetParent(LogServer.MainFormHandle, ScrollBoxPanel.Handle) = 0 then
begin
Application.ProcessMessages;
Sleep(10);
end
else
begin
Windows.GetWindowRect(LogServer.MainFormHandle, hRect);
Windows.MoveWindow(
LogServer.MainFormHandle,
0,
0,
hRect.Right - hRect.Left,
hRect.Bottom - hRect.Top,
True);
ShowWindow(LogServer.MainFormHandle, SW_HIDE);
ShowWindow(LogServer.MainFormHandle, SW_MINIMIZE);
ShowWindow(LogServer.MainFormHandle, SW_SHOW);
end;
end;
// 保留最小化逻辑
if LogServer.boMinimize then
SendMessage(LogServer.MainFormHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
end;
end;
procedure TfrmMain.ProcessRunGateMsg(wIdent: Word; sData: string);
var
I: Integer;
nHandle: THandle;
hRect: TRect;
begin
case wIdent of
SG_FORMHANDLE:
begin
nHandle := Str_ToInt(sData, 0);
if g_boRunGate_GetMultiThread then
begin
if nHandle <> 0 then
begin
RunGate[0].MainFormHandle := nHandle;
end;
end
else
begin
for I := Low(RunGate) to High(RunGate) do
begin
if RunGate[I].boGetStart and (RunGate[I].MainFormHandle = 0) then
begin
RunGate[I].MainFormHandle := nHandle;
Break;
end;
end;
end;
end;
SG_STARTNOW:
begin
if g_boRunGate_GetMultiThread then
MainOutMessage(sData)
else
begin
nHandle := Str_ToInt(sData, 0);
for I := Low(RunGate) to High(RunGate) do
begin
if RunGate[I].MainFormHandle = nHandle then
begin
case I of
0: MainOutMessage('正在启动游戏网关一...');
1: MainOutMessage('正在启动游戏网关二...');
2: MainOutMessage('正在启动游戏网关三...');
3: MainOutMessage('正在启动游戏网关四...');
4: MainOutMessage('正在启动游戏网关五...');
5: MainOutMessage('正在启动游戏网关六...');
6: MainOutMessage('正在启动游戏网关七...');
7: MainOutMessage('正在启动游戏网关八...');
end;
Break;
end;
end;
end;
end;
SG_STARTOK:
begin
if g_boRunGate_GetMultiThread then
begin
RunGate[0].btStartStatus := 2;
MainOutMessage(sData);
if CheckBoxWindosInto.Checked then
begin
if Windows.SetParent(RunGate[0].MainFormHandle, ScrollBoxPanel.Handle) <> 0 then
begin
Windows.GetWindowRect(RunGate[0].MainFormHandle, hRect);
Windows.MoveWindow(RunGate[0].MainFormHandle, 0, 0,
hRect.Right - hRect.Left, hRect.Bottom - hRect.Top, True);
ShowWindow(RunGate[0].MainFormHandle, SW_MINIMIZE);
ShowWindow(RunGate[0].MainFormHandle, SW_SHOW);
end
else
begin
Application.ProcessMessages;
Sleep(10);
end;
end;
if g_boRunGate_GetMinimize then
SendMessage(RunGate[0].MainFormHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end
else
begin
nHandle := Str_ToInt(sData, 0);
for I := Low(RunGate) to High(RunGate) do
begin
if RunGate[I].MainFormHandle = nHandle then
begin
RunGate[I].btStartStatus := 2;
case I of
0: MainOutMessage('游戏网关一启动完成...');
1: MainOutMessage('游戏网关二启动完成...');
2: MainOutMessage('游戏网关三启动完成...');
3: MainOutMessage('游戏网关四启动完成...');
4: MainOutMessage('游戏网关五启动完成...');
5: MainOutMessage('游戏网关六启动完成...');
6: MainOutMessage('游戏网关七启动完成...');
7: MainOutMessage('游戏网关八启动完成...');
end;
// 内嵌窗口逻辑
if CheckBoxWindosInto.Checked then
begin
if Windows.SetParent(RunGate[I].MainFormHandle, ScrollBoxPanel.Handle) <> 0 then
begin
Windows.GetWindowRect(RunGate[I].MainFormHandle, hRect);
Windows.MoveWindow(RunGate[I].MainFormHandle, 0, 0,
hRect.Right - hRect.Left, hRect.Bottom - hRect.Top, True);
ShowWindow(RunGate[I].MainFormHandle, SW_MINIMIZE);
ShowWindow(RunGate[I].MainFormHandle, SW_SHOW);
end
else
begin
Application.ProcessMessages;
Sleep(10);
end;
end;
if g_boRunGate_GetMinimize then
SendMessage(RunGate[I].MainFormHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
Break;
end;
end;
end;
end;
end;
end;
声明:本文系互联网搜索而收集整理,不以盈利性为目的,文字、图文资料源于互联网且共享于互联网。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。