?? frmdeptmngimpl.pas
字號:
unit FrmDeptMngImpl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGridEh, ComCtrls, ToolWin, DB, ADODB, DBClient,
ActnList, ImgList, Provider, StdCtrls, Mask, DBCtrls, FrmMainImpl, Temp,
ExtCtrls, SUIForm;
type
TFrmDeptMng = class(TForm)
sfrMain: TsuiForm;
imgSt: TImage;
imlAction: TImageList;
dtsMain: TDataSource;
cdsMain: TClientDataSet;
cdsMainUNIT_ID: TWideStringField;
cdsMainNAME: TWideStringField;
cdsMainTEL: TWideStringField;
cdsMainFAX_NO: TWideStringField;
cdsMainREMARK: TWideStringField;
pvdMain: TDataSetProvider;
qryMain: TADOQuery;
conMain: TADOConnection;
lblUserID: TLabel;
lblName: TLabel;
lblTel: TLabel;
lblFaxNo: TLabel;
lblRemark: TLabel;
clbMain: TCoolBar;
tlbStandard: TToolBar;
btnNew: TToolButton;
btnSep1: TToolButton;
btnSave: TToolButton;
btnCancel: TToolButton;
btnSep2: TToolButton;
btnFirst: TToolButton;
btnPrior: TToolButton;
btnNext: TToolButton;
btnLast: TToolButton;
btnSep4: TToolButton;
btnDelete: TToolButton;
btnSep6: TToolButton;
btnClose: TToolButton;
grdMain: TDBGridEh;
edtUnitID: TDBEdit;
edtName: TDBEdit;
edtTel: TDBEdit;
edtFaxNo: TDBEdit;
edtRemark: TDBMemo;
atlAtions: TActionList;
actNew: TAction;
actSave: TAction;
actCancel: TAction;
actFirst: TAction;
actPrior: TAction;
actNext: TAction;
actLast: TAction;
actDelete: TAction;
actClose: TAction;
procedure FormCreate(Sender: TObject);
procedure actFirstExecute(Sender: TObject);
procedure actPriorExecute(Sender: TObject);
procedure actNextExecute(Sender: TObject);
procedure actLastExecute(Sender: TObject);
procedure actNewExecute(Sender: TObject);
procedure actSaveExecute(Sender: TObject);
procedure actCancelExecute(Sender: TObject);
procedure actDeleteExecute(Sender: TObject);
procedure actCloseExecute(Sender: TObject);
procedure cdsMainBeforeDelete(DataSet: TDataSet);
procedure cdsMainAfterOpen(DataSet: TDataSet);
procedure cdsMainAfterClose(DataSet: TDataSet);
procedure cdsMainAfterInsert(DataSet: TDataSet);
procedure cdsMainAfterScroll(DataSet: TDataSet);
procedure cdsMainAfterDelete(DataSet: TDataSet);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cdsMainBeforePost(DataSet: TDataSet);
procedure FormDestroy(Sender: TObject);
procedure dtsMainStateChange(Sender: TObject);
private
{ Private declarations }
protected
FStatus: Integer;
FModified: Boolean;
procedure ShowActionStatus; virtual;
function GetDeleteConfirmMessage(): string; virtual;
function GetDocCanModify(): Boolean; virtual;
function GetDocCanDelete(): Boolean; virtual;
function GetDocCanCancel(): Boolean; virtual;
public
property DocCanModify: Boolean read GetDocCanModify;
property DocCanDelete: Boolean read GetDocCanDelete;
property DocCanCancel: Boolean read GetDocCanCancel;
end;
var
FrmDeptMng: TFrmDeptMng;
implementation
{$R *.dfm}
procedure TFrmDeptMng.FormCreate(Sender: TObject);
begin
FStatus := STATUS_INACTIVE;
end;
procedure TFrmDeptMng.ShowActionStatus;
begin
if (FStatus = STATUS_BROWSE) and ((cdsMain.State = dsInsert) or (cdsMain.State = dsEdit)) then
FStatus := STATUS_EDIT;
case FStatus of
STATUS_INACTIVE:
begin
actNew.Enabled := False;
actSave.Enabled := False;
actCancel.Enabled := False;
actFirst.Enabled := False;
actPrior.Enabled := False;
actNext.Enabled := False;
actLast.Enabled := False;
actDelete.Enabled := False;
end;
STATUS_BROWSE:
begin
actNew.Enabled := True;
actSave.Enabled := False;
actCancel.Enabled := False;
actFirst.Enabled := dtsMain.DataSet.RecNo > 1;
actPrior.Enabled := actFirst.Enabled;
actNext.Enabled := (dtsMain.DataSet.RecordCount > 0)
and (dtsMain.DataSet.RecNo < dtsMain.DataSet.RecordCount);
actLast.Enabled := actNext.Enabled;
actDelete.Enabled := DocCanDelete;
(TClientDataSet(dtsMain.DataSet)).ReadOnly := False or (not DocCanModify) or
(dtsMain.DataSet.RecordCount = 0);
end;
STATUS_EDIT:
begin
actNew.Enabled := False;
actSave.Enabled := True;
actCancel.Enabled := True;
actFirst.Enabled := False;
actPrior.Enabled := False;
actNext.Enabled := False;
actLast.Enabled := False;
actDelete.Enabled := dtsMain.DataSet.RecNo > 0;
end;
end;
end;
procedure TFrmDeptMng.actFirstExecute(Sender: TObject);
begin
cdsMain.First();
ShowActionStatus();
end;
procedure TFrmDeptMng.actPriorExecute(Sender: TObject);
begin
cdsMain.Prior();
ShowActionStatus();
end;
procedure TFrmDeptMng.actNextExecute(Sender: TObject);
begin
cdsMain.Next();
ShowActionStatus();
end;
procedure TFrmDeptMng.actLastExecute(Sender: TObject);
begin
cdsMain.Last();
ShowActionStatus();
end;
procedure TFrmDeptMng.actNewExecute(Sender: TObject);
begin
(TClientDataSet(dtsMain.DataSet)).ReadOnly := False;
dtsMain.DataSet.Append;
FStatus := STATUS_EDIT;
FModified := True;
if (Visible) then
ShowActionStatus();
end;
procedure TFrmDeptMng.actSaveExecute(Sender: TObject);
begin
if (cdsMain.State = dsEdit) or (cdsMain.State = dsInsert) then
cdsMain.Post();
try
Screen.Cursor := crHourGlass;
if (cdsMain.ApplyUpdates(0) > 0) then
begin
ShowMessage('更新數(shù)據(jù)失敗。');
Abort;
end;
cdsMain.MergeChangeLog;
cdsMain.CancelUpdates;
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
Screen.Cursor := crDefault;
except
on E: Exception do
begin
Screen.Cursor := crDefault;
ShowMessage(E.Message);
end;
end;
end;
procedure TFrmDeptMng.actCancelExecute(Sender: TObject);
begin
(TClientDataSet(dtsMain.DataSet)).CancelUpdates();
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
end;
procedure TFrmDeptMng.actDeleteExecute(Sender: TObject);
var
boolReadOnly: Boolean;
begin
dtsMain.DataSet.Delete;
(TClientDataSet(dtsMain.DataSet)).ApplyUpdates(0);
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
end;
procedure TFrmDeptMng.actCloseExecute(Sender: TObject);
begin
Close();
end;
procedure TFrmDeptMng.cdsMainBeforeDelete(DataSet: TDataSet);
begin
if (Application.MessageBox(PChar(GetDeleteConfirmMessage()),
PChar(Caption), MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = ID_NO) then
Abort;
end;
function TFrmDeptMng.GetDeleteConfirmMessage: string;
begin
result := '您確定要刪除當(dāng)前記錄嗎?';
end;
procedure TFrmDeptMng.cdsMainAfterOpen(DataSet: TDataSet);
begin
FStatus := STATUS_BROWSE;
FModified := False;
dtsMain.AutoEdit := True;
ShowActionStatus();
end;
procedure TFrmDeptMng.cdsMainAfterClose(DataSet: TDataSet);
begin
FStatus := STATUS_INACTIVE;
FModified := False;
ShowActionStatus();
end;
procedure TFrmDeptMng.cdsMainAfterInsert(DataSet: TDataSet);
var
strTemp: string;
begin
if (GetNextNo(qryMain, 'T_SYS_UNIT', 'UNIT_ID', strTemp, 8)) then
DataSet.FieldByName('UNIT_ID').AsString := strTemp
else begin
ShowMessage('取部門ID時出錯!');
Abort;
end;
FStatus := STATUS_EDIT;
FModified := True;
ShowActionStatus();
end;
procedure TFrmDeptMng.cdsMainAfterScroll(DataSet: TDataSet);
begin
ShowActionStatus();
end;
procedure TFrmDeptMng.cdsMainAfterDelete(DataSet: TDataSet);
begin
FStatus := STATUS_BROWSE;
FModified := False;
ShowActionStatus();
end;
procedure TFrmDeptMng.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if (FModified) then
begin
case (Application.MessageBox(PChar('是否保存對當(dāng)前記錄的修改?'),
PChar(Caption), MB_YESNOCANCEL + MB_ICONQUESTION + MB_DEFBUTTON1)) of
ID_YES:
begin
actSave.Execute();
CanClose := True;
end;
ID_NO:
begin
CanClose := True
end;
else
begin
CanClose := False
end;
end;
end
else begin
CanClose := True;
end;
end;
procedure TFrmDeptMng.FormShow(Sender: TObject);
begin
conMain.Open;
cdsMain.Open;
ShowActionStatus();
end;
procedure TFrmDeptMng.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
conMain.Close;
except
end;
Action := caFree;
end;
procedure TFrmDeptMng.cdsMainBeforePost(DataSet: TDataSet);
var
objField: TField;
begin
objField := DataSet.FieldByName('NAME');
objField.AsString := Trim(objField.AsString);
if (objField.AsString = '') then
begin
ShowMessage('請輸入“名稱”!');
edtName.SetFocus;
Abort;
end;
end;
procedure TFrmDeptMng.FormDestroy(Sender: TObject);
begin
if (self = FrmDeptMng) then
FrmDeptMng := Nil;
end;
function TFrmDeptMng.GetDocCanCancel: Boolean;
begin
Result := True;
if ((dtsMain.DataSet = nil) or (dtsMain.DataSet.State = dsInactive) or
(dtsMain.DataSet.RecordCount = 0)) then
Result := False;
end;
function TFrmDeptMng.GetDocCanDelete: Boolean;
begin
Result := True;
if ((dtsMain.DataSet = nil) or (dtsMain.DataSet.State = dsInactive) or
(dtsMain.DataSet.RecordCount = 0)) then
Result := False;
end;
function TFrmDeptMng.GetDocCanModify: Boolean;
begin
Result := True;
if ((dtsMain.DataSet = nil) or (dtsMain.DataSet.State = dsInactive) or
(dtsMain.DataSet.RecordCount = 0)) then
Result := False;
end;
procedure TFrmDeptMng.dtsMainStateChange(Sender: TObject);
begin
if ((dtsMain.DataSet.State = dsEdit) and (FStatus <> STATUS_EDIT)) then
begin
FStatus := STATUS_EDIT;
FModified := True;
ShowActionStatus;
end;
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -