建立Delphi窗体模板
2007-02-28 18:37
369 查看
最近在写一个信息管理系统,为了方便使用Delphi先建立一个模板窗体,以后就可以直接使用这个窗体来建立客户窗体了。窗体要实现以下功能:
1. 这个窗体是作为MDI子窗体使用的,Delphi默认的MDI子窗体关闭是最小化,所以需要修改实现关闭后彻底释放窗体。
2. 中文显示环境。
3. Enter键代替Tab键实现控件切换。
4. 把窗体上的主要数据源的状态显示在窗体的标题(Caption)后面显示;因为这个信息管理系统有数据模块,所以需要在窗体上添加一个数据源控件(TDateSource)来实现这个功能。
5. 只有当数据集处于添加/编辑状态时与数据源相连的数据感知控件才可用,其他状态不可用。这个功能由ChangeEnableTrue;和ChangeEnableFalse;这两个函数实现。使用的时候只需要把控件的Tag值设置为86,就可以被这两个函数控制了
具体实现方法如下:
首先在工程中新建一个窗体,命名为FmExample,在窗体上放置一个标签控件,一个DateSoure控件。修改窗体和控件的属性如下设置:
FmExample:
TDateSource:
TLable:
窗体单元文件如下:
{***************************************************************************}
软件制作人:Stosc
联系方式:E-Mail:endlock@gmail.com
版权所有 (c) 2007 尊重版权 违法必究
{***************************************************************************}
unit UExample;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, StdCtrls, DBCtrls, Mask,UDM, Grids, DBGrids, ComCtrls,
Buttons;
type
TFmExample = class(TForm)
StateDS: TDataSource;
FrmCaptionLab: TLabel;
DBGrid2: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure DBComboBox1Enter(Sender: TObject);
procedure ComboBox1Enter(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure StateDSStateChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormActivate(Sender: TObject);
function ChangeEnableTrue:variant; //将Tag=86控件的设为可用
function ChangeEnableFalse:variant; //将Tag=86控件的设为不可用
private
{ Private declarations }
public
{ Public declarations }
end;
var
FmExample: TFmExample;
implementation
uses USellMain;
{$R *.dfm}
procedure TFmExample.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//关闭窗体,释放内存
Action:=caFree;
//清空状态栏显示
USellMain.MainFm.StatusBar1.Panels.Items[1].Text:='';
end;
procedure TFmExample.FormCreate(Sender: TObject);
begin
end;
procedure TFmExample.FormKeyPress(Sender: TObject; var Key: Char);
//在窗体中用Enter键代替Tab键切换
begin
if key=#13then //判断是回车按执行键
if not(ActiveControl is TDbgrid) Then //不是在TDbgrid控件内
Begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0); //移动到下一个控件
end else
if(ActiveControl is TDbgrid)Then //是在TDbgrid控件内
begin
With TDbgrid(ActiveControl)Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1 //移动到下一字段
else Selectedindex:=0;
end;
end;
procedure TFmExample.StateDSStateChange(Sender: TObject); //显示数据集状态
var sDateState:string;
begin
case StateDS.State of
dsInactive:
begin
sDateState:='未激活';
self.ChangeEnableFalse;
end;
dsBrowse:
begin
sDateState:='浏览';
self.ChangeEnableFalse;
end;
dsEdit:
begin
sDateState:='修改';
self.ChangeEnableTrue;
end;
dsInsert:
begin
sDateState:='添加新记录';
self.ChangeEnableTrue;
end
else
begin
sDateState:='其他状态';
self.ChangeEnableFalse;
end;
end;
self.Caption:=FrmCaptionLab.Caption+'——'+sDateState;
end;
procedure TFmExample.FormActivate(Sender: TObject);
begin
//将提示信息显示在状态栏上
USellMain.MainFm.StatusBar1.Panels.Items[1].Text:=self.Hint;
end;
function TFmExample.ChangeEnableTrue:variant; //将Tag=86控件的设为可用
var I:integer;
begin
for I:=0 to ControlCount-1 do
begin
if Controls[I].Tag=86 then Controls[I].Enabled:=True;
end;
end;
function TFmExample.ChangeEnableFalse:variant; //将Tag=86控件的设为不可用
var I:integer;
begin
for I:=0 to ControlCount-1 do
begin
if Controls[I].Tag=86 then Controls[I].Enabled:=False;
end;
end;
end.
使用的时候在Flie->New->Other 然后找到这个模板窗体(Delphi7在名称和工程同名的选项卡中,Delphi2006是在inheritable items 中),然后建立的窗体就会继承这个窗体的特性。日后只要修改这个模板窗体,那么所有继承自这个窗体的子窗体都会被修改。
1. 这个窗体是作为MDI子窗体使用的,Delphi默认的MDI子窗体关闭是最小化,所以需要修改实现关闭后彻底释放窗体。
2. 中文显示环境。
3. Enter键代替Tab键实现控件切换。
4. 把窗体上的主要数据源的状态显示在窗体的标题(Caption)后面显示;因为这个信息管理系统有数据模块,所以需要在窗体上添加一个数据源控件(TDateSource)来实现这个功能。
5. 只有当数据集处于添加/编辑状态时与数据源相连的数据感知控件才可用,其他状态不可用。这个功能由ChangeEnableTrue;和ChangeEnableFalse;这两个函数实现。使用的时候只需要把控件的Tag值设置为86,就可以被这两个函数控制了
具体实现方法如下:
首先在工程中新建一个窗体,命名为FmExample,在窗体上放置一个标签控件,一个DateSoure控件。修改窗体和控件的属性如下设置:
FmExample:
[align=center]属性名[/align] | [align=center]值[/align] | [align=center]注释[/align] |
Caption | 窗体模板 | |
Hint | 这是一个示范窗体! | 可以在激活事件中显示在主窗体状态栏中 |
FormStyle | fsMIDChind | 作为MID子窗体 |
Positin | poMainFormCenter | 在主窗体居中显示 |
BorderStyle | bsSingle | 边框样式 |
Font->Charset | GB2312_CHARSET | 字符集编码 |
Font->Name | 宋体 | 字符集名称 |
Font->Size | 9 | 字体大小 |
KeyPreView | True | 按键事件 |
[align=center]属性名[/align] | [align=center]值[/align] | [align=center]注释[/align] |
Name | StateDS |
[align=center]属性名[/align] | [align=center]值[/align] | [align=center]注释[/align] |
Name | FrmCaptionLab | |
Caption | 输入窗口标题 |
{***************************************************************************}
软件制作人:Stosc
联系方式:E-Mail:endlock@gmail.com
版权所有 (c) 2007 尊重版权 违法必究
{***************************************************************************}
unit UExample;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, StdCtrls, DBCtrls, Mask,UDM, Grids, DBGrids, ComCtrls,
Buttons;
type
TFmExample = class(TForm)
StateDS: TDataSource;
FrmCaptionLab: TLabel;
DBGrid2: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure DBComboBox1Enter(Sender: TObject);
procedure ComboBox1Enter(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure StateDSStateChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormActivate(Sender: TObject);
function ChangeEnableTrue:variant; //将Tag=86控件的设为可用
function ChangeEnableFalse:variant; //将Tag=86控件的设为不可用
private
{ Private declarations }
public
{ Public declarations }
end;
var
FmExample: TFmExample;
implementation
uses USellMain;
{$R *.dfm}
procedure TFmExample.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//关闭窗体,释放内存
Action:=caFree;
//清空状态栏显示
USellMain.MainFm.StatusBar1.Panels.Items[1].Text:='';
end;
procedure TFmExample.FormCreate(Sender: TObject);
begin
end;
procedure TFmExample.FormKeyPress(Sender: TObject; var Key: Char);
//在窗体中用Enter键代替Tab键切换
begin
if key=#13then //判断是回车按执行键
if not(ActiveControl is TDbgrid) Then //不是在TDbgrid控件内
Begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0); //移动到下一个控件
end else
if(ActiveControl is TDbgrid)Then //是在TDbgrid控件内
begin
With TDbgrid(ActiveControl)Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1 //移动到下一字段
else Selectedindex:=0;
end;
end;
procedure TFmExample.StateDSStateChange(Sender: TObject); //显示数据集状态
var sDateState:string;
begin
case StateDS.State of
dsInactive:
begin
sDateState:='未激活';
self.ChangeEnableFalse;
end;
dsBrowse:
begin
sDateState:='浏览';
self.ChangeEnableFalse;
end;
dsEdit:
begin
sDateState:='修改';
self.ChangeEnableTrue;
end;
dsInsert:
begin
sDateState:='添加新记录';
self.ChangeEnableTrue;
end
else
begin
sDateState:='其他状态';
self.ChangeEnableFalse;
end;
end;
self.Caption:=FrmCaptionLab.Caption+'——'+sDateState;
end;
procedure TFmExample.FormActivate(Sender: TObject);
begin
//将提示信息显示在状态栏上
USellMain.MainFm.StatusBar1.Panels.Items[1].Text:=self.Hint;
end;
function TFmExample.ChangeEnableTrue:variant; //将Tag=86控件的设为可用
var I:integer;
begin
for I:=0 to ControlCount-1 do
begin
if Controls[I].Tag=86 then Controls[I].Enabled:=True;
end;
end;
function TFmExample.ChangeEnableFalse:variant; //将Tag=86控件的设为不可用
var I:integer;
begin
for I:=0 to ControlCount-1 do
begin
if Controls[I].Tag=86 then Controls[I].Enabled:=False;
end;
end;
end.
使用的时候在Flie->New->Other 然后找到这个模板窗体(Delphi7在名称和工程同名的选项卡中,Delphi2006是在inheritable items 中),然后建立的窗体就会继承这个窗体的特性。日后只要修改这个模板窗体,那么所有继承自这个窗体的子窗体都会被修改。
相关文章推荐
- 建立Delphi窗体模板
- 定制Delphi的新建文件模板与新窗体的默认字体
- delphi下实现控制其它窗体中的控件代码模板(delphi 7安装程序)
- 在dll中delphi中封装窗体(实例)
- UVA 536 二叉树重建(递归建立二叉树模板)
- Delphi实现winsock编程之二(套接字的建立绑定侦听以及连接)
- 用DELPHI创建DLL文件,封装窗体的实现方法实例
- Delphi中如何控制其他程序窗体上的窗口控件
- STM32寄存器开发(工程模板建立)
- 在QTP的脚本中建立Action模板(转载未实践)
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则
- delphi 龙年窗体 恭喜发财
- delphi如何将子窗体的显示位置设置到主窗体的中间
- 利用Delphi建立精确计数器
- MDI窗体的建立及释放方法的探索
- wpf通用窗体模板
- 地磅称量系统之(30~34)从我定义的界面模板中继承窗体并且完善它的的界面编辑控件布局展示主界面的运行效果图
- 问题-[Delphi]SendMessageTimeout调用后卡住点击任务栏还会出现窗体处理
- delphi新语法之泛型实现的对象池模板
- Delphi: windows xp下无法将窗体最大化