20210917_吴长星_学习笔记11

MDI多窗口结构

  • 用于多窗口编程
  • 首先要设置主窗口,并设置其的FormStyle := fsMDIForm;
  • 然后其它窗口的FormStyle := fsMDIChild;
  • 主窗口中有个属性:WindowMenu,可以设置一个菜单项用来显示打开的窗口列表
    设置了此项后该菜单项会自动设置一个快捷键,
  • 配合CommonUnit单元中的OpenWindow方法以及JFcComponent单元中的TcywMDITaskBar
  • 其中TcywMDITaskBar直接拖到MDI的主窗口就行,不需要过多改动
  • ActiveMDIChild: 指当前显示的MDI子窗口的引用,没有显示时则为Nil

Win32单元
ImageList
用于加载多张图片,并用于其它控件的使用
PageControl
每个页面都是独立的TTabSheet类型、
ActivePage:当前选中的页面
ActivePageIndex:当前选中的页面的序号
Style:选项卡样式,tsTabs:win系统风格、tsButtonFlat平面风格、tsButton按钮风格
TabPosition:选项卡标题的位置
PageCount:选项卡的数量
Pages[i: integer]:第i+1个选项卡的引用
Images:指定一个ImageList控件,默认每增加一个页面,其图标也会相应设置成对应序号的图标
Mutilines:设置一行装不下的标签页是否允许多行表示
OnChange:当前选项卡的活动状态改变后触发
OnChanging:当前选项卡的活动状态改变时触发,AllowChange参数表示是否允许改变活动状态
TabSheet标签页的属性

  • PageIndex: 页面的位置,会自动调整,从0开始
  • ImageIndex:页面标题的图标在Images中的序号,从0开始
  • TabVIsible: 标签页标题是否可视。标题不可视代表标签页不可视
  • Visible;标签页的内容是否可视。内容不可视但标题可视
  • OnShow:当选项卡显示时触发。可用于按需初始化选项卡
  • OnHide:当选项卡隐藏时触发。

CommonUnit中相关方法:
ShowTabSheet(Page: TPageControl; Sheet: TTabSheet):仅显示选中的选项卡,其它隐藏
ShowTabSheet(Page: TPageControl; Index: Integer);仅显示指定序号的选项卡,其它隐藏
HideTabSheet(Page: TPageControl; Sheet: TTabSheet):仅隐藏选中的选项卡,其它显示
HideTabSheet(Page: TPageControl; Index: Integer);仅隐藏指定序号的选项卡,其它显示
ShowTabAll(Page: TPageControl; Visible: Boolean);全部选项卡隐藏或显示
HIdeTabSheetHeight(Page: TPageControl;hOffset: Integer = 4):隐藏所有的选项卡标题

增加一个TabSheet
tmpSht := TTabSheet.Create(pgc);
tmpSht.Caption := ‘Test’;
tmpSht.PageControl := pgc; //指定该选项卡归属的PageControl

删除一个TabSheet
Pgc.Pages[Index].Free;

交换两个TabSheet
if Abs(I - J) = 1 then //如果这两个相邻
pgcTest.Pages[I - 1].PageIndex := J
else
Begin //如果不相邻,则利用他们中间的一个选项卡作为跳板进行交换
pgcTest.Pages[I - 1].PageIndex := I;
pgcTest.Pages[J - 1].PageIndex := I - 1;
end;

事件是向一个组件发送消息,并响应该消息的结果。
授权技术:组件依赖其所有者来处理它的事件

Inline关键字:声明Inline的过程在编译时,会把调用该过程的地方用该过程的编译代码替换,提升运行效率,但也会使编译后的Exe文件变得更大。

TList类:指针型列表,能接收所有类型的数据,并自动增长,比动态数组灵活,但动态数组有类型检查,而TList没有
注意:保存的是指针类型
这种初始化是错误的,只是将变量I的地址重复添加了21次,栈中存的全是I的值

删除TList列表时,要先释放其中包含的所有对象
在使用TList列表中的元素时,要先进行类型转换,此时容易出现类型不符的错误

TObjectList:对象列表,类型为TObject,并且每个元素的Owner都为列表本身,即TObjectList负责其中元素的内存释放,在删除TObjectList时会自动释放其中的所有元素。

System.Contnrs单元中
TOrderedList:抽象类,使用TList类来保存元素.

TStack:栈,先入后出,

利用Add,直接将新增元素添加到列表末尾

TQueue:队列,先入先出

调用Insert,将新增元素添加到列表的第一位

TStrings类:字符串列表抽象类。
TStringList类:TStrings的子类。
TStringList中存储的字符串可以是’Key=Val’形式的,此时可通过Values[‘Key’]来获取’Val’