📄 baseedit.pas
字号:
unit BaseEdit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MDIBase, Grids, DBGridEh, StdCtrls, ExtCtrls, ActnList, DB,
DBClient, Menus, DBCtrlsEh, wwcheckbox, wwdblook, Mask, wwdbedit, DBCtrls,
FR_DSet, FR_DBSet, FR_Class, MSNPopUp, FR_Desgn;
Const
WM_USER_GETDATA = WM_USER+1024;
WM_USER_SETFOOTER = WM_USER+8028;
type
TfrmBaseEdit = class(TfrmMDIBase)
Panel1: TPanel;
FormTitle: TLabel;
Panel3: TPanel;
PnEdit: TPanel;
pBtn: TPanel;
btnExit: TButton;
Panel4: TPanel;
btnrefresh: TButton;
btnsearch: TButton;
btnprint: TButton;
btndelete: TButton;
btnedit: TButton;
btncopy: TButton;
btnadd: TButton;
Button1: TButton;
grid: TDBGridEh;
ActionList1: TActionList;
acNew: TAction;
acEdit: TAction;
acDelete: TAction;
acSave: TAction;
acCancel: TAction;
acRefresh: TAction;
acSearch: TAction;
acExit: TAction;
CDSBaseinfo: TClientDataSet;
DSBaseinfo: TDataSource;
ActionList2: TActionList;
acPrev: TAction;
acPrint: TAction;
acPSet: TAction;
acRSet: TAction;
acExcel: TAction;
ppmreport: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
frBaseinfo: TfrReport;
frDBDataSet1: TfrDBDataSet;
MSNSaveinfo: TMSNPopUp;
plStandard: TPanel;
Label5: TLabel;
plcalendar: TPanel;
Label1: TLabel;
Label2: TLabel;
edtCreauser: TwwDBEdit;
edtcreadate: TwwDBEdit;
editno: TwwDBEdit;
acFieldProperty: TAction;
popupgrid: TPopupMenu;
N10: TMenuItem;
N11: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N12: TMenuItem;
N19: TMenuItem;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure gridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure btnprintClick(Sender: TObject);
procedure acExitExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure acPrevExecute(Sender: TObject);
procedure acPrintExecute(Sender: TObject);
procedure acPSetExecute(Sender: TObject);
procedure acRSetExecute(Sender: TObject);
procedure DSBaseinfoStateChange(Sender: TObject);
procedure DSBaseinfoDataChange(Sender: TObject; Field: TField);
procedure acNewExecute(Sender: TObject);
procedure acEditExecute(Sender: TObject);
procedure acDeleteExecute(Sender: TObject);
procedure acSaveExecute(Sender: TObject);
procedure acCancelExecute(Sender: TObject);
procedure acRefreshExecute(Sender: TObject);
procedure acSearchExecute(Sender: TObject);
procedure CDSBaseinfoBeforePost(DataSet: TDataSet);
procedure acFieldPropertyExecute(Sender: TObject);
procedure CDSBaseinfoAfterPost(DataSet: TDataSet);
procedure CDSBaseinfoAfterInsert(DataSet: TDataSet);
procedure gridTitleBtnClick(Sender: TObject; ACol: Integer;
Column: TColumnEh);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
function GetGridTitle(TableName:String):Boolean;
function SetControlField(TableName:string):boolean;
procedure Getdata(var getdata:Tmessage);Message WM_USER_GETDATA;
procedure setfooter(var setfooter:Tmessage);Message WM_USER_SETFOOTER;
procedure generalFieldIndicateDS;
procedure SetfieldDisplayFormat;
protected
iFunctionID:integer;
MainTable:string;
MainView:String;
KeyField:String;
ReportName:string;
FormStatus:String;
function CheckSave :Boolean; {检测当前数据是否保存函数}
public
{ Public declarations }
end;
var
frmBaseEdit: TfrmBaseEdit;
implementation
uses Global, DataProcess, Bsearch, Binterface;
{$R *.dfm}
procedure TfrmBaseEdit.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
inherited;
CanClose:=CheckSave;
Grid.SumList.Active:=False;
end;
function TfrmBaseEdit.CheckSave: Boolean;
begin
Result:=true;
if CDSBaseInfo.State in [dsInsert,dsEdit] then //判断当前状态
Case Messagedlg('是否保存当前的修改?',mtWarning,[mbYes,mbNo,mbCancel],0) of
mrYes:
begin
CDSBaseInfo.Post ;
Result := CDSBaseInfo.State = dsBrowse; //状态是否为Browse
end;
mrNo:
begin
CDSBaseInfo.Cancel ;
Result := CDSBaseInfo.State = dsBrowse; //状态是否为Browse
end;
mrCancel:
Result := False ;
End
end;
procedure TfrmBaseEdit.gridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
inherited;
if CDSBaseInfo.RecNo mod 2 = 0 then
begin
Grid.Canvas.Brush.Color:=$00EAEFED;
Grid.Canvas.Font.Color:=clBlack;
end
else
begin
Grid.Canvas.Brush.Color:=clWhite;
Grid.Canvas.Font.Color:=clBlack;
end;
if gdselected in state then
begin
grid.Canvas.Brush.Color:=clBackground;
grid.Canvas.Font.Color:=clWhite;
end;
grid.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
procedure TfrmBaseEdit.btnprintClick(Sender: TObject);
var
Point:Tpoint;
begin
inherited;
Point:=GetScreenPoint(btnprint);
ppmreport.Popup(point.X,point.Y);
end;
procedure TfrmBaseEdit.acExitExecute(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmBaseEdit.Getdata(var getdata: Tmessage);
var
tiao:String;
begin
tiao:=KeyField+'>='+vartosql(GetMaxid(MainView,KeyField)-20);
GetSqlData(CDSBaseinfo,MainView,KeyField,tiao);
GetGridTitle(MainView);
end;
function TfrmBaseEdit.GetGridTitle(TableName: String): Boolean;
var
i:integer;
TMPCDS:TclientDataset;
begin
Result:=True;
if TableName='' then
Exit;
try
CDSbaseinfo.DisableControls;
TMPCDS:=Tclientdataset.Create(nil);
TMPCDS.FetchOnDemand:=False;
GetsqlData(TMPCDS,'TTablefield','fid','ftableName='+vartosql(TableName),20);
if TMPCDS.RecordCount > 0 then
begin
for i:=0 to CDSBaseinfo.Fields.Count - 1 do
begin
TMPCDS.First;
while not TMPCDS.Eof do
begin
if UpperCase(CDSbaseinfo.fields[i].FieldName)=UpperCase(TMPCDS.FieldByName('fname').AsString) then
begin
CDSbaseinfo.Fields[i].DisplayLabel:=TMPCDS.fieldbyname('fdesc').AsString;
if (TMPCDS.FieldByName('ftype').AsString='int') or
(TMPCDS.FieldByName('ftype').AsString='bit') or
(TMPCDS.FieldByName('ftype').AsString='datetime') or
(TMPCDS.FieldByName('ftype').AsString='numeric') then
CDSbaseinfo.Fields[i].DisplayWidth := 12
else
CDSbaseinfo.Fields[i].DisplayWidth:=Trunc(TMPCDS.fieldbyname('flength').AsInteger/1.5);
if not TMPCDS.FieldByName('fisVisible').AsBoolean then
begin
CDSbaseinfo.Fields[i].Visible:=False;
end;
end;
TMPCDS.Next;
end;
CDSBaseinfo.Next;
end;
end;
finally
TMPCDS.Close;
TMPCDS.Free;
CDSbaseinfo.EnableControls;
end;
SetfieldDisplayFormat;
postmessage(handle,WM_USER_SETFOOTER,0,0);
application.ProcessMessages;
end;
function TfrmBaseEdit.SetControlField(TableName: string): boolean;
var
I:integer;
ParentC:Tcomponent;
TMPCDS:TclientDataset;
begin
inherited;
ParentC:=self.FindComponent('DSBaseinfo');
generalFieldIndicateDS;
try
TMPCDS:=Tclientdataset.Create(nil);
TMPCDS.FetchOnDemand:=False;
GetsqlData(TMPCDS,'TTablefield','fid','ftableName='+vartosql(TableName),20);
if TMPCDS.RecordCount > 0 then
begin
TMPCDS.First;
while not TMPCDS.Eof do
begin
for i:=0 to pnEdit.ControlCount - 1 do
begin
if (pnedit.Controls[i] is TwwDBEdit) then
begin
if Trim(UpperCase((pnedit.Controls[i] as TwwDBEdit).Hint))=Trim(UpperCase(TMPCDS.fieldbyname('fname').AsString)) then
begin
(pnEdit.Controls[i] as TwwDBEdit).DataSource:=Tdatasource(ParentC);
(pnedit.Controls[i] as TwwDBEdit).DataField:=Trim(TMPCDS.fieldbyname('fname').AsString);
(pnedit.Controls[i] as TwwDBEdit).MaxLength:=TMPCDS.fieldbyname('flength').AsInteger;
end;
end;
if (pnedit.Controls[i] is TwwDBLookupCombo) then
begin
if Trim(UpperCase((pnedit.Controls[i] as TwwDBLookupCombo).Hint))=Trim(UpperCase(TMPCDS.fieldbyname('fname').AsString)) then
begin
(pnEdit.Controls[i] as TwwDBLookupCombo).DataSource:=Tdatasource(ParentC);
(pnedit.Controls[i] as TwwDBLookupCombo).DataField:=Trim(TMPCDS.fieldbyname('fname').AsString);
(pnedit.Controls[i] as TwwDBLookupCombo).MaxLength:=TMPCDS.fieldbyname('flength').AsInteger;
end;
end;
if (pnedit.Controls[i] is TDBmemo) then
begin
if Trim(UpperCase((pnedit.Controls[i] as TDBmemo).Hint))=Trim(UpperCase(TMPCDS.fieldbyname('fname').AsString)) then
begin
(pnEdit.Controls[i] as TDBmemo).DataSource:=Tdatasource(ParentC);
(pnedit.Controls[i] as TDBmemo).DataField:=Trim(TMPCDS.fieldbyname('fname').AsString);
(pnedit.Controls[i] as TDBmemo).MaxLength:=TMPCDS.fieldbyname('flength').AsInteger;
(pnedit.Controls[i] as TDBmemo).ScrollBars:=ssVertical;
end;
end;
if (pnedit.Controls[i] is TDBDateTimeEditEh) then
begin
if Trim(UpperCase((pnedit.Controls[i] as TDBDateTimeEditEh).Hint))=Trim(UpperCase(TMPCDS.fieldbyname('fname').AsString)) then
begin
(pnEdit.Controls[i] as TDBDateTimeEditEh).DataSource:=Tdatasource(ParentC);
(pnedit.Controls[i] as TDBDateTimeEditEh).DataField:=Trim(TMPCDS.fieldbyname('fname').AsString);
end;
end;
if (pnedit.Controls[i] is TwwCheckBox) then
begin
if Trim(UpperCase((pnedit.Controls[i] as TwwCheckBox).Hint))=Trim(UpperCase(TMPCDS.fieldbyname('fname').AsString)) then
begin
(pnEdit.Controls[i] as TwwCheckBox).DataSource:=Tdatasource(ParentC);
(pnedit.Controls[i] as TwwCheckBox).DataField:=Trim(TMPCDS.fieldbyname('fname').AsString);
end;
end;
end;
TMPCDS.Next;
end;
end;
finally
TMPCDS.Close;
TMPCDS.Free;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -