当前位置:网站首页>Delphi MDI appliction 文档最大化显示、去掉最大化最小化等按钮
Delphi MDI appliction 文档最大化显示、去掉最大化最小化等按钮
2022-08-01 07:18:00 【kim-2006】
效果图

第一种方法:
修改 CHILDWIN 单元, 太简单了, 不废话, 完整代码如下:
unit CHILDWIN;
interface
uses Winapi.Windows, System.Classes, Vcl.Graphics, Vcl.Forms, Vcl.Controls,
Vcl.StdCtrls, Winapi.Messages, System.SysUtils;
type
TMDIChild = class(TForm)
Memo1: TMemo;
procedure WMShowWindow(var Msg: TWMShowWindow); message WM_SHOWWINDOW;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
// 重写 CreateParams
procedure CreateParams(var Params: TCreateParams); override;
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.dfm}
procedure TMDIChild.CreateParams(var Params: TCreateParams);
begin
inherited;
// 去掉 WS_BORDER WS_OVERLAPPEDWINDOW 等窗体样式
Params.Style := Params.Style and not WS_OVERLAPPEDWINDOW or WS_BORDER;
end;
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TMDIChild.WMShowWindow(var Msg: TWMShowWindow);
begin
// 自身最大化显示
if Msg.Show then Self.Perform(WM_SYSCOMMAND, SC_MAXIMIZE, nil);
end;
end.第二种方法:
不动 CHILDWIN 单元, 在主窗口单元中创建 TMDIChild 对象时设置相关属性,相当简单。
完整代码如下:
unit MAIN;
interface
uses Winapi.Windows, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Forms,
Vcl.Controls, Vcl.Menus, Vcl.StdCtrls, Vcl.Dialogs, Vcl.Buttons, Winapi.Messages,
Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdActns, Vcl.ActnList, Vcl.ToolWin,
Vcl.ImgList, System.ImageList, System.Actions;
type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileCloseItem: TMenuItem;
Window1: TMenuItem;
Help1: TMenuItem;
N1: TMenuItem;
FileExitItem: TMenuItem;
WindowCascadeItem: TMenuItem;
WindowTileItem: TMenuItem;
WindowArrangeItem: TMenuItem;
HelpAboutItem: TMenuItem;
OpenDialog: TOpenDialog;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
Edit1: TMenuItem;
CutItem: TMenuItem;
CopyItem: TMenuItem;
PasteItem: TMenuItem;
WindowMinimizeItem: TMenuItem;
StatusBar: TStatusBar;
ActionList1: TActionList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
FileNew1: TAction;
FileSave1: TAction;
FileExit1: TAction;
FileOpen1: TAction;
FileSaveAs1: TAction;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowArrangeAll1: TWindowArrange;
WindowMinimizeAll1: TWindowMinimizeAll;
HelpAbout1: TAction;
FileClose1: TWindowClose;
WindowTileVertical1: TWindowTileVertical;
WindowTileItem2: TMenuItem;
ToolBar2: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton9: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ImageList1: TImageList;
procedure FileNew1Execute(Sender: TObject);
procedure FileOpen1Execute(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
private
{ Private declarations }
procedure CreateMDIChild(const Name: string);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses CHILDWIN, About;
procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
// 去掉 WS_BORDER WS_OVERLAPPEDWINDOW 等窗体样式
var style:= GetWindowLong(Child.Handle, GWL_STYLE);
if style >0 then SetWindowLong(Child.Handle, GWL_STYLE, style and not (WS_OVERLAPPEDWINDOW + WS_BORDER));
// 最大化显示
SendMessage(Child.Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
// 最大化显示
//ShowWindow(Child.Handle, SW_SHOWMAXIMIZED);
// 最大化显示
//Child.perform(WM_SYSCOMMAND, SC_MAXIMIZE, nil);
end;
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;
procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
if OpenDialog.Execute then
CreateMDIChild(OpenDialog.FileName);
end;
procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close;
end;
end.边栏推荐
猜你喜欢
随机推荐
上课作业(7)——#598. 取余运算(mod)
升级为重量级锁,锁重入会导致锁释放?
我的创作纪念日
Golang: go open web service
Electromagnetic compatibility introductory tutorial (6) test project
LeetCode240+312+394
The Bean's life cycle
Golang:go模版引擎的使用
Practical training Navicat Chinese and English mode switching
基于百度OCR的网站验证码在线识别
LeetCode Question of the Day (309. Best Time to Buy and Sell Stock with Cooldown)
Create, modify and delete tables
仿牛客网项目总结
从底层结构开始学习FPGA(6)----分布式RAM(DRAM,Distributed RAM)
爬虫框架 Scrapy 详解
「面经分享」西北大学 | 字节 生活服务 | 一面二面三面 HR 面
Vim简介
Golang: go static file processing
图像基本操作的其他内容
MySQL row locks and gap locks









