建立Delphi窗体模板
2012-02-29 17:09
375 查看
窗体要实现以下功能:
<!--[if !supportLists]-->1.
<!--[endif]-->这个窗体是作为MDI子窗体使用的,Delphi默认的MDI子窗体关闭是最小化,所以需要修改实现关闭后彻底释放窗体。
<!--[if !supportLists]-->2.
<!--[endif]-->中文显示环境。
<!--[if !supportLists]-->3.
<!--[endif]-->Enter键代替Tab键实现控件切换。
<!--[if !supportLists]-->4.
<!--[endif]-->把窗体上的主要数据源的状态显示在窗体的标题(Caption)后面显示;因为这个信息管理系统有数据模块,所以需要在窗体上添加一个数据源控件(TDateSource)来实现这个功能。
<!--[if !supportLists]-->5.
<!--[endif]-->只有当数据集处于添加/编辑状态时与数据源相连的数据感知控件才可用,其他状态不可用。这个功能由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 中),然后建立的窗体就会继承这个窗体的特性。日后只要修改这个模板窗体,那么所有继承自这个窗体的子窗体都会被修改。
<!--[if !supportLists]-->1.
<!--[endif]-->这个窗体是作为MDI子窗体使用的,Delphi默认的MDI子窗体关闭是最小化,所以需要修改实现关闭后彻底释放窗体。
<!--[if !supportLists]-->2.
<!--[endif]-->中文显示环境。
<!--[if !supportLists]-->3.
<!--[endif]-->Enter键代替Tab键实现控件切换。
<!--[if !supportLists]-->4.
<!--[endif]-->把窗体上的主要数据源的状态显示在窗体的标题(Caption)后面显示;因为这个信息管理系统有数据模块,所以需要在窗体上添加一个数据源控件(TDateSource)来实现这个功能。
<!--[if !supportLists]-->5.
<!--[endif]-->只有当数据集处于添加/编辑状态时与数据源相连的数据感知控件才可用,其他状态不可用。这个功能由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安装程序)
- Delphi~通过程序窗体句柄获取程序路径
- Magento 新闻模块开发教程 (八) 建立模板文件
- delphi新语法之泛型实现的对象池模板
- Delphi 6 保存窗体设置
- 用DELPHI创建DLL文件,封装窗体的实现方法实例
- 用Quartus II 建立一个工程模板,以后新建工程时无需再配置参数
- 在QTP的脚本中建立Action模板(转载未实践)
- Delphi中的窗体移动
- delphi 使窗体不可拉伸
- Delphi中动态链接库(DLL)的建立和使用
- Delphi下重载窗体CreateParams翻转关闭按钮
- Delphi如何从非主窗体启动
- 利用Delphi建立精确计数器
- Delphi 主窗体Panel中嵌入DLL窗体功能详细源码
- wpf通用窗体模板
- 在delphi中如何动态建立类的实例
- VS2010使用.net 4.0中的ASP.NET MVC 2 模板建立工程后无法提交HTML代码解决方案一则