**********MODSTATE(Modstate.dpr):演示有、无模式窗口的使用******************
1、无模式窗口与有模式窗口的区别?
二者的创建是一样的。
有:和alert窗口、windows的登陆窗口一样,不能和其它窗口交互;用Tform的showModal方法显示该窗体;
无:可交互,可使用Assigned(Modeless)方法检测该窗体是否创建,创建则返回true,该方法防止一个窗体的多个实例存在。
注意:
*编写无模式窗口好习惯
一、窗口关闭则释放空间:要想释放窗体所占内存,必须处理它的OnClose事件:var Action: TCloseAction); Action := caFree;
二、一个窗口一个实例:Assigned(Modeless)方法:作用是检测TModeless的实例是否由Modeless变量引用,实际上就是检测Modeless是否为nil。
三、窗口关闭则引用清空:OnDestroy事件中设置Modeless =:nil.
*创建一个无模式窗体的多个实例存在将消耗大量的内存。
------------------------------------------------------------------------------------------------------------------------------------------------
**********NOCAP(NoCaption.dpr):演示特殊窗体的制作,无边框但可重设大小+怎样捕获WM_NCHITTEST消息*********
*重点是覆写Tform的CreateParams(去边框)、WMNCHitTest(能拖动)。
------------------------------------------------------------------------------------------------------------------------------------------------
**********BRDRICON(Brdricon.dpr):演示有、无边框(有、无边框按钮)窗口的使用******************
1、子界、枚举类型单个元素的获取方法?
es:
VCL里Forms.pas中的真实变量:
TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin);
TBorderStyle = bsNone..bsSingle;
子界元素获取:TBorderStyle(rgBorderStyle.ItemIndex);
枚举元素获取:TFormBorderStyle (rgBorderStyle.ItemIndex);
2、RadioGroup控件中的radio如何增加、设置选中?
如何增加:打开Object Inspector,更改属性Items的值,在一个弹出窗口中进行定义radio,一行就是一个radio;
设置选中:打开Object Inspector,更改属性ItemIndex的值:=-1,无选中;0,选中第一个radio...
此radio的事件:就是RadioGroup的Click事件+ItemIndex的值进行判断。
------------------------------------------------------------------------------------------------------------------------------------------------
**********CURSOR(CrossHair.dpr):演示如何改变当前窗口的光标形状******************
*windows.pas中的很大一部分函数是引入windows api中的dll文件的函数,特点是通过通过external关键字引入,无方法体。
es:这个函数的作用是调入自定义资源文件中的光标,他有两个参数:一是需要使用这个光标的模块的句柄,另一个是一个字符串类型的名字,这个名字是在.res文件中指定的光标名字(指定的名字必须全部大写,但调用的时候不区分大小写)
es:
函数定义:function LoadCursor; external user32 name 'LoadCursorA';
函数使用:LoadCursor (hInstance, 'HJ');
hInstance代表当前运行的应用程序,具体详情见书P106-4.6.2
------------------------------------------------------------------------------------------------------------------------------------------------
**********INITALIZ(Initialize.dpr):演示在dpr文件中增加代码,根据输入提示框的值,来控制窗口是否显示************
1、InputQuery函数的作用:弹出提示输入框,等价于JavaScript中的prompt函数;
声明:function InputQuery(const ACaption, APrompt: string;var Value: string): Boolean;
2、VarToStr函数作用:将一个变量转变成为一个字符串
声明:function VarToStr(const V: Variant): string;
3、MulDiv(a,b,c)函数作用:a*b/c的结果最近(四舍五入)的整数值,其中abc均为整数,c=0返回值=-1;
声明:function MulDiv; external kernel32 name 'MulDiv';
------------------------------------------------------------------------------------------------------------------------------------------------
**********ONEXCEPT(OnException.dpr):演示如何覆盖应用程序(自定义)异常处理************
1、Additional组件模块中的ApplicationEnents控件的作用?
覆写windows默认的一些事件,es:OnException、OnMinimize、OnHint、OnHelp...
2、MessageDlg函数作用:带有多个按钮的选择框。
3、format函数作用:按照指定表达式规则,格式化字符串。
4、Delphi开发环境理解:菜单项Tools->Debbgger Options->Language Exceptions页中的Stop on Delphi Exceptions复选框作用?详见P109 4.6.6提示
选中:当一个程序调试时,如果出现异常,则调试器先弹出该异常,在查看自定义的异常处理时这很烦人。