delphi界面开发基础

高中时期,有幸上过2节pascal的课,老师讲了一些英文(实为关键字和变量),介绍了二进制及其计算,然理解不透,遂弃之。
十几年后,因工作需要维护一个上个世纪的 delphi 工程,故学之,但已无甚意义,简记之,供自学用。

IDE相关

Delphi 7,CodeGear,可在xp、win7、win10上运行。

创建工程

project->Add New Project…。

控制选择

鼠标选择。ctrl+光标:小移动。ctrl+shift+光标:较大移动。
对齐:右键–>Position->Align,再选择。注:似乎没有快捷方式。

单元代码和控件界面:F12

Debug 和 Release 的切换方法:
进入 Project Manager -> Build Configurations, 在 Debug 或 Release 上双击, 或从右键 Activate。

按Altr+鼠标选择,列模式(和notepad++相同)。

界面开发

小结

各简单控件使用、属性等,弹出窗口,多窗口显示,logo,标题,最大/小化。退出程序。对话框弹出。
状态栏 OK
菜单 OK
多面板
树形 OK
列表框
上下框 OK
菜单栏下的图标
按键响应(上下左右)

图片显示
socket

初始化、退出

initialization:在单元中放在文件结尾前,初始化,只运行一次。
finalization:在单元中放在 initializationend. 之间,退出时运行一次。

窗体自动初始化:窗体界面,选OnCreate事件,一般函数名为FormCreate。在Create时会自动调用,即进入窗体时最选被调用。
手动初始化:窗体实现代码,自定义Init函数,在创建窗体时后,调用之。

布局相关

对齐:alCustom,alNone:可自由拖动。但是其它的类型是自动的。有时不小心会乱,需要关闭但不保存。
可以在左侧拖动控件到某个页面(如panel),可理解为控件也有层次。

控件事件及描述

常用重要的:
窗体控件事件:

1
2
3
4
5
6
7
8
OnCreate  建立事件,窗件或控件第一次建立时发生。OnCreate事件只发生一次,用来执行初始化任务  
OnShow 窗体或控件显示出来之前发生的事件
OnHide 窗体或控件隐藏时触发的事件
OnClose和OnCloseQuery 当关闭一个窗体时就会响应OnClose和OnCloseQuery事件 ,OnCloseQuery事件比OnClose具有更高的优先级。

窗体初始化:窗体界面,选 OnCreate 事件,输入 FormCreate,即可。
图片控件:有OnMouseEnter和OnMouseLeave事件。

备忘:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
OnActive  焦点称到窗体或控件时发生
OnClick 鼠标单击事件
OnDbClick 鼠标双击事件
OnClose和OnCloseQuery 当关闭一个窗体时就会响应OnClose和OnCloseQuery事件 ,OnCloseQuery事件比OnClose具有更高的优先级。
OnContextPopup 在窗体上单击鼠标右键时触发
OnCreate 建立事件,窗件或控件第一次建立时发生。OnCreate事件只发生一次,用来执行初始化任务
OnDeactivate 从当前程序切换到另一个应用程序时发生
OnDestroy 卸载窗体或控件时被触发,用来清除窗体或控件所占的内存,或者其他的收尾工作
nDragDrop和OnDragOver 如果有外部对象被拖放到控件上时触发
OnMouseDown和OnMouseUp 响应鼠标在控件上的按下鼠标、释放鼠标的事件
OnMouseMove 鼠标在控件上移动时被触发的事件
OnHide 窗体或控件隐藏时触发的事件
OnKeyDown、OnKeyPress、OnKeyUp 响应键盘事件
OnPaint 窗体或控件需要重画时发生
OnResize 窗体或控件调整大小时被触发的事件。当使用极大化、极小化按钮时此事件也会被触发

OnMeasureItem 在ComboBox控件中改变选择项时发生的事件
OnChange 在文本框、Image、ScrollBar等控件中的值被改变时发生
OnScroll 拖动滚动条时被触发
OnBandDrag和OnBandMove 当ControlBar内的对象被拖动和移动时触发

杂项

新建工程类型: VCL Forms Application。

默认工程名为Project1,dpr中有program Project1,另dpr、res文件名称保持一致,否则编译不通过。
如果修改 exe 文件名称,则系统状态栏名称亦会变化。

已定的控件名称(即加了响应代码),如修改之,则代码(函数名)会即时变化,不需手动改。

self不需要定义,可直接使用,如self.Text为窗口标题。

字符串及资源文件,在pas源码定义:

1
2
resourcestring
Str这是变量 = '这是显示的字符串,是吗?';

会被编译到 drc 文件中,形式:

1
#define <单元名称>_Str这是变量 638438