📄 mdibaseinfo.pas
字号:
unit MDIbaseinfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MDIbase, Buttons, StdCtrls, ExtCtrls, Grids, DBGridEh, ImgList,
ActnList, Mask, wwdbedit, wwdbdatetimepicker, DB, DBClient, ComCtrls,
Menus, FR_Class, FR_Desgn, FR_DSet, FR_DBSet;
const
WM_USER_GetData = WM_USER+1024;
type
TfrmMDIbaseinfo = class(TfrmMDIbase)
paneltitle: TPanel;
formTitle: TLabel;
spbtnprint: TSpeedButton;
spbtnprior: TSpeedButton;
spbtnnext: TSpeedButton;
paneledit: TPanel;
panelbutton: TPanel;
spbtnadd: TSpeedButton;
spbtnmodify: TSpeedButton;
spbtndelete: TSpeedButton;
spbtnsave: TSpeedButton;
spbtncancel: TSpeedButton;
ActionList: TActionList;
acprint: TAction;
acprior: TAction;
acnext: TAction;
acadd: TAction;
acmodify: TAction;
acdelete: TAction;
acsave: TAction;
accancel: TAction;
acsearch: TAction;
ToolButtonImages: TImageList;
SpeedButton1: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
wwDBDateTimePicker1: TwwDBDateTimePicker;
wwDBEdit1: TwwDBEdit;
CDSmaster: TClientDataSet;
dsMaster: TDataSource;
CDSsub: TClientDataSet;
dsSub: TDataSource;
billno: TwwDBEdit;
Label4: TLabel;
Label3: TLabel;
refno: TwwDBEdit;
Grid: TDBGridEh;
CDSselectsub: TClientDataSet;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
aclineadd: TAction;
aclinedelete: TAction;
frDSMaster: TfrDBDataSet;
frDSsub: TfrDBDataSet;
frMD: TfrReport;
popupprint: TPopupMenu;
ActionListprint: TActionList;
p01: TAction;
p02: TAction;
p03: TAction;
p04: TAction;
p05: TAction;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
SpeedButton4: TSpeedButton;
acload: TAction;
procedure FormShow(Sender: TObject);
procedure CDSmasterAfterOpen(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure acpriorExecute(Sender: TObject);
procedure acnextExecute(Sender: TObject);
procedure acaddExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure acsaveExecute(Sender: TObject);
procedure accancelExecute(Sender: TObject);
procedure CDSmasterBeforeCancel(DataSet: TDataSet);
procedure CDSmasterAfterPost(DataSet: TDataSet);
procedure CDSmasterBeforeInsert(DataSet: TDataSet);
procedure CDSmasterAfterScroll(DataSet: TDataSet);
procedure GridGetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure acmodifyExecute(Sender: TObject);
procedure acdeleteExecute(Sender: TObject);
procedure acsearchExecute(Sender: TObject);
procedure aclineaddExecute(Sender: TObject);
procedure aclinedeleteExecute(Sender: TObject);
procedure acprintExecute(Sender: TObject);
procedure p01Execute(Sender: TObject);
procedure p02Execute(Sender: TObject);
procedure p03Execute(Sender: TObject);
procedure p04Execute(Sender: TObject);
procedure frMDUserFunction(const Name: String; p1, p2, p3: Variant;
var Val: Variant);
private
formmode:integer;
procedure Getdata(var Getdata:Tmessage);message WM_USER_GetData;
function checkSave:boolean;
procedure controlEnabled;
procedure controlDisabled;
procedure saveall;
procedure clearall;
{ Private declarations }
protected
innumber:integer;
iBilltypeID:integer;
Titlecaption:String;
MainTable:string;
MainView:string;
SubTable:string;
SubView:string;
keyfield:String;
frname:string;
Searchfrm:Tformclass;
function selectsub():integer;
public
{ Public declarations }
end;
var
frmMDIbaseinfo: TfrmMDIbaseinfo;
implementation
uses common, Global, uitem_f;
{$R *.dfm}
procedure TfrmMDIbaseinfo.FormShow(Sender: TObject);
begin
inherited;
Formtitle.Caption:=TitleCaption;
postmessage(Handle,WM_USER_GetData,0,0);
end;
procedure TfrmMDIbaseinfo.Getdata(var Getdata: Tmessage);
begin
GetAdddata(CDSMaster,Mainview,keyfield,20);
Application.ProcessMessages;
end;
procedure TfrmMDIbaseinfo.CDSmasterAfterOpen(DataSet: TDataSet);
var
Cid:integer;
begin
inherited;
Cid:=CDSmaster.fieldbyname('fid').AsInteger;
Getsqldata(CDSSub,Subview,keyField,'fResid = '+inttostr(Cid),10);
end;
function TfrmMDIbaseinfo.checkSave: boolean;
begin
Result:=True;
if CDSmaster.State in [dsInsert,dsEdit] then
case MessageDlg('是否保存当前数据 ? ',mtWarning,[MByes,MBno,MBcancel],0) of
MRyes:
begin
CDSmaster.Post;
Result:=CDSmaster.State = dsBrowse;
end;
MRno:
begin
CDSmaster.Cancel;
Result:=CDSmaster.State = dsBrowse;
end;
MRcancel:
begin
Result:=False;
end;
end;
end;
procedure TfrmMDIbaseinfo.controlDisabled;
begin
acadd.Enabled:=bcanadd;
acmodify.Enabled:=bcanmodify;
acdelete.Enabled:=bcandelete;
acprior.Enabled:=True;
acnext.Enabled:=True;
acsearch.Enabled:=True;
acprint.Enabled:=bcanprint;
acsave.Enabled:=False;
accancel.Enabled:=False;
aclineadd.Enabled:=acsave.Enabled;
aclinedelete.Enabled:=acsave.Enabled;
acload.Enabled:=acsave.Enabled;
end;
procedure TfrmMDIbaseinfo.controlEnabled;
begin
acadd.Enabled:=False;
acmodify.Enabled:=False;
acdelete.Enabled:=False;
acprior.Enabled:=False;
acnext.Enabled:=False;
acsearch.Enabled:=False;
acprint.Enabled:=False;
acsave.Enabled:=True;
accancel.Enabled:=True;
aclineadd.Enabled:=acsave.Enabled;
aclinedelete.Enabled:=acsave.Enabled;
acload.Enabled:=acsave.Enabled;
end;
procedure TfrmMDIbaseinfo.FormCreate(Sender: TObject);
begin
inherited;
controlDisabled;
formmode:=0;
Innumber:=0;
end;
procedure TfrmMDIbaseinfo.acpriorExecute(Sender: TObject);
begin
inherited;
CDSmaster.Prior;
end;
procedure TfrmMDIbaseinfo.acnextExecute(Sender: TObject);
begin
inherited;
CDSmaster.Next;
end;
procedure TfrmMDIbaseinfo.acaddExecute(Sender: TObject);
begin
inherited;
CDSmaster.Append;
formmode:=1;
Innumber:=Getinnumber(iBilltypeid);
controlEnabled;
billno.SetFocus;
end;
procedure TfrmMDIbaseinfo.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
inherited;
CanClose:=CheckSave;
Grid.SumList.Active:=False;
end;
procedure TfrmMDIbaseinfo.clearall;
begin
if CDSmaster.State in [dsInsert,dsEdit] then
begin
CDSMaster.Cancel;
end;
controlDisabled;
formmode:=0;
end;
procedure TfrmMDIbaseinfo.saveall;
begin
if CDSmaster.State in [dsInsert,dsEdit] then
begin
CDSMaster.Post;
if CDSmaster.ChangeCount>0 then
begin
applyupdata(CDSMaster,Maintable,keyfield);
CDSMaster.MergeChangeLog;
end;
end;
controlDisabled;;
formmode:=0;
end;
procedure TfrmMDIbaseinfo.acsaveExecute(Sender: TObject);
begin
inherited;
CDSMaster.FieldByName('fresid').AsInteger:=Innumber;
CDSMaster.FieldByName('frefno').AsString:=Getoutnumber(iBilltypeid);
saveall;
end;
procedure TfrmMDIbaseinfo.accancelExecute(Sender: TObject);
begin
inherited;
clearall;
end;
function TfrmMDIbaseinfo.selectsub: integer;
begin
if formmode=0 then
exit
else
begin
CDSsub.Edit;
itemid:=0;
if not assigned(frmitem_f) then
frmitem_f:=Tfrmitem_f.Create(application);
frmitem_f.ShowModal;
end;
if itemid>0 then
begin
GetsqlData(CDSselectsub,'Vitem','fid','fid='+vartosql(itemid),1);
if CDSselectsub.RecordCount > 0 then
begin
CDSsub['fitemid']:=itemid;
CDSsub['fcode']:=CDSselectsub['fcode'];
CDSsub['fname']:=CDSselectsub['fname'];
CDSsub['funit']:=CDSselectsub['funit'];
end;
Grid.SelectedIndex:=7;
end;
Result:=itemid;
end;
procedure TfrmMDIbaseinfo.CDSmasterBeforeCancel(DataSet: TDataSet);
begin
inherited;
CDSsub.Cancel;
end;
procedure TfrmMDIbaseinfo.CDSmasterAfterPost(DataSet: TDataSet);
begin
inherited;
if CDSsub.State in [dsEdit,dsInsert] then CDSsub.Post;
CDSsub.First;
while not CDSsub.Eof do
begin
if CDSsub.FieldByName('fitemid').AsInteger=0 then
Break;
CDssub.Edit;
CDSsub.FieldByName('fresid').AsInteger:=inNumber;
CDssub.Post;
CDSsub.Next;
end;
if CDSsub.ChangeCount > 0 then
begin
applyupdata(CDSsub,subtable,keyfield);
CDSsub.MergeChangeLog;
end;
end;
procedure TfrmMDIbaseinfo.CDSmasterBeforeInsert(DataSet: TDataSet);
begin
inherited;
ClearCDSdata(CDSsub);
end;
procedure TfrmMDIbaseinfo.CDSmasterAfterScroll(DataSet: TDataSet);
var
resid:integer;
begin
inherited;
Resid:=CDSMaster.fieldbyname('fResid').AsInteger;
Getsqldata(CDSsub,subview,keyfield,'fresid='+vartosql(resid),20);
end;
procedure TfrmMDIbaseinfo.GridGetCellParams(Sender: TObject;
Column: TColumnEh; AFont: TFont; var Background: TColor;
State: TGridDrawState);
begin
inherited;
if Grid.SumList.RecNo mod 2=1 then
BackGround:=$00EAEFED
else
BackGround:=clWhite;
end;
procedure TfrmMDIbaseinfo.acmodifyExecute(Sender: TObject);
begin
inherited;
CDSmaster.Edit;
formmode:=1;
Innumber:=CDSmaster.fieldbyname('fResid').AsInteger;
controlEnabled;
billno.SetFocus;
end;
procedure TfrmMDIbaseinfo.acdeleteExecute(Sender: TObject);
Var
Cid:integer;
begin
inherited;
if CDSMaster.RecordCount > 0 then
if messagedlg('确认删除当前记录 ? ',mtConfirmation,[mbok,mbcancel],0)=mrok then
begin
inNumber:=CDSMaster.fieldbyname('fresid').AsInteger;
Cid:=CDSMaster.fieldbyname('fid').AsInteger;
if not execsql('Delete from '+Maintable+' where fresid='+inttostr(inNumber)) then
begin
messagedlg('删除主表出错 ! ',mtError,[mbok],0);
Exit;
end;
if not execsql('Delete from '+SubTable+' where fresid='+inttostr(inNumber)) then
begin
messagedlg('删除从表出错 ! ',mtError,[mbok],0);
Exit;
end;
GeteditData(CDSMaster,Maintable,keyField,Cid,20);
end;
end;
procedure TfrmMDIbaseinfo.acsearchExecute(Sender: TObject);
var
Child:Tform;
begin
inherited;
Searchtiao:='';
Child:=Searchfrm.Create(application);
Child.ShowModal;
if Searchtiao<>'' then
begin
Getsqldata(CDSmaster,maintable,keyfield,Searchtiao,20);
end;
end;
procedure TfrmMDIbaseinfo.aclineaddExecute(Sender: TObject);
begin
inherited;
CDSsub.Append;
end;
procedure TfrmMDIbaseinfo.aclinedeleteExecute(Sender: TObject);
begin
inherited;
CDSsub.Delete;
end;
procedure TfrmMDIbaseinfo.acprintExecute(Sender: TObject);
var
point:Tpoint;
begin
inherited;
point:=Getscreenpoint(SpeedButton1);
popupprint.Popup(point.X,point.Y);
end;
procedure TfrmMDIbaseinfo.p01Execute(Sender: TObject);
begin
inherited;
CDSsub.DisableControls;
frMD.LoadFromFile(frname);
frMD.ShowReport;
CDSsub.EnableControls;
end;
procedure TfrmMDIbaseinfo.p02Execute(Sender: TObject);
begin
inherited;
CDSsub.DisableControls;
frMD.LoadFromFile(frname);
frMD.PrepareReport;
frMD.PrintPreparedReport('',1,True,frAll);
CDSsub.EnableControls;
end;
procedure TfrmMDIbaseinfo.p03Execute(Sender: TObject);
begin
inherited;
CDSsub.DisableControls;
frMD.LoadFromFile(frname);
frMD.PrepareReport;
frMD.PrintPreparedReportDlg;
CDSsub.EnableControls;
end;
procedure TfrmMDIbaseinfo.p04Execute(Sender: TObject);
begin
inherited;
CDSsub.DisableControls;
frMD.LoadFromFile(frname);
frMD.DesignReport;
CDSsub.EnableControls;
end;
procedure TfrmMDIbaseinfo.frMDUserFunction(const Name: String; p1, p2,
p3: Variant; var Val: Variant);
begin
inherited;
if AnsiCompareText('XTOD',name)=0 then
Val:= syRMB(frParser.Calc(p1));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -