?? pobject_base.pas
字號:
unit pobject_base;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, StdCtrls, Buttons, ExtCtrls,Wwquery, Wwdatsrc, ImgList,
ComCtrls, ToolWin, DBTables, DB, Mask, wwdbedit, Wwdotdot, Wwdbcomb,inifiles;
type
Tobject_base = class(TForm)
Dts_Master: TwwDataSource;
Data_Master: TwwQuery;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
Btn_Append: TToolButton;
ImageList1: TImageList;
Btn_Save: TToolButton;
Btn_modify: TToolButton;
Btn_Delete: TToolButton;
Btn_Find: TToolButton;
Btn_copy: TToolButton;
Btn_Cancel: TToolButton;
Btn_Refresh: TToolButton;
Dbn_master: TDBNavigator;
Btn_Print: TToolButton;
Btn_check: TToolButton;
Btn_audit: TToolButton;
Btn_end: TToolButton;
Btn_quit: TToolButton;
Btn_help: TToolButton;
Upd_master: TUpdateSQL;
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure EditEnter(Sender: TObject);
procedure EditExit(Sender:Tobject);
procedure EditKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Btn_quitClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Btn_AppendClick(Sender: TObject);
procedure Btn_DeleteClick(Sender: TObject);
procedure Btn_SaveClick(Sender: TObject);
procedure Btn_CancelClick(Sender: TObject);
procedure Btn_FindClick(Sender: TObject);
procedure Btn_PrintClick(Sender: TObject);
procedure Btn_auditClick(Sender: TObject);
procedure Btn_endClick(Sender: TObject);
procedure Btn_checkClick(Sender: TObject);
procedure Btn_copyClick(Sender: TObject);
procedure Btn_modifyClick(Sender: TObject);
procedure Btn_RefreshClick(Sender: TObject);
procedure Data_MasterAfterScroll(DataSet: TDataSet);
procedure Data_MasterBeforeEdit(DataSet: TDataSet);
procedure Data_MasterAfterOpen(DataSet: TDataSet);
procedure Btn_helpClick(Sender: TObject);
private
{ Private declarations }
inifile:tinifile; //vmaoedit;20021118
procedure DisplayHint(Sender :Tobject);
{ Public declarations }
MAXTABORDER :smallint;
savedData:boolean;
BtnTyp:string;
procedure deletedata;virtual;abstract;
procedure savedata;virtual;abstract;
procedure append_button; //新增狀態的BUTTON
procedure Edit_button; //編輯狀態的BUTTON
procedure norecord_button; //無記錄狀態
procedure record_button; //有記錄狀態
procedure brow_button; //瀏覽狀態的BUTTON
end;
var
object_base: Tobject_base;
implementation
uses Pdlgloading, main, pdatabse,htmlhlp;
{$R *.dfm}
procedure Tobject_base.FormCreate(Sender: TObject);
var w,h:integer;
begin
//讀窗體配置文件
if self.BorderStyle=bsSizeToolWin then
begin
inifile:=tinifile.Create(extractfilepath(application.exename)+'\ini\form.ini');
//窗體
w:=inifile.ReadInteger(self.Name,'width',0);
if w>0 then self.Width:=w;
h:=inifile.ReadInteger(self.Name,'height',0);
if h>0 then self.Height:=h;
//panel
w:=inifile.ReadInteger(self.Name,'panleftw',0);
if w>0 then tpanel(self.FindComponent('panleft')).Width:=w;
h:=inifile.ReadInteger(self.Name,'panlefth',0);
if h>0 then tpanel(self.FindComponent('panleft')).Height:=h;
//在close中寫配置和釋放文件;
end;
MAXTABORDER:=30;
with Dlgloading.progress do Position:=Position+Step;
with Dlgloading.Progress do position:=position+step;
end;
procedure Tobject_base.FormActivate(Sender: TObject);
begin
Application.OnHint :=DisplayHint;
end;
procedure Tobject_base.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if btn_save.Enabled then
if Application.MessageBox('資料沒有存盤,是否退出?', '返回', MB_OKCANCEL + MB_DEFBUTTON1+ MB_ICONWARNING) = IDCANCEL then Abort;
//寫窗體配置文件
if self.BorderStyle=bsSizeToolWin then
begin
//窗體
inifile.writeInteger(self.Name,'width',self.Width);
inifile.writeInteger(self.Name,'height',self.Height);
//panel
inifile.writeInteger(self.Name,'panleftw',tpanel(self.FindComponent('panleft')).Width);
inifile.writeInteger(self.Name,'panlefth',tpanel(self.FindComponent('panleft')).Height);
//在close中寫配置和釋放文件;
inifile.Free;
end;
Application.OnHint :=nil;
Action:=Cafree;
// self:=nil;
end;
procedure Tobject_base.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
key:=#0;
if ActiveControl <> nil then
if ActiveControl.TabOrder<MAXTABORDER then
selectnext(Activecontrol,True,True)
else
end;
end;
procedure Tobject_base.DisplayHint(Sender:Tobject);
begin
mainform.StatusBar1.Panels[1].text:=Application.Hint;
end;
procedure Tobject_base.EditEnter(Sender: TObject);
begin
TDBEdit(Sender).Color :=clyellow;
TwwDBEdit(Sender).Color :=clyellow;
TwwDBComboBox(Sender).Color :=clyellow;
mainform.StatusBar1.Panels[1].Text := Copy(Hint, Pos('|', Hint) + 1, Length(Hint));
end;
procedure Tobject_base.EditExit(Sender:Tobject);
begin
TDBEdit(Sender).Color :=clwindow;
TwwDBEdit(Sender).Color :=clwindow;
TwwDBComboBox(Sender).Color :=clwindow;
mainform.StatusBar1.Panels[1].Text := '';
end;
procedure Tobject_base.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_ESCAPE then Key:=0;
case Key of
VK_DOWN:
begin
Key := 0;
if ActiveControl<>nil then
if TWinControl(ActiveControl).TabOrder < MAXTABORDER then
end;
VK_UP:
begin
Key := 0;
if ActiveControl<>nil then
if TWinControl(ActiveControl).TabOrder <> 0 then
SelectNext(ActiveControl, False, True);
end;
end;
end;
procedure Tobject_base.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_DOWN:
begin
Key := 0;
if ActiveControl<>nil then
if TWinControl(ActiveControl).TabOrder < MAXTABORDER then
SelectNext(ActiveControl, True, True);
end;
VK_UP:
begin
Key := 0;
if ActiveControl<>nil then
if TWinControl(ActiveControl).TabOrder <> 0 then
SelectNext(ActiveControl, False, True);
end;
end;
end;
procedure Tobject_base.Btn_quitClick(Sender: TObject);
begin
close;
end;
procedure Tobject_base.FormShow(Sender: TObject);
begin
dlgloading.close;
dlgloading.free;
end;
procedure Tobject_base.Btn_AppendClick(Sender: TObject);
begin
BtnTyp:='Append';
mainform.Statusbar1.Panels[0].text:='資料新增';
Data_Master.Append;
append_button;
end;
procedure Tobject_base.Btn_DeleteClick(Sender: TObject);
begin
BtnTyp:='Delete';
mainform.Statusbar1.Panels[0].text:='資料刪除';
if not Data_Master.IsEmpty then
begin
if Application.MessageBox('是否確認刪除該記錄?','警告',MB_YESNO or MB_ICONWARNING)=IDYES then
begin
Try
datamoduledb.DatabaseAcct.StartTransaction;
deletedata;
data_master.ApplyUpdates; //提交緩存;清除緩存;
data_master.CommitUpdates;
datamoduledb.DatabaseAcct.Commit;
BtnTyp:='';
if data_master.IsEmpty then norecord_button
else brow_button;
except
datamoduledb.DatabaseAcct.Rollback;
data_master.CancelUpdates;
if data_master.IsEmpty then norecord_button
else brow_button;
end;
end;
end;
end;
procedure Tobject_base.Btn_SaveClick(Sender: TObject);
begin
mainform.StatusBar1.Panels[0].Text:='存盤';
Screen.Cursor := crHourglass;
try
datamoduledb.DatabaseAcct.StartTransaction;
savedata;
data_master.ApplyUpdates; //提交緩存;清除緩存;
data_master.CommitUpdates;
datamoduledb.DatabaseAcct.Commit;
BtnTyp:='';
brow_button;
//Data_MasterAfterScroll(Data_master); //用來刷新按鈕
except
Screen.Cursor := crDefault;
// data_master.CancelUpdates; 出錯不因該回滾當前記錄!而且在有主明細的情況下是錯誤的!
datamoduledb.DatabaseAcct.Rollback;
end;
Screen.Cursor := crDefault;
end;
procedure Tobject_base.Btn_CancelClick(Sender: TObject);
begin
mainform.StatusBar1.Panels[0].Text:='放棄所有異動';
Data_Master.CancelUpdates;
BtnTyp:='Abort';
if data_master.IsEmpty then norecord_button
else brow_button;
dbn_master.Enabled:=true;
end;
procedure Tobject_base.Btn_FindClick(Sender: TObject);
begin
BtnTyp:='Find';
mainform.Statusbar1.Panels[0].text:='資料查詢';
end;
procedure Tobject_base.Btn_PrintClick(Sender: TObject);
begin
BtnTyp:='Print';
mainform.Statusbar1.Panels[0].text:='資料列印';
end;
procedure Tobject_base.Btn_auditClick(Sender: TObject);
begin
BtnTyp:='Audit';
mainform.Statusbar1.Panels[0].text:='核準';
end;
procedure Tobject_base.Btn_endClick(Sender: TObject);
begin
BtnTyp:='End';
mainform.Statusbar1.Panels[0].text:='結案';
end;
procedure Tobject_base.Btn_checkClick(Sender: TObject);
begin
BtnTyp:='Check';
mainform.Statusbar1.Panels[0].text:='計算';
end;
procedure Tobject_base.Btn_copyClick(Sender: TObject);
begin
BtnTyp:='Copy';
mainform.Statusbar1.Panels[0].text:='復制';
end;
procedure Tobject_base.Btn_modifyClick(Sender: TObject);
begin
BtnTyp:='Modify';
mainform.Statusbar1.Panels[0].text:='修改';
Data_Master.Edit;
Append_button;
end;
procedure Tobject_base.Btn_RefreshClick(Sender: TObject);
begin
BtnTyp:='Refresh';
mainform.Statusbar1.Panels[0].text:='刷新';
try
Data_Master.Close;
Data_Master.Open;
except
end;
end;
procedure Tobject_base.append_button; //新增狀態的BUTTON
begin
Btn_append.Enabled:=False;
Btn_Save.Enabled:=True;
Btn_Modify.Enabled:=False;
Btn_delete.Enabled:=False;
Btn_Find.Enabled:=False;
Btn_copy.Enabled:=False;
Btn_cancel.Enabled:=True;
Btn_print.Enabled:=False;
Btn_Refresh.Enabled:=False;
Btn_check.Enabled:=False;
Btn_audit.Enabled:=False;
Btn_end.Enabled:=False;
dbn_master.Enabled:=false;
end;
procedure Tobject_base.norecord_button; //無記錄狀態
begin
if pu_qx='A' then Btn_append.Enabled:=True else btn_append.Enabled:=false;
Btn_Save.Enabled:=False;
Btn_delete.Enabled:=False;
Btn_Modify.Enabled:=False;
Btn_cancel.Enabled:=False;
Btn_print.Enabled:=False;
Btn_Find.Enabled:=True;
Btn_copy.Enabled:=False;
Btn_Refresh.Enabled:=False;
Btn_check.Enabled:=False;
Btn_audit.Enabled:=False;
Btn_end.Enabled:=False;
end;
procedure Tobject_base.record_button; //有記錄
begin
if pu_qx='A' then Btn_append.Enabled:=True else btn_append.Enabled:=false;
if pu_qx='A' then Btn_copy.Enabled:=True else btn_copy.Enabled:=false;
if pu_qx='A' then Btn_delete.Enabled:=true else btn_delete.Enabled:=false;
Btn_Cancel.Enabled:=false; //有記錄的時候不能還原!
if pu_qx='A' then Btn_Modify.Enabled:=true else btn_modify.Enabled:=false;
Btn_print.Enabled:=True;
Btn_check.Caption:='計算';
if pu_qx='A' then Btn_check.Enabled:=true else btn_check.Enabled:=false;
Btn_audit.Caption:='核準';
if pu_qx='A' then Btn_audit.Enabled:=true else btn_audit.Enabled:=false;
Btn_end.Caption:='結案';
if pu_qx='A' then Btn_end.Enabled:=true else btn_end.Enabled:=false;
dbn_master.Enabled:=True;
end;
procedure Tobject_base.edit_button;
begin
if data_master.isempty and (btntyp<>'Append') then abort;
Append_button;
end;
procedure Tobject_base.Data_MasterAfterScroll(DataSet: TDataSet);
begin
if BtnTyp='Append' then append_button //如果新增
else
begin
if data_master.IsEmpty then norecord_button //如果無記錄
else record_button;
end;
end;
procedure Tobject_base.Data_MasterBeforeEdit(DataSet: TDataSet);
begin
edit_button;
end;
procedure Tobject_base.Data_MasterAfterOpen(DataSet: TDataSet);
begin
//如果一打開為空,也要執行一遍Data_MasterAfterScroll 設定BUTTON狀態
if data_master.IsEmpty then norecord_button
else brow_button;
end;
procedure Tobject_base.Btn_helpClick(Sender: TObject);
begin
htmlhelp(self.Handle,pchar(extractfilepath(application.ExeName)+'\help\uesoft_help.chm ::/'+self.name+'.htm'),HH_DISPLAY_TOPIC,0);
end;
procedure Tobject_base.brow_button;
begin
if pu_qx='A' then Btn_append.Enabled:=True else btn_append.Enabled:=false;
Btn_Save.Enabled:=False;
if pu_qx='A' then Btn_delete.Enabled:=True else btn_append.Enabled:=false;
if pu_qx='A' then Btn_Modify.Enabled:=True else btn_append.Enabled:=false;
Btn_cancel.Enabled:=False;
Btn_print.Enabled:=True;
Btn_Find.Enabled:=True;
if pu_qx='A' then Btn_copy.Enabled:=True else btn_copy.Enabled:=false;
Btn_Refresh.Enabled:=true;
if pu_qx='A' then Btn_check.Enabled:=True else btn_check.Enabled:=false;
if pu_qx='A' then Btn_audit.Enabled:=True else btn_audit.Enabled:=false;
if pu_qx='A' then Btn_end.Enabled:=True else btn_end.Enabled:=false;
dbn_master.Enabled:=True;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -