📄 u_base.pas
字号:
///
///===============基FORM=========//
//
unit U_base;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBGRIDEH, StdCtrls, DB, ADODB, Buttons, ToolWin, ComCtrls,
Wwdbcomb, wwdbedit, DBCtrls, wwdbdatetimepicker;
type
TF_base = class(TForm)
Q_main: TADOQuery;
Q_detail: TADOQuery;
DS_main: TDataSource;
DS_detail: TDataSource;
Panel1: TPanel;
Btn_PRE: TSpeedButton;
Btn_next: TSpeedButton;
Btn_Last: TSpeedButton;
Btn_new: TSpeedButton;
Btn_Edit: TSpeedButton;
BTN_First: TSpeedButton;
Btn_Save: TSpeedButton;
Btn_Cancel: TSpeedButton;
Btn_Delete: TSpeedButton;
Btn_Find: TSpeedButton;
Btn_Print: TSpeedButton;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormActivate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BTN_FirstClick(Sender: TObject);
procedure Btn_PREClick(Sender: TObject);
procedure Btn_nextClick(Sender: TObject);
procedure Btn_LastClick(Sender: TObject);
procedure Btn_newClick(Sender: TObject);
procedure Btn_EditClick(Sender: TObject);
procedure Btn_SaveClick(Sender: TObject);
procedure Btn_CancelClick(Sender: TObject);
procedure Btn_DeleteClick(Sender: TObject);
procedure Btn_FindClick(Sender: TObject);
procedure Btn_PrintClick(Sender: TObject);
procedure Q_detailAfterScroll(DataSet: TDataSet);
procedure Q_detailAfterInsert(DataSet: TDataSet);
procedure Q_mainAfterInsert(DataSet: TDataSet);
procedure Q_mainAfterScroll(DataSet: TDataSet);
procedure DS_mainStateChange(Sender: TObject);
procedure Q_mainBeforeInsert(DataSet: TDataSet);
procedure Q_mainBeforeDelete(DataSet: TDataSet);
procedure Q_mainAfterEdit(DataSet: TDataSet);
procedure Q_mainAfterPost(DataSet: TDataSet);
procedure Q_mainAfterDelete(DataSet: TDataSet);
procedure Q_detailAfterDelete(DataSet: TDataSet);
procedure Q_detailAfterEdit(DataSet: TDataSet);
procedure Q_detailAfterPost(DataSet: TDataSet);
procedure Q_mainBeforeEdit(DataSet: TDataSet);
procedure Q_detailBeforeEdit(DataSet: TDataSet);
procedure Q_detailBeforeDelete(DataSet: TDataSet);
procedure Q_detailBeforeInsert(DataSet: TDataSet);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
Form_SID: string; //窗体的SID值
CLASS_MAIN_TABLE: string; //类中主表
CLASS_DETAIL_TABLE: string; //类中从表
CLASS_KEY_FIELD: string; //类中关键字
CLASS_ONE_FLAG: BOOLEAN; //类中的是否单表操作
// CLASS_OLD_CON: string; //类的老连接
STATE_FLAG: BOOLEAN; //主表是否在编辑状态
//类中记录权限
IS_INSERT, IS_EDIT, IS_DELETE, IS_FIND, IS_PRINT, IS_View, IS_EDITPRINT, IS_Other, IS_ADUIT: BOOLEAN;
DESIGN_FLAG: BOOLEAN; //是否处于设计状态
{ Public declarations }
procedure MY_LabelClick(Sender: TObject);
procedure Set_billcode;
procedure SET_BUTTON;
procedure set_edit_enabled;
end;
//其中TMyWinControl类中用来是把TWinControl中的OnKeyPress 给Published! COOL!!!
TMyWinControl = class(TWinControl)
public
property OnKeyPress;
end;
var
F_base: TF_base;
implementation
uses U_data, U_main, U_Select, Report_Module, U_Form_Report;
{$R *.dfm}
//Initialization
//RegisterClass(TF_FORM_REG);
procedure TF_base.set_edit_enabled;
var
I: integer;
begin
//================================================如果数据集在编辑状态
if (DS_MAIN.DataSet.State in [DSEDIT, DSINSERT]) then
begin
for i := 0 to COMPONENTCOUNT - 1 do
begin
if COMPONENTS[i].Tag = 1 then CONTINUE;
//对于普通的
if (COMPONENTS[i] is TDBEDIT) then
tDBEDIT(COMPONENTS[i]).READONLY := False
else
if (uppercase(COMPONENTS[i].classNAME) = 'TDBCOMBOBOX') then
tDBCOMBOBOX(COMPONENTS[i]).READONLY := FALSE
else
if (uppercase(COMPONENTS[i].classNAME) = 'TDBMEMO') then
TDBMEMO(COMPONENTS[i]).READONLY := FALSE;
//对于WW之类的
if (COMPONENTS[i] is TWWDBEDIT) then
twwDBEDIT(COMPONENTS[i]).READONLY := False
else
if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBCOMBOBOX') then
tWWDBCOMBOBOX(COMPONENTS[i]).READONLY := FALSE
else
if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBDateTimePicker') then
TwwDBDateTimePicker(COMPONENTS[i]).Enabled := true;
end;
end
//==========================================
else //===============================================如果数据集不在编辑状态
for i := 0 to componentcount - 1 do
begin
if COMPONENTS[i].Tag = 1 then CONTINUE;
//对于普通的
if (uppercase(COMPONENTS[i].classNAME) = 'TDBEDIT') then
tDBEDIT(COMPONENTS[i]).READONLY := TRUE
else
if (uppercase(COMPONENTS[i].classNAME) = 'TDBCOMBOBOX') then
tDBCOMBOBOX(COMPONENTS[i]).READONLY := TRUE
else
if (uppercase(COMPONENTS[i].classNAME) = 'TDBMEMO') then
TDBMEMO(COMPONENTS[i]).ReadOnly := True;
//对于ww之类的
if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBEDIT') then
tWWDBEDIT(COMPONENTS[i]).READONLY := TRUE
else
if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBCOMBOBOX') then
tWWDBCOMBOBOX(COMPONENTS[i]).READONLY := TRUE
else
if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBDateTimePicker') then
TwwDBDateTimePicker(COMPONENTS[i]).Enabled := False;
end;
//=============================================
end;
procedure TF_base.SET_BUTTON;
begin
BTN_FIRST.Enabled := (not DS_MAIN.DataSet.Bof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
BTN_PRE.Enabled := (not DS_MAIN.DataSet.Bof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
BTN_NEXT.Enabled := (not DS_MAIN.DataSet.Eof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
BTN_LAST.Enabled := (not DS_MAIN.DataSet.Eof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
BTN_NEW.Enabled := not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
BTN_EDIT.Enabled := not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
BTN_SAVE.Enabled := (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
BTN_CANCEL.Enabled := (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
BTN_FIND.Enabled := not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
BTN_DELETE.Enabled := (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT])) and (not (DS_MAIN.DataSet.BOF and DS_MAIN.DataSet.EOF));
BTN_Print.Enabled := (not (ds_main.DataSet.State in [Dsedit, Dsinsert])) and (not (DS_MAIN.DataSet.BOF and DS_MAIN.DataSet.EOF));
end;
procedure TF_base.SET_BILLCODE;
begin
//=================================
end;
procedure TF_base.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//=-========
if key = 115 then
showmessage('112');
end;
procedure TF_base.MY_LabelClick(Sender: TObject);
begin
if not DESIGN_FLAG then EXIT;
if LOGIN_CODE <> 'SYSTEM' then EXIT;
// F_LABEL_SET.EDIT1.TEXT := TLABEL(SENDER).CAPTION;
//F_LABEL_SET.SHOWMODAL;
//TLABEL(SENDER).CAPTION := F_LABEL_SET.EDIT1.TEXT;
// SQL_S := 'DELETE T_LANGUAGE_LABEL WHERE FORM_NAME=''' + NAME + ''' AND LABEL_NAME=''' + TLABEL(SENDER).NAME + '''';
//SQL_EXEC(SQL_S);
// SQL_S := 'INSERT T_LANGUAGE_LABEL (FORM_NAME,LABEL_NAME,_CHINESE)VALUES(''' + NAME + ''',''' + TLABEL(SENDER).NAME + ''',''' + TLABEL(SENDER).CAPTION + ''')';
// SQL_EXEC(SQL_S);
end;
procedure TF_base.FormCreate(Sender: TObject);
var I: INTEGER;
begin
//COLOR := COLOR3; //窗体颜色
FILE_NAME := NAME;
STATE_FLAG := False; //主表的DATASET状态。。。
self.Font.Size := 10;
Self.ParentFont := true;
for I := 0 to ComponentCount - 1 do // 设置DBGRID 颜色
begin
try
if Components[I].ClassType = TDBGridEH then
begin
TDBGridEH(Components[I]).Flat := true;
// TDBGridEH(Components[I]).FixedColor := COLOR4;
//TDBGridEH(Components[I]).RowColorFlag := TRUE;
//TDBGridEH(Components[I]).RowOneColor := COLOR1;
// TDBGridEH(Components[I]).RowTWOColor := COLOR2;
end;
except
CONTINUE;
end;
end;
end;
procedure TF_base.FormShow(Sender: TObject);
//var i: integer;
begin
//-----
//设置各组件的字体。。。
//-------------
SQL_S := 'SELECT * FROM TB_Form WHERE FormName=''' + copy(classname, 2, 100) + '''';
sql_open(sql_s);
//============================设置窗体的属性==================================
width := DM.Q_TempA.fieldbyname('Width').AsInteger;
Height := DM.Q_TempA.fieldbyname('Height').AsInteger;
Top := DM.Q_TempA.fieldbyname('FormTop').AsInteger;
Left := DM.Q_TempA.fieldbyname('FormLeft').AsInteger;
Form_SID := DM.Q_TempA.Fieldbyname('SID').AsString;
//============================================================================
//确定是否一个表
CLASS_MAIN_TABLE := TRIM(DM.Q_tempA.FIELDBYNAME('MAIN_TABLE').ASSTRING); //加载主表
CLASS_DETAIL_TABLE := TRIM(DM.Q_tempA.FIELDBYNAME('DETAIL_TABLE').ASSTRING); //加载从表
CLASS_KEY_FIELD := TRIM(DM.Q_tempA.FIELDBYNAME('Key_Field').ASSTRING); //加载关键字
CLASS_ONE_FLAG := TRIM(CLASS_DETAIL_TABLE) = ''; //断是否有从表
SQL_S := 'INSERT INTO TB_SYS_LOG (UCODE,computer,Logintime,Dotime,Title,Havedo)VALUES(''' + LOGIN_CODE + ''',''' + computer_name + ''',Convert(varchar(20),Getdate(),20),Convert(varchar(20),Getdate(),20),''' + CAPTION + ''',''进入'')';
Insert_log(SQL_S);
SQL_S := 'SELECT * FROM TB_Acount_Detail WHERE CNID in (Select Sid from TB_Acount_Menu where Cnid in( Select Sid from TB_Acount where Ucode=''' + LOGIN_CODE
+ ''')) AND FORMNAME=''' + NAME + '''';
SQL_OPEN(SQL_S);
//showmessage(inttostr(Dm.Q_TempA.RecordCount));
//----------------加载权限----------------------------------
IS_INSERT := DM.Q_TEMPA.FIELDBYNAME('_INSERT').ASBOOLEAN;
IS_EDIT := DM.Q_TEMPA.FIELDBYNAME('_EDIT').ASBOOLEAN;
IS_DELETE := DM.Q_TEMPA.FIELDBYNAME('_DELETE').ASBOOLEAN;
IS_FIND := DM.Q_TEMPA.FIELDBYNAME('_FIND').ASBOOLEAN;
IS_PRINT := DM.Q_TEMPA.FIELDBYNAME('_PRINT').ASBOOLEAN;
IS_VIEW := DM.Q_TEMPA.FIELDBYNAME('_VIEW').ASBOOLEAN;
IS_EDITPRINT := DM.Q_TEMPA.FIELDBYNAME('_EDITPRINT').ASBOOLEAN;
IS_ADUIT := DM.Q_TEMPA.FIELDBYNAME('_ADUIT').ASBOOLEAN;
IS_OTHER := DM.Q_TEMPA.FIELDBYNAME('_OTHER').ASBOOLEAN; //加载可以编辑界面LABEL权限
//-----------------------------------------------------------
//设置窗体各个组件的属性------------------------
{ SQL_S := 'SELECT * FROM TB_Form_Comment WHERE FORMNAME=''' + NAME + '''';
DM.Q_TEMPB.CLOSE;
DM.Q_TEMPB.SQL.CLEAR;
DM.Q_TEMPB.SQL.ADD(SQL_S);
DM.Q_TEMPB.OPEN;
for I := 0 to COMPONENTCOUNT - 1 do
if UPPERCASE(COMPONENTS[I].CLASSNAME) = 'TLABEL' then
begin
TLABEL(COMPONENTS[I]).ONCLICK := MY_LabelClick;
if DM.Q_TEMPB.Locate('CommentName', TLABEL(COMPONENTS[I]).NAME, [loCaseInsensitive]) then
begin
TLABEL(COMPONENTS[I]).CAPTION := DM.Q_TEMPB.FIELDBYNAME('Caption').ASSTRING;
end;
end;
}
//========================置DBEDIT等控件的。。是否能输入=======================
set_edit_enabled;
//=============================================================================
end;
procedure TF_base.FormActivate(Sender: TObject);
begin
///======================数据交换///============================================
MAIN_TABLE := CLASS_MAIN_TABLE; //将主表交付给全局主表
DETAIL_TABLE := CLASS_DETAIL_TABLE; //将类从表交付给全局从表
KEY_FIELD := CLASS_KEY_FIELD; //将类关键字交付给全局关键字
//OLD_CON := CLASS_OLD_CON; //将类的连接交付给全局连接
ONETable_FLAG := CLASS_ONE_FLAG; // 将是否单表操作交付给全局变最
LAST_ACTIVE_FORM := NAME;
LAST_ACTIVE_FORM_CAPTION := CAPTION;
///=============================================================================
M_TABLE := Q_MAIN; //将主表交给全局变量度 M—table
D_TABLE := Q_DETAIL; //将从表交付给全局变量 D_table
SET_BUTTON; //设置BUTTON状态
F_MAIN.Caption := '超信人力资源管理系统----' + CAPTION + ' 授权於:' + COMPANY_NAME;
//================================设置权限====================================
//MY_popedom.Is_Edit := IS_Edit;
// MY_popedom.Is_Insert := IS_Insert;
// MY_popedom.Is_Delete := IS_Delete;
// MY_popedom.Is_Find := IS_Find;
// MY_popedom.Is_Other := IS_Other;
// MY_popedom.IS_View := IS_View;
// MY_popedom.IS_Print := IS_Print;
//MY_popedom.IS_EditPrint := IS_EditPrint;
// MY_popedom.IS_Aduit := IS_Aduit;
//============================================================================
end;
procedure TF_base.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Q_Main.State in [dsedit, dsinsert] then
begin
case Application.MessageBox('数据没有存盘,是否存盘?', '', MB_YESNOCANCEL + MB_ICONASTERISK + MB_DEFBUTTON1 + MB_APPLMODAL) of
ID_YES: BTN_SAVE.Click;
ID_NO: BTN_CANCEL.Click;
ID_cancel:
begin
CANCLOSE := FALSE;
exit;
end;
end;
end;
end;
procedure TF_base.FormClose(Sender: TObject; var Action: TCloseAction);
var
I: INTEGER;
begin
//关闭数据集
Q_DETAIL.CLOSE;
Q_MAIN.CLOSE;
for I := Q_MAIN.FIELDCOUNT - 1 downto 0 do
if Q_MAIN.FIELDS[I].TAG = 100 then
begin
Q_MAIN.Fields.Remove(Q_MAIN.FIELDS[I]);
end;
M_TABLE := nil;
D_table := nil;
//Sql_s:='Update TB_form set Width='+inttostr(self.Width)+',Height='+inttostr(self.Height)
//退出时设置权限 释放权限
Is_Edit := FALSE;
Is_Insert := FALSE;
Is_Delete := FALSE;
Is_Find := FALSE;
Is_Other := FALSE;
IS_View := FALSE;
IS_Print := FALSE;
IS_EditPrint := FALSE;
IS_Aduit := FALSE;
//保存窗体上的控件各属性
{For i:=0 to self.ComponentCount-1 do
begin
SQL_S:='Delete From TB_Form_Comment where CNID in (Select SID TB_Form where Formname='''+name+''')';
SQL_Exec(Sql_s);
//SQL_s:='Insert into TB_Form_Comment (Cnid,Formname,Comment_name,ClassType
//TControl(self.Components[i].Name).
end; }
SQL_S := 'INSERT INTO TB_SYS_LOG (UCODE,computer,logouttime,Dotime,Title,Havedo) VALUES(''' + LOGIN_CODE + ''',''' + computer_name + ''',Convert(varchar(20),Getdate(),20),Convert(varchar(20),Getdate(),20),''' + CAPTION + ''',''退出'')';
INSERT_LOG(SQL_S);
//===========================================保存窗体属性=====================
SQL_S := 'Update TB_Form set width=' + inttostr(Width) + ',Height=' + inttostr(Height) + ',Formtop=' + inttostr(top) + ',FormLeft=' + inttostr(left)
+ ' where Formname=''' + name + '''';
SQL_exec(sql_s);
//============================================================================
Action := cafree;
end;
procedure TF_base.BTN_FirstClick(Sender: TObject);
begin
Q_MAIN.FIRST;
end;
procedure TF_base.Btn_PREClick(Sender: TObject);
begin
Q_MAIN.Prior;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -