📄 base_outer.pas
字号:
unit Base_Outer;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Panel, ActnList, ExtCtrls, ComCtrls, ToolWin, AdOdb, Db, DBGridEH,
StdCtrls,Grids,Base_Condition,Base_Detail,ExtPrintReport,pr_PrintReportType,
Sys_SortOrder, Sys_QuickLocate, Sys_SetColumn, Menus, Mask, Sys_Condition,
jpeg;
Type
TFrm_Base_Outer = Class(TFrm_Base_Panel)
ToolButton1: TToolButton;
TlBtn_New: TToolButton;
TlBtn_Modify: TToolButton;
TlBtn_Delete: TToolButton;
ToolButton5: TToolButton;
TlBtn_Filter: TToolButton;
TlBtn_Order: TToolButton;
ToolButton9: TToolButton;
TlBtn_Preview: TToolButton;
TlBtn_Print: TToolButton;
TlBtn_Excel: TToolButton;
ToolButton13: TToolButton;
AdoQry_Main: TAdoQuery;
DataSource: TDataSource;
Lbl_Condition: TLabel;
DBGridEh: TDBGridEh;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ExtPrintReport: TExtPrintReport;
TlBtn_Locate: TToolButton;
PopuPmenu: TPopuPmenu;
HideColumn: TMenuItem;
TlBtn_Copy: TToolButton;
ToolButton6: TToolButton;
Lbl_ConditionTitle: TLabel;
Lbl_OrderTitle: TLabel;
Lbl_Order: TLabel;
procedure Act_OrderExecute(Sender: TObject);
procedure Act_FilterExecute(Sender: TObject);
procedure Act_NewExecute(Sender: TObject);
procedure Act_ModifyExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Act_SetColumnExecute(Sender: TObject);
procedure Act_LocateExecute(Sender: TObject);
procedure Act_PreviewExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Act_PrintExecute(Sender: TObject);
procedure Act_DeleteExecute(Sender: TObject);
procedure HideColumnClick(Sender: TObject);
procedure DBGridEhDblClick(Sender: TObject);
procedure Act_LookExecute(Sender: TObject);
procedure Act_ExcelExecute(Sender: TObject);
private
{ Private declarations }
procedure SetReport;//报表打印参数设置
procedure GetTransValue(FieldName,OldValue:String;var NewValue:String);//打印转换过程
protected
{ protected declarations }
ExtendCaption:Boolean;//不推荐
OrderByFields:String;//当前排序字段信息 认大小写
SelectFromSQL:String;//存放类似select...from...的SQL语句
Condition:String;//存放 Where 后的条件,在运行过滤模块后会被清空
ConditionUserDefine:String;//存放 Where 后的条件,在运行过滤模块后不会清空
Frm_Sys_Condition:TFrm_Base_Condition;//用于引用条件窗体;
Frm_Sys_Detail:TFrm_Base_Detail;//用于引用弹出窗体;
Frm_Sys_SortOrder:TFrm_Sys_SortOrder;//用于引用排序条件窗体;
Frm_Sys_QuickLocate:TFrm_Sys_QuickLocate; //用于引用快速定位设置窗体;
Frm_Sys_SetColumn:TFrm_Sys_SetColumn;//用于引用设置DBGridEh显示列窗体;
procedure GetData; virtual;//由于SQL的改变,用此过程重新SQL一下
procedure InitReport; virtual;//设置报表表头属性
//子类重载,设置打印数据的转换过程
procedure SetColumnsStyle(ItemIndex:Integer;FieldName:String); virtual;
//子类重载,返回删除一行记录的SQL语句
function SetDeleteSql:String;virtual;
public
{ Public declarations }
//初始化Form过程,子类一般都要重载
procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);virtual;
end;
TAdoQueryExpress=Class(TAdoQuery)
Public
Property CommandTimeOut;
end;
var
Frm_Base_Outer: TFrm_Base_Outer;
implementation
uses Sys_Global;
{$R *.DFM}
procedure TFrm_Base_Outer.GetTransValue(FieldName,OldValue:String;var NewValue:String);
var
i:integer;
begin
NewValue:=OldValue;
if DBGridEh<>nil then
for i:=0 to DBGridEh.Columns.Count-1 do
if(DBGridEh.Columns[i].FieldName=FieldName)then
begin
if(DBGridEh.Columns[i].Field.DataType in [ftFloat])
and(TFloatField(DBGridEh.Columns[i].Field).DisplayFormat<>'')
and(OldValue<>'')then
begin//处理 定义了打印格式的字段
NewValue:=FormatFloat(TFloatField(DBGridEh.Columns[i].Field).DisplayFormat,StrToFloat(OldValue));
end
else if DBGridEh.Columns[i].KeyList.IndexOf(OldValue)<>-1 then
begin//处理 pickList 与keyList
NewValue:=DBGridEh.Columns[i].PickList.Strings[DBGridEh.Columns[i].
KeyList.IndexOf(OldValue)];
end;
break;
end;
end;
procedure TFrm_Base_Outer.Act_OrderExecute(Sender: TObject);
var
BookMArk:TBookMArk;
begin//排序字段设置处理过程
inherited;
if DBGridEh.DataSource.DataSet.Active=True then
begin
Frm_Sys_SortOrder.InitForm(DBGridEH,OrderByFields);;
if(Frm_Sys_SortOrder.ShowModal=mrOk)then
begin
OrderByFields:=Frm_Sys_SortOrder.OrderFields;
Lbl_Order.Caption:=Frm_Sys_SortOrder.OrderCaption;
BookMArk:=AdoQry_Main.GetBookmArk;
AdoQry_Main.Sort:=OrderByFields;
AdoQry_Main.GotoBookmArk(BookMArk);
AdoQry_Main.FreeBookMArk(BookMArk);
end;
end;
end;
procedure TFrm_Base_Outer.GetData;
begin//SQL组合过程
if SelectFromSQL<>'' then
begin
AdoQry_Main.DisableControls;
AdoQry_Main.Close;
AdoQry_Main.SQL.clear;
AdoQry_Main.SQL.Add(SelectFromSQL);
if(Condition<>'')then
begin
if(ConditionUserDefine<>'')then
AdoQry_Main.SQL.Add(' Where '+Condition+' and '+ConditionUserDefine)
else
AdoQry_Main.SQL.Add(' Where '+Condition);
end
else if(ConditionUserDefine<>'')then
AdoQry_Main.SQL.Add(' Where '+ConditionUserDefine);
AdoQry_Main.Open;
AdoQry_Main.Sort:=OrderByFields;
AdoQry_Main.EnableControls;
end;
end;
procedure TFrm_Base_Outer.Act_FilterExecute(Sender: TObject);
var
TableName:string;
begin//数据过滤处理过程
inherited;
TableName:= '#'+self.Name ;
if Frm_Sys_Condition=nil then
Frm_Sys_Condition:=TFrm_Sys_Condition.Create(Application);
Frm_Sys_Condition.SetDBConnect(DBConnect);
Frm_Sys_Condition.SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6);
Frm_Sys_Condition.SetSysParam(UserCode,ModuleCode,MenuId,LoginDate);
if Frm_Sys_Condition is TFrm_Sys_Condition then
TFrm_Sys_Condition(Frm_Sys_Condition).SetSrcGrid(DBGridEh,TableName);
Frm_Sys_Condition.FatherForm:=Self;
if Frm_Sys_Condition.Showmodal=mrOk then
begin
Condition:=Frm_Sys_Condition.Condition;
Lbl_Condition.Caption:=Frm_Sys_Condition.ConditionHint;
GetData;
end;
end;
procedure TFrm_Base_Outer.Act_NewExecute(Sender: TObject);
begin//新增处理过程
inherited;
if(Frm_Sys_Detail<>nil)then
begin
Frm_Sys_Detail.SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6);
Frm_Sys_Detail.SetSysParam(UserCode,ModuleCode,MenuId,LoginDate);
Frm_Sys_Detail.InitForm(DBConnect,'Add',AdoQry_Main);
Frm_Sys_Detail.ShowModal;
end;
end;
procedure TFrm_Base_Outer.Act_ModifyExecute(Sender: TObject);
begin//修改处理过程
inherited;
if(Frm_Sys_Detail<>nil)and(not AdoQry_Main.IsEmpty)then
begin
Frm_Sys_Detail.SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6);
Frm_Sys_Detail.SetSysParam(UserCode,ModuleCode,MenuId,LoginDate);
Frm_Sys_Detail.InitForm(DBConnect,'Edit',AdoQry_Main);
Frm_Sys_Detail.ShowModal;
end;
end;
procedure TFrm_Base_Outer.FormClose(Sender: TObject;
var Action: TCloseAction);
begin//善后处理,释放资源
inherited;
try
AdoQry_tmp.Close;
AdoQry_tmp.SQL.clear;
AdoQry_tmp.SQL.Text :='Drop Table '+ '#'+self.Name+','+'#'+self.Name+'Chb';
AdoQry_tmp.ExecSQL;
except
end;
if Frm_Sys_Condition<>nil then
Frm_Sys_Condition.Release;
if Frm_Sys_Detail<>nil then
Frm_Sys_Detail.Release;
if Frm_Sys_SortOrder<>nil then
Frm_Sys_SortOrder.Release;
if Frm_Sys_QuickLocate<>nil then
Frm_Sys_QuickLocate.Release;
if Frm_Sys_SetColumn<>nil then
Frm_Sys_SetColumn.Release;
Action:=CaFree;
end;
procedure TFrm_Base_Outer.Act_SetColumnExecute(Sender: TObject);
begin//显示列设置处理过程
inherited;
Frm_Sys_SetColumn.SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6);
Frm_Sys_SetColumn.SetSysParam(UserCode,ModuleCode,MenuId,LoginDate);
Frm_Sys_SetColumn.SetDBConnect(DBConnect);
Frm_Sys_SetColumn.SetSrcGrid(DBGridEH,self.Name);
Frm_Sys_SetColumn.ShowModal;
end;
procedure TFrm_Base_Outer.Act_LocateExecute(Sender: TObject);
begin//快速定位处理过程
inherited;
Frm_Sys_QuickLocate.SetSrcGrid(DBGridEh);
Frm_Sys_QuickLocate.ShowModal;
if Frm_Sys_QuickLocate.ModalResult=mrok then
begin
AdoQry_Main.Locate(Frm_Sys_QuickLocate.LocateFieldName,Frm_Sys_QuickLocate.LocateFieldValue,[loPArtialKey]);
end;
end;
procedure TFrm_Base_Outer.SetReport;
var
i,j:integer;
begin
if DBGridEh.DataSource.DataSet.Active=False then
Abort;
ExtPrintReport.DataSet :=nil;
ExtPrintReport.Headers.clear;
i:=0;
with ExtPrintReport do
begin
for j:=0 to DBGridEH.Columns.Count-1 do
if DBGridEH.Columns[j].Visible then
begin//只打印可视的数据
Headers.Add;
Headers.Items[i].Caption :=DBGridEH.Columns[j].Title.Caption;
Headers.Items[i].FieldName :=DBGridEH.Columns[j].FieldName;
Headers.Items[i].DisplayWidth:=DBGridEH.Columns[j].Width div (DBGridEH.Canvas.TextWidth(' '));
Headers.Items[i].Alignment :=DBGridEH.Columns[j].Alignment;
if((DBGridEh.Columns[j].PickList.Count>0)and
(DBGridEh.Columns[j].KeyList.Count>0))
or(DBGridEh.Columns[j].Field.DataType in [ftFloat])then
begin//定义了PickList或显示格式的传递一个转换过程
Headers.Items[i].style:=dstransform;
Headers.Items[i].TransformFunction:=GetTransValue;
end
else//通知子类
SetColumnsStyle(i,DBGridEH.Columns[j].FieldName);
Inc(i);
end;
DataSet:=DBGridEh.DataSource.DataSet;
InitReport;
end;
end;
procedure TFrm_Base_Outer.Act_PreviewExecute(Sender: TObject);
begin//预览
inherited;
SetReport;
ExtPrintReport.Preview;
end;
procedure TFrm_Base_Outer.Act_PrintExecute(Sender: TObject);
begin//打印
inherited;
SetReport;
ExtPrintReport.Print(self);
end;
procedure TFrm_Base_Outer.SetColumnsStyle(ItemIndex:Integer;FieldName:String);
begin
end;
procedure TFrm_Base_Outer.InitReport;
begin//定义表头
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select SysParamValueC'
+' From SysParam'
+' Where SysParamCode=''Name0''';
AdoQry_Tmp.Open;
ExtPrintReport.Title1:=AdoQry_Tmp.fieldbyname('SysParamValueC').AsString;
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select ReportName1,ISOCode1'
+' From ReportCtrl'
+' Where SysMenuId='+MenuId;
AdoQry_Tmp.Open;
ExtPrintReport.Title2:=AdoQry_Tmp.fieldbyname('ReportName1').AsString;
ExtPrintReport.SubTitle1:=AdoQry_Tmp.fieldbyname('ISOCode1').AsString;
ExtPrintReport.Subtitle2:=Lbl_Condition.Caption;//过滤条件}
end;
procedure TFrm_Base_Outer.FormCreate(Sender: TObject);
var
StrTemp:String;
begin//,------>/ 创建必要窗体
inherited;
TAdoQueryExpress(AdoQry_Main).CommandtimeOut:=0;
ExtendCaption:=True;
StrTemp:=Lbl_Condition.Caption;
while pos(',',StrTemp)<>0 do
StrTemp[pos(',',StrTemp)]:='/';
Lbl_Condition.Caption:=StrTemp;
StrTemp:=Lbl_Order.Caption;
while pos(',',StrTemp)<>0 do
StrTemp[pos(',',StrTemp)]:='/';
Lbl_Order.Caption:=StrTemp;
Frm_Sys_SortOrder:=TFrm_Sys_SortOrder.Create(Application);
Frm_Sys_QuickLocate:=TFrm_Sys_QuickLocate.Create(Application);
Frm_Sys_SetColumn:=TFrm_Sys_SetColumn.Create(Application);
end;
procedure TFrm_Base_Outer.Act_DeleteExecute(Sender: TObject);
begin//删除处理过程
inherited;
if (not AdoQry_Main.IsEmpty) and
(DispInfo(' 真的删除当前记录吗? ',2)='y') then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SetDeleteSql;
if AdoQry_Tmp.SQL.Text<>'' then
try
AdoQry_Tmp.ExecSQL;
AdoQry_Main.Delete;
except
DispInfo(' 无法删除当前记录,可能已经被其他数据表引用!',1);
Abort;
end;
end
else
Abort;
end;
function TFrm_Base_Outer.SetDeleteSql: String;
begin
Result:='';
end;
procedure TFrm_Base_Outer.InitForm(AdOConnection: TAdOConnection;
ReadOnly: Boolean);
var i:integer;
sqltext:string;
begin//设置数据库连接
inherited;
if ReadOnly then
begin
Act_New.Visible:=False;
Act_Modify.Visible:=False;
Act_Delete.Visible:=False;
Act_New.Enabled:=False;
Act_Modify.Enabled:=False;
Act_Delete.Enabled:=False;
Act_Look.Enabled:=True;
Act_Look.Visible:=True;
if ExtendCaption then
begin
Caption:=Caption+'-[查询]';
Pnl_Title.Caption:=Pnl_Title.Caption;
end;
end
else
begin
if ExtendCaption then
begin
Caption:=Caption+'-[新增]';
Pnl_Title.Caption:=Pnl_Title.Caption;
end;
end;
SetDBConnect(AdOConnection);
AdoQry_Main.Connection:=AdOConnection;
for i:=0 to toolBar.ControlCount-1 do
if (Ttoolbutton(toolBar.controls[i]).action = act_SetColumn) and (act_SetColumn.Enabled and act_SetColumn.Visible) then
begin
sqltext:='select top 1 * from Sys_SetColumn '
+' where formName='+quotedstr(self.Name)
+' and useEmployeeCode='+quotedstr(userCode);
Executesql(AdoQry_tmp,sqltext,0);
if AdoQry_tmp.RecordCount<>0 then
dbgrideh.FrozenCols:=AdoQry_tmp.fieldbyname('frozencols').asinteger;
end;
end;
procedure TFrm_Base_Outer.HideColumnClick(Sender: TObject);
begin//弹出菜单隐藏列处理
inherited;
if(DBGridEh.SelectedIndex>=0)then
DBGridEh.Columns[DBGridEh.SelectedIndex].Visible:=False;
end;
procedure TFrm_Base_Outer.DBGridEhDblClick(Sender: TObject);
begin//鼠标双击处理
inherited;
if Act_Modify.Enabled then
Act_Modify.Execute
else if Act_Look.Enabled then
Act_Look.Execute;
end;
procedure TFrm_Base_Outer.Act_LookExecute(Sender: TObject);
begin//查看处理
inherited;
if(Frm_Sys_Detail<>nil)and(not AdoQry_Main.IsEmpty)then
begin
Frm_Sys_Detail.SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6);
Frm_Sys_Detail.SetSysParam(UserCode,ModuleCode,MenuId,LoginDate);
Frm_Sys_Detail.InitForm(DBConnect,'ReadOnly',AdoQry_Main);
Frm_Sys_Detail.ShowModal;
end;
end;
procedure TFrm_Base_Outer.Act_ExcelExecute(Sender: TObject);
begin//输出Excel
inherited;
DBGridEhToExcel(DBGridEh,Pnl_Head);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -