不知道大家有没有注意过,最大化状态的MDI子窗体切换(BringToFrot/Show)时能看到窗体边框的影子,视觉相当不舒服。
而“下一个 Ctrl+F6”切换时完全没有影子出现,非常安静。各位有没有方法解决?
而“下一个 Ctrl+F6”切换时完全没有影子出现,非常安静。各位有没有方法解决?
解决方案 »
- delphi 6 升级到 Delphi XE
- 如何将一TWincontrol控件像TForm一样show出来?而不需要指定它的parent
- 请ghyghost(爱国人士)进,问个小问题。
- 求三层设计模式的例子
- 与大家讨论一个是否值得使用第三方控件的问题,来者有分,分我多的是。
- 两个窗口显示问题
- 请问DrawText API函数能否使一个长单词在一个宽度不足以容纳此单词的矩形中折行,使得长单词显示完整?
- 用Delphi程序实现Internet上下载图片
- 我的Mdi父窗体不能最大化,也不能用鼠标拉伸,改变大小,有何方法?
- 关于数据库查询?paradox
- 如何让GDI画出来的线在最顶层呀
- 求助,uses别人写好的pas程序,报错
个人不太喜欢mdi方式,没啥有点!能不用就不用了
LockWindowUpdate(主窗口Handle)
...//切换
LockWindowUpdate(NULL)
var
iLoop: integer;
iCount: integer;
aHandle: THandle;
aFormClass: TFormClass;
aTempForm: TForm;
begin
iCount := 0;
for iLoop := 0 to sys_main_f.MDIChildCount-1 do
begin
if UpperCase(sys_main_f.MDIChildren[iLoop].ClassName)=UpperCase(ModuleFormName) then
begin
inc(iCount);
aHandle := sys_main_f.MDIChildren[iLoop].Handle;
SendMessage(aHandle,WM_SYSCOMMAND,SC_MAXIMIZE,0);
Break;
end;
end;
if iCount=0 then
begin
aFormClass := TFormClass(GetClass(ModuleFormName));
if aFormClass<>nil then
begin
aTempForm := aFormClass.Create(Application);
aTempForm.WindowState := wsMaximized;
end;
end;
end;
procedure TForm1.TabControl1Change(Sender: TObject);
var
H: HWND;
begin
{获取要激活的窗体的句柄}
H := (TabControl1.Tabs.Objects[TabControl1.TabIndex] as TForm).Handle
FSwitch := False; {关闭事件响应}
{激活下一个窗体}
SendMessage(ClientHandle, WM_MDINEXT, H, 0);
FSwitch := True; {打开事件响应}
{激活前一个窗体}
SendMessage(ClientHandle, WM_MDINEXT, SendMessage(ClientHandle, WM_MDIGETACTIVE, 0, 0), 1);
{结果激活了要激活的窗体}
end;
var
I: Integer;
NextH: HWND;
begin
for I := 0 to MDIChildCount - 1 do
begin
if MDIChildren[I] = TabControl1.Tabs.Objects[TabControl1.TabIndex] then
begin
NextH := MDIChildren[(I + 1) mod MDIChildCount].Handle;
SendMessage(ClientHandle, WM_MDINEXT, NextH, 1);
Break;
end;
end;
end;