数据库操作部分:
题目: 数据库操作,要实现添加、修改、删除、保存要求:
实现UI分离提示:
利用模板简化操作,提高复用性。实例:
建立一个公用的模板{应用窗体继承技术}来实现代码的复用性和界面的统一性,并且将业务规则实现分离,部分的改动不会对程序有大的变动。
模板如下,我提供完整的模板,请与我联系。unit TempletForm;interface ...............
type
TMyForm = class(TForm)
............
procedure imgMinButtonClick(Sender: TObject);
procedure imgSizeButtonClick(Sender: TObject);
procedure imgCloseButtonClick(Sender: TObject);
procedure imgCaptionMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure imgCaptionMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure imgCaptionMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure imgSysIconMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure popSystemMenuPopup(Sender: TObject);
procedure N_SizeClick(Sender: TObject);
procedure N_MoveClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
canmove:boolean;
curPoint:TPoint;
oldPoint:TPoint;
Canvas:TCanvas;
protected
procedure CreateParams(var Params:TCreateParams);override;
procedure WMActivate(var Msg:TWMACTIVATE); message WM_ACTIVATE;
public
{ Public declarations }
end;var
MyForm: TMyForm;implementation{$R *.dfm}procedure TMyForm.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
if BorderStyle<>bsNone then
Params.Style :=WS_THICKFRAME or WS_POPUP or WS_BORDER;
end;procedure TMyForm.imgMinButtonClick(Sender: TObject);
begin
if Application.MainForm =self then
Application.Minimize
else
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;procedure TMyForm.imgSizeButtonClick(Sender: TObject);
begin
if self.WindowState = wsNormal then
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
imgSizeButton.Picture :=imgRestoreButton.Picture;
end
else
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
imgSizeButton.Picture :=imgMaxButton.Picture;
end;end;procedure TMyForm.imgCloseButtonClick(Sender: TObject);
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;procedure TMyForm.imgCaptionMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button=mbLeft)and(ssLeft in Shift)then
begin
canmove:=true;
Canvas:=TCanvas.Create;
with Canvas do
begin
pen.Style :=psdot;
brush.Style :=bsClear;
pen.Width :=2;
Pen.Mode :=pmNotXor;
Handle :=GetDC(0);
Rectangle(left,top,Left+width,top+height);
curPoint.X :=X;
curPoint.Y :=Y;
oldPoint.X :=Left;
oldPoint.Y :=Top;
end; //end with
end; //end if
end;procedure TMyForm.imgCaptionMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if not canmove then exit;
with Canvas do
begin
Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
oldPoint.x :=Left +X-curPoint.x;
oldPoint.y :=Top +Y-curPoint.y;
Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
end;
end;procedure TMyForm.imgCaptionMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if not canmove then exit;
with Canvas do
begin
Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
Left :=oldPoint.x;
Top :=oldPoint.y;
Free;
end;
canmove:=not canmove;
end;procedure TMyForm.FormCreate(Sender: TObject);
begin
lbCaption.Caption :=Caption;
end;procedure TMyForm.imgSysIconMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PopSystemMenu.Popup(Left+ImgSysIcon.Left,Top+ImgSysIcon.Top+ImgSysIcon.Height);
end;procedure TMyForm.popSystemMenuPopup(Sender: TObject);
begin N_Restore.Enabled :=imgSizeButton.Visible and (WindowState =wsMaximized);
N_Max.Enabled :=imgSizeButton.Visible and (WindowState =wsNormal);
N_Size.Enabled :=imgSizeButton.Visible ;
end;procedure TMyForm.N_SizeClick(Sender: TObject);
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_SIZE, 0);
end;procedure TMyForm.N_MoveClick(Sender: TObject);
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MOVE, 0);
end;procedure TMyForm.FormShow(Sender: TObject);
begin
if WindowState=wsNormal then
imgSizeButton.Picture.Bitmap :=imgMaxButton.Picture.Bitmap
else if WindowState=wsMaximized then
imgSizeButton.Picture.Bitmap :=imgRestoreButton.Picture.Bitmap
end;procedure TMyForm.WMActivate(var Msg: TWMACTIVATE);
begin
if (Msg.Active =WA_ACTIVE) or (Msg.Active =WA_CLICKACTIVE) then
begin
imgCaption.Picture.Bitmap :=imgColorCaption.Picture.Bitmap;
imgLeftUp1.Picture.Bitmap :=imgColorLeftUp.Picture.Bitmap;
imgRightUp1.Picture.Bitmap :=imgColorRightUp.Picture.Bitmap;
coolBarMenu.Bitmap :=imgColorMenubar.Picture.Bitmap;
end
else begin
imgCaption.Picture.Bitmap :=imgGrayCaption.Picture.Bitmap;
imgLeftUp1.Picture.Bitmap :=imgGrayLeftUp.Picture.Bitmap;
imgRightUp1.Picture.Bitmap :=imgGrayRightUp.Picture.Bitmap;
coolBarMenu.Bitmap :=imgGrayMenubar.Picture.Bitmap;
end;
end;end.引用type
Tfrm_hygl = class(TMyForm)
ztl: TStatusBar;
题目: 数据库操作,要实现添加、修改、删除、保存要求:
实现UI分离提示:
利用模板简化操作,提高复用性。实例:
建立一个公用的模板{应用窗体继承技术}来实现代码的复用性和界面的统一性,并且将业务规则实现分离,部分的改动不会对程序有大的变动。
模板如下,我提供完整的模板,请与我联系。unit TempletForm;interface ...............
type
TMyForm = class(TForm)
............
procedure imgMinButtonClick(Sender: TObject);
procedure imgSizeButtonClick(Sender: TObject);
procedure imgCloseButtonClick(Sender: TObject);
procedure imgCaptionMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure imgCaptionMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure imgCaptionMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure imgSysIconMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure popSystemMenuPopup(Sender: TObject);
procedure N_SizeClick(Sender: TObject);
procedure N_MoveClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
canmove:boolean;
curPoint:TPoint;
oldPoint:TPoint;
Canvas:TCanvas;
protected
procedure CreateParams(var Params:TCreateParams);override;
procedure WMActivate(var Msg:TWMACTIVATE); message WM_ACTIVATE;
public
{ Public declarations }
end;var
MyForm: TMyForm;implementation{$R *.dfm}procedure TMyForm.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
if BorderStyle<>bsNone then
Params.Style :=WS_THICKFRAME or WS_POPUP or WS_BORDER;
end;procedure TMyForm.imgMinButtonClick(Sender: TObject);
begin
if Application.MainForm =self then
Application.Minimize
else
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;procedure TMyForm.imgSizeButtonClick(Sender: TObject);
begin
if self.WindowState = wsNormal then
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
imgSizeButton.Picture :=imgRestoreButton.Picture;
end
else
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
imgSizeButton.Picture :=imgMaxButton.Picture;
end;end;procedure TMyForm.imgCloseButtonClick(Sender: TObject);
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;procedure TMyForm.imgCaptionMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button=mbLeft)and(ssLeft in Shift)then
begin
canmove:=true;
Canvas:=TCanvas.Create;
with Canvas do
begin
pen.Style :=psdot;
brush.Style :=bsClear;
pen.Width :=2;
Pen.Mode :=pmNotXor;
Handle :=GetDC(0);
Rectangle(left,top,Left+width,top+height);
curPoint.X :=X;
curPoint.Y :=Y;
oldPoint.X :=Left;
oldPoint.Y :=Top;
end; //end with
end; //end if
end;procedure TMyForm.imgCaptionMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if not canmove then exit;
with Canvas do
begin
Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
oldPoint.x :=Left +X-curPoint.x;
oldPoint.y :=Top +Y-curPoint.y;
Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
end;
end;procedure TMyForm.imgCaptionMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if not canmove then exit;
with Canvas do
begin
Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
Left :=oldPoint.x;
Top :=oldPoint.y;
Free;
end;
canmove:=not canmove;
end;procedure TMyForm.FormCreate(Sender: TObject);
begin
lbCaption.Caption :=Caption;
end;procedure TMyForm.imgSysIconMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PopSystemMenu.Popup(Left+ImgSysIcon.Left,Top+ImgSysIcon.Top+ImgSysIcon.Height);
end;procedure TMyForm.popSystemMenuPopup(Sender: TObject);
begin N_Restore.Enabled :=imgSizeButton.Visible and (WindowState =wsMaximized);
N_Max.Enabled :=imgSizeButton.Visible and (WindowState =wsNormal);
N_Size.Enabled :=imgSizeButton.Visible ;
end;procedure TMyForm.N_SizeClick(Sender: TObject);
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_SIZE, 0);
end;procedure TMyForm.N_MoveClick(Sender: TObject);
begin
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MOVE, 0);
end;procedure TMyForm.FormShow(Sender: TObject);
begin
if WindowState=wsNormal then
imgSizeButton.Picture.Bitmap :=imgMaxButton.Picture.Bitmap
else if WindowState=wsMaximized then
imgSizeButton.Picture.Bitmap :=imgRestoreButton.Picture.Bitmap
end;procedure TMyForm.WMActivate(var Msg: TWMACTIVATE);
begin
if (Msg.Active =WA_ACTIVE) or (Msg.Active =WA_CLICKACTIVE) then
begin
imgCaption.Picture.Bitmap :=imgColorCaption.Picture.Bitmap;
imgLeftUp1.Picture.Bitmap :=imgColorLeftUp.Picture.Bitmap;
imgRightUp1.Picture.Bitmap :=imgColorRightUp.Picture.Bitmap;
coolBarMenu.Bitmap :=imgColorMenubar.Picture.Bitmap;
end
else begin
imgCaption.Picture.Bitmap :=imgGrayCaption.Picture.Bitmap;
imgLeftUp1.Picture.Bitmap :=imgGrayLeftUp.Picture.Bitmap;
imgRightUp1.Picture.Bitmap :=imgGrayRightUp.Picture.Bitmap;
coolBarMenu.Bitmap :=imgGrayMenubar.Picture.Bitmap;
end;
end;end.引用type
Tfrm_hygl = class(TMyForm)
ztl: TStatusBar;
解决方案 »
- TStringList能识别类似于Ini一样的节点吗?
- windows 2003 delphi 读取ini文件 有问题
- 关于dbgrid问题
- delphi选择文件夹大量文件
- adoquery更新错误:"无法为更新定位行。一些值可能已在最后一次读取后已更改。"
- Edit组件问题:
- form难题
- 关于模糊查询!!!请高手指点!!
- 大家好啊,我是delphi初学者(我的qq:1138483.如果您是delphi的初学者,爱好者,加我哦)
- 请问:BCB 与Delphi最大的区别是什么?
- 不知道delphi7什么时候出中文版,中国这么多人用delphi,他为什么不像ms那样做的很到位?
- 哪位推荐一个支持超过16的端口号的串口控件?
顺便请老师有空得时候看看我这个贴子,关于ocx的,总没人答,只好请教老师了。
http://expert.csdn.net/Expert/topic/1859/1859314.xml?temp=.7314722
在Midas版见过你回答问题,相当不错。
我那点东西,那敢办小小学堂,见笑了。所谓的UI操作就是(User Interface)用户界面分离。基本的界面操作和具体的业务规则进行分离,简单的就可以这样认为,单机上可以、c/s可以,Midas更应该如此。----------------
沉沦中..........
沉沦中..........
先了,
这样的一个窗口好象是无标题栏的窗口,很奇怪一个类MIS中怎么会有大量的这种类型的窗口
呵呵,后来细想了一下明白了,一定是做的类似换肤的东西了,用自己的图片之类的伪装成
原来的标题栏以及最大、最小化按钮能,不知道是不是这样的!
imgCaptionMouseDown这个事件中使用了
GetDC(0) TCanvas.Create这里难到不用ReleaseDC,Canvas.Free吗?呵呵,希望你不介意回答我这个没入门的学生的问题!!!
封装:组件对象要封装组件,而组件又要封装接口,最终接口还是需要封装其所实现的业务逻辑规则,所以,单一的从OOP的这一点上来考虑的话,组件对象和OOP就应该有某种分不开的关系。封装主要提体在两个方面:类封装、对象封装,具体的细节可以参考相关资料。封装就是一种UI分离,为什么我会这样说呢?提到封装,也许我们最容易想到的就是黑匣子。的确,我也承认封装就是一个基于黑匣子的实现方式,而且也是相当恬当的一种比喻,如何说呢?因为封装也一样有两个"界面",一个是活的,一个是稳定的,而所谓的活就是封装内部所处理业务规则的实现方法,如果不去计较其效率的话,我们可以用任何的手段去实现其内部的功能,可以进行随意性修改(此处的随意性修改仅仅是为了体提它的"活"而给出的。)但是无论其是如何的活,如何的随意性,它都有一个最终的目的,就是为了实现一个稳定的"界面",内部的内容可以进行改动,而稳定的接口是不应该随意更动的。类如此、对象如此,一个接口、组件、组件对象更是如此。单纯的从一个项目而言,这种封装就是一种UI分离,不要固执的认为UI分离就是将用户操作和逻辑规则处理放在了两个"物理"上很远的操作就是封装,如果这样认为,我只能说你的OOP理解的不好。此处给一个例子来进行分析:
TCustomForm = class(TScrollingWinControl)
private FActiveControl: TWinControl;
FFocusedControl: TWinControl;
function GetMDIChildren(I: Integer): TForm;
function GetMonitor: TMonitor; ……
public
constructor Create(AOwner: TComponent); override;
procedure AfterConstruction; override;
……
end;
想说明的是此处的private 就是我们刚刚所说的活的部分,它的内部可以进行任何的改动的,但是,它必须要保证最终的Public 是稳定的。这就是一种封装的提体,也是一种UI操作的实例。同时我们也应该注意到,正是因为封装性,所以就要求我们在考虑稳定部分的时候做一些工作,当一个项目投于应用之中之后,我们就没有办法再去更改这些稳定的部分,因为这些部分是直接于用户进行关联的,用户的操作就是对急定部分的操作,如果一但改动了某一个用户正在使用的稳定部分的属性,其后果就是项目的重新规划、开发。总之一句话:封装可以隐藏实现细节,使得代码模块化,实现代码的可复用性。不知道封装的阐述各位是否明白?如果有任何的疑问可以与我联系,欢迎您和我一起探讨。而模板也可以实现一种封装,在某种程序度上可以这样说,它将封装与继承都体现了进去,不是吗:)这里提到:
imgCaptionMouseDown这个事件中使用了
GetDC(0) TCanvas.Create这里难到不用ReleaseDC,Canvas.Free吗?此处的确,但也不得不考虑到,做为一个模板,从启动时将有可能要一直用以应用程序的结束,而它的机制就是一种共享,每一个具体的实例可以不创建多个模板实例,所以,此处对于你这个疑问也可以勉强的这样回答。----------------
沉沦中..........
这里油门和方向盘就是你说的Public部分,发动机就是Private部分。这样理解应该没错吧。对于上面的代码我还有些问题我不太清楚模板的工作机理,但是就简单的从代码角度考虑,它无非是在TForm和
我们自己的Form中间多插了一个类,而从模板继承下来的Form也都有自己的实例
为什么不能ReleaseDC呢。奇怪的问题还有
imgCaptionMouseDown中
Canvas := TCanvas.Create;
这里会默认引用窗体本身的Canvas,而这个Canvas是只读的,难到在这个模板里为该项增加了一个写方法?
我注意到了这个Canvas是在MouseUp的时候释放的,问题是原来窗体的Canvas值已经被改了!。
最大的一个问题,为什么一定要在桌面画布上画而不直接在窗口画布上画,有什么特别的原因吗?
呵呵,没有这个意思,别介意,手忙脚乱Ing..........
------------------------------------
奇怪的问题还有
imgCaptionMouseDown中
Canvas := TCanvas.Create;
这里会默认引用窗体本身的Canvas,而这个Canvas是只读的,难到在这个模板里为该项增加了一个写方法?
我注意到了这个Canvas是在MouseUp的时候释放的,问题是原来窗体的Canvas值已经被改了!。
最大的一个问题,为什么一定要在桌面画布上画而不直接在窗口画布上画,有什么特别的原因吗?
-------------------------------------
我是不知道如何回答你的问题。你是否可以用例子阐述你想要说表达的意思呢?----------------
沉沦中..........
procedure TMyForm.imgCaptionMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button=mbLeft)and(ssLeft in Shift)then
begin
canmove:=true;
Canvas:=TCanvas.Create;
with Canvas do就你上面的回答我估计你是专门声明了一个Canvas属性,把原来的TForm固有的Canvas属性覆盖
了,或者是声明了一个全局Canvas,不知道是否是这样?也就是说我不知道你的这个Canvas是哪里
来的。最大的一个问题,为什么一定要在桌面画布上画而不直接在窗口画布上画,有什么特别的原因吗? Canvas:=TCanvas.Create;
with Canvas do
begin
pen.Style :=psdot;
brush.Style :=bsClear;
pen.Width :=2;
Pen.Mode :=pmNotXor;
Handle :=GetDC(0);
Rectangle(left,top,Left+width,top+height);
curPoint.X :=X;
curPoint.Y :=Y;
oldPoint.X :=Left;
oldPoint.Y :=Top;
end;
其中GetDC(0)就是获取桌面画布,以后的Rectangle就是对桌面画布进行操作了,
那么为什么要在桌面上画呢?也许看到你模板的效果就知道了,可惜我这里只能猜了。
这儿有一个问题就是,桌面去窗体的区别,我用它做模板并不代表我的窗体不做任何方面的修改,而如果用桌面Canvas的话,留下的空间就更大了些,反之,如果以窗体作为Canvas的话,那么基本就没有什么空间而言了,再者,桌面和窗体有一个前后的次序。以后的程序中,我不需对桌面进行操作,但可以对窗体进行操作,但是,这儿的桌面风格还是统一的。呵呵......
我的API很弱......惭愧中......蒲石兄难得如此直言,真的很感谢。----------------
沉沦中..........
好像默认的是120S,记不很清楚了。----------------
沉沦中..........
以下给出我写的一部分代码,在一定的程序上实现的UI分离和规则的的分离,部分地方给以说明希有用:unit Term001Unt;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Grids, DBGrids, StdCtrls, ExtCtrls, Buttons, ToolWin,ADODB,
DB,DataModuleUnt;type
TTerm001Frm = class(TForm)
ToolBar1: TToolBar;
SpeedButton7: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton1: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton2: TSpeedButton;
Panel1: TPanel;
Panel2: TPanel;
StatusBar1: TStatusBar;
DBGrid1: TDBGrid;
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton9Click(Sender: TObject);
procedure SpeedButton8Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject); { }
private
{ Private declarations }
procedure EnterToTab(var Msg:TMsg;var Handled:Boolean);
Procedure DataShow ;virtual;
Procedure InitInf;
Procedure SaveData;virtual;
Procedure EditData;virtual;
public
{Public declarations }
FADOQuery : TADOQuery;
{这儿为什么要这样处理?它将具体的实现与具体的控件进行分离,此处甚至可以是数据引擎的无关性。}
FSQLStr : String;
Published
end;var
Term001Frm: TTerm001Frm;implementation
{$R *.dfm}{ TTerm001Frm }
procedure TTerm001Frm.SpeedButton7Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) then
begin
FADOQuery.Append;
end;
end;procedure TTerm001Frm.SpeedButton6Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) and
(Not FADOQuery.IsEmpty) then
begin
FADOQuery.Edit;
end;
end;procedure TTerm001Frm.SpeedButton5Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) and
(Not FADOQuery.IsEmpty) then
begin
if Application.MessageBox('您确定要删除当前记录吗?','提示',
MB_OKCANCEL + MB_ICONINFORMATION) = MROK then
FADOQuery.Delete;
end;
StatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(FADOQuery.RecordCount) + ' 条';
end;procedure TTerm001Frm.SpeedButton4Click(Sender: TObject);
begin
if (FADOQuery.State = dsInsert) or
(FADOQuery.State = dsEdit) then
begin
FADOQuery.Cancel;
DataShow;
end;
end;procedure TTerm001Frm.SpeedButton3Click(Sender: TObject);
begin
if (FADOQuery.State = dsInsert) or
(FADOQuery.State = dsEdit) then
begin
{这儿我删除了一段语句,其实现的是操作检查,然而可能理解起来不是很好,所以删除掉了。}
with FADOQuery do
begin
Case FADOQuery.State of
dsInsert : Begin
SaveData;
end;
dsEdit : Begin
EditData;
end;
end;
Try
Post;
Except
Application.MessageBox('对不起,数据操作失败,请重新再试','提示',
MB_OK + MB_ICONINFORMATION);
Exit;
end;
end;
end else
Exit;
Application.MessageBox('恭喜您,数据操作成功,点确定返回','提示',
MB_OK + MB_ICONINFORMATION);
DataShow;
StatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(FADOQuery.RecordCount) + ' 条';
end;procedure TTerm001Frm.SpeedButton9Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) and
(Not FADOQuery.IsEmpty) then
begin
FADOQuery.First;
DataShow;
end;
end;procedure TTerm001Frm.SpeedButton8Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) and
(Not FADOQuery.IsEmpty) then
begin
FADOQuery.Prior;
DataShow;
end;
end;procedure TTerm001Frm.SpeedButton1Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) and
(Not FADOQuery.IsEmpty) then
begin
FADOQuery.Next;
DataShow;
end;
end;procedure TTerm001Frm.SpeedButton12Click(Sender: TObject);
begin
if (FADOQuery.State <> dsInsert) and
(FADOQuery.State <> dsEdit) and
(FADOQuery.Active) and
(Not FADOQuery.IsEmpty) then
begin
FADOQuery.Last;
DataShow;
end;
end;procedure TTerm001Frm.SpeedButton2Click(Sender: TObject);
begin
Close;
end;procedure TTerm001Frm.DataShow;
begin
{可以写一些公用窗体的默认处理过程,当然,也可以不写,其它继承的窗口只需要写自己的处理方法便可}
end;procedure TTerm001Frm.EditData;
begin
{可以写一些公用窗体的默认处理过程,当然,也可以不写,其它继承的窗口只需要写自己的处理方法便可}
end;procedure TTerm001Frm.InitInf;
begin
{在这儿,我的初始化仅仅作到这几步,可以根据自己的需求来进行始初化,它是影响到所有的了窗体的}
with FADOQuery do
begin
if Active then
Active := False;
SQL.Clear;
SQL.Add(FSQLStr);
if DataModuleFrm.dq <> '....' then //此处将作为一个条件判断值来让模板灵活
SQL.Add(' where dq = ''' + DataModuleFrm.dq + '''');
Prepared;
Open;
end;
end;procedure TTerm001Frm.SaveData;
begin
{可以写一些公用窗体的默认处理过程,当然,也可以不写,其它继承的窗口只需要写自己的处理方法便可}
end;
procedure TTerm001Frm.DBGrid1CellClick(Column: TColumn);
begin
DataShow;
end;procedure TTerm001Frm.FormCreate(Sender: TObject);
begin
{在这儿,我的初始化仅仅作到这几步,可以根据自己的需求来进行始初化,它是影响到所有的了窗体的}
Self.BorderStyle := bsSingle;
Self.BorderIcons := [biSystemMenu,biminimize];
Application.OnMessage := EnterToTab;
end;procedure TTerm001Frm.FormShow(Sender: TObject);
begin
InitInf;
StatusBar1.Panels[0].Text := DataModuleFrm.user;
StatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(FADOQuery.RecordCount) + ' 条';
end;procedure TTerm001Frm.EnterToTab(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message=WM_KeyDown then
if Msg.WParam=VK_Return then
Keybd_Event(VK_Tab,0,0,0);
end;end.
----------------
沉沦中..........
unit jjdy_czcgsInfUnt;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Term001Unt, ComCtrls, Grids, DBGrids, ExtCtrls, Buttons, ToolWin,
StdCtrls;type
Tjjdy_czcgsInfFrm = class(TTerm001Frm)
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
procedure DBGrid1CellClick(Column: TColumn);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Procedure DataShow ;override;
Procedure SaveData; override;
Procedure EditData;override;
Procedure ComponentsInit;
Procedure Temp;
end;var
jjdy_czcgsInfFrm: Tjjdy_czcgsInfFrm;implementation
Uses
DataModuleUnt;{$R *.dfm}{ Tjjdy_czcgsInfFrm }procedure Tjjdy_czcgsInfFrm.ComponentsInit;
var
vIndex : Integer;
begin
for vIndex := 0 to Panel2.ControlCount - 1 do
begin
if Panel2.Controls[vIndex] Is TEdit then
if Trim(TEdit(Panel2.Controls[vIndex]).Text) = '' then
TEdit(Panel2.Controls[vIndex]).Text := '0';
end;
end;procedure Tjjdy_czcgsInfFrm.DataShow;
begin
inherited;
with FADOQuery do
begin
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(FieldByName('Dq').AsString);
Edit1.Text := FieldByName('LTDName').AsString;
Edit2.Text := FieldByName('clsl').AsString;
end;
ComponentsInit;
end;procedure Tjjdy_czcgsInfFrm.EditData;
begin
inherited;
Temp;
end;procedure Tjjdy_czcgsInfFrm.SaveData;
begin
inherited;
FADOQuery.FieldByName('DQ').AsString := ComboBox1.Text;
Temp;
end;procedure Tjjdy_czcgsInfFrm.Temp;
begin
ComponentsInit;
with FADOQuery do
begin
FieldByName('LTDName').AsString := Edit1.Text;
FieldByName('clsl').AsString := Edit2.Text;
end;
end;procedure Tjjdy_czcgsInfFrm.DBGrid1CellClick(Column: TColumn);
begin
inherited;
DataShow;
end;procedure Tjjdy_czcgsInfFrm.FormCreate(Sender: TObject);
begin
inherited;
FSQLStr := 'Select * From zhbgs_jjdy_czcgsInf';
FADOQuery := DataModuleFrm.jjdy_czcgsInfADOQuery;
DBGrid1.DataSource := DataModuleFrm.jjdy_czcgsInfDataSource;
end;end.
////////////////////我已经将一些规则处理直接写到这个单元本身了,如:
procedure TPublicClass.KJ_Time(Sender: Tobject; var Key: Char);
begin
if Length(TEdit(Sender).Text) = 10 then
begin
Key := #0;
Key := #13;
end;
if Key=#8 then
begin
TEdit(Sender).Clear;
Key:=#0;
Exit;
end;
if Not (Key In ['0'..'9',#13,'-'] ) then
begin
Key:=#0;
Exit;
end;
if Length(TEdit(Sender).Text) = 4 then
begin
Try
if Yearof(Now) < StrToInt(TEdit(Sender).Text ) then
begin
Key := #0;
Exit;
end;
TEdit(Sender).Text := TEdit(Sender).Text + '-';
TEdit(Sender).SelStart := 5;
Except
;
end;
end;
if Length(TEdit(Sender).Text) = 4 then
begin
if Yearof(Now) < StrToInt(TEdit(Sender).Text) then
begin
Key := #0;
Exit;
end;
TEdit(Sender).Text := TEdit(Sender).Text + '-';
TEdit(Sender).SelStart := 5;
end;
if Length(TEdit(Sender).Text) = 7 then
begin
TEdit(Sender).Text := TEdit(Sender).Text + '-';
TEdit(Sender).SelStart := 8;
end;
If Key = #13 then
begin
if Length(TEdit(Sender).Text) < 4 then
begin
Application.MessageBox('对不起,您没有正确的添加时间格式' + #13 + '例如' +
'正确的时间格式是:2002-10-03','操作提示'
,MB_OK + MB_ICONINFORMATION);
Key := #0;
Exit;
end;
Try
StrToDateTime(TEdit(Sender).Text);
Except
Application.MessageBox('对不起,您没有正确的添加时间格式' + #13 + '例如' +
'正确的时间格式是:2002-10-03','操作提示'
,MB_OK + MB_ICONINFORMATION);
Key := #0;
Exit;
end;
end;
if Length(TEdit(Sender).Text) = 5 then
begin
begin
if StrToInt(Key )> 1 then
begin
TEdit(Sender).SelStart:=3;
TEdit(Sender).Text := TEdit(Sender).Text + '0';
TEdit(Sender).SelStart:=8;
Exit;
end;
end ;
end;
if Length(TEdit(Sender).Text) = 1 then
if StrToInt(TEdit(Sender).Text) = 0 then
begin
TEdit(Sender).SelStart:=3;
TEdit(Sender).Text := '20' + copy(TEdit(Sender).Text,1,2);//+copy(TEdit(Sender).text,6,1);//'-';
TEdit(Sender).SelStart:=3;
Exit;
end;
end;
function TPublicClass.InsertValueFH(var StrValue: String;
TableNameValue: String; FieldList, FieldValue,
TypeValue: array of String): Boolean;
var
AIndex : Integer;
AStr : String;
begin
//..
Result := True;
if ( High(FieldList) - Low(FieldList)) <> (High(FieldValue) - Low(FieldValue)) then
begin
StrValue := '';
Result := False;
Exit;
end;
StrValue := 'Insert Into ' + TableNameValue + '(';
AStr := ' Values(';
For AIndex := Low(FieldList) to High(FieldList) do
begin
if AIndex <> High(FieldList) then
begin
StrValue := StrValue + FieldList[AIndex] + ' , ';
if TypeValue[AIndex] = 'Str' then
AStr := AStr + #39 + FieldValue[AIndex] + #39 + ' , ' else
AStr := AStr + FieldValue[AIndex] + ' , ';
end else
begin
StrValue := StrValue + FieldList[AIndex] + ') ';
if TypeValue[AIndex] = 'Str' then
AStr := AStr + #39 + FieldValue[AIndex] + #39 + ')' else
AStr := AStr + FieldValue[AIndex] + ' ) ';
end;
end;
StrValue := StrValue + AStr;
end;----------------
沉沦中..........
还需要说什么呢?偶的两个学生都不在......----------------
沉沦中..........