📄 jcamtablevieweditor.pas
字号:
(*===========================================================*)
(* *)
(* Jerk Computer Assembly Manager *)
(* *)
(* 程序作者:杨芹勍 *)
(* 武汉科技大学 理学院 信息与计算科学031班 *)
(* 武汉科技大学 莘特工作室 *)
(* *)
(* IDE:Borland Delphi 2006 Update 2 *)
(* 第三方控件:Raize 4.03 *)
(* 数据库:Microsoft SQL Server 2000 *)
(* 数据库访问引擎:原生ADO(ADODB_TLB) *)
(* 数据库管理引擎:JERK DBMANAGER ALPHA *)
(* *)
(* 此软件及源代码归 JERK SYSTEM 版权所有 *)
(* (C)Copyright 2002-2006 Jerk System. *)
(* *)
(*===========================================================*)
unit JCAMTableViewEditor;
interface
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
ImgList,
ExtCtrls,
RzPanel,
RzButton,
RzCmboBx,
ComCtrls,
ADODB_TLB,
RzListVw,
StdCtrls,
RzLabel,
RzEdit,
StrUtils,
TypInfo,
ActnList,
JSDBListView,
JSAutoComplete,
JCAMConsts,
JCAMUtils;
type
TfrmTableViewEditorForm = class( TForm )
tbrBtns: TRzToolbar;
btnAdd: TRzToolButton;
btnDelete: TRzToolButton;
btnEdit: TRzToolButton;
btnSave: TRzToolButton;
btnCancel: TRzToolButton;
RzSpacer1: TRzSpacer;
sbxInfoList: TScrollBox;
alTableViewEditor: TActionList;
actAdd: TAction;
actDelete: TAction;
actEdit: TAction;
actSave: TAction;
actCancel: TAction;
procedure FormCreate( Sender: TObject );
procedure pDVWColumnClick( Sender: TObject; Column: TListColumn );
procedure pDVWDataStateChange( Sender: TObject;
StartIndex, EndIndex: Integer; OldState, NewState: TItemStates );
procedure pDVWSelectItem( Sender: TObject;
Item: TListItem; Selected: Boolean );
procedure pDVWInfoTip( Sender: TObject; Item: TListItem; var InfoTip:
string );
procedure pBTNClick( Sender: TObject );
procedure pBTEChange( Sender: TObject );
procedure pEDTEnter( Sender: TObject );
procedure pEDTExit( Sender: TObject );
procedure pEDTChange( Sender: TObject );
procedure pCBODropDown( Sender: TObject );
procedure sbxInfoListResize( Sender: TObject );
procedure actAddExecute( Sender: TObject );
procedure actDeleteExecute( Sender: TObject );
procedure actEditExecute( Sender: TObject );
procedure actSaveExecute( Sender: TObject );
procedure actCancelExecute( Sender: TObject );
private
m_acEditor: TJSAutoComplete;
m_eOldDVWColumnClick: TLVColumnClickEvent;
m_eOldDVWDataStateChange: TLVOwnerDataStateChangeEvent;
m_eOldDVWSelectItem: TLVSelectItemEvent;
m_eBtnAddClick: TNotifyEvent;
m_eBtnDeleteClick: TNotifyEvent;
m_eBtnEditClick: TNotifyEvent;
m_eBtnSaveClick: TNotifyEvent;
m_eBtnCancelClick: TNotifyEvent;
m_cn: _Connection;
m_lvwDBList: TJSDBListView;
m_nColumnSortIdx: Integer;
m_nCurrentIdx: Integer;
m_bColumnSortAscend: Boolean;
m_bShowSpecial: Boolean;
m_bSpecialEnabled: Boolean;
m_bSaveCheckNull: Boolean;
m_bSaveCheckRepeated: Boolean;
m_bInfoAdding: Boolean;
m_bBtnAddEnabled: Boolean;
m_bBtnDeleteEnabled: Boolean;
m_bBtnEditEnabled: Boolean;
m_bBtnSaveEnabled: Boolean;
m_bBtnCancelEnabled: Boolean;
m_bShowListItemInfoHint: Boolean;
m_bShowKeyField: Boolean;
m_bUserCanModfy: Boolean;
m_sTableViewName: string;
m_sKeyFieldName: string;
m_sSaveInfoProcName: string;
m_sDeleteInfoProcName: string;
m_sLoadCondition: string;
procedure pDVWSelectNone;
procedure pColumnSort( const nColumnIdx: Integer );
procedure pFillInfoByItemIndex( const nItemIndex: Integer );
procedure pFillInfoByKeyFieldID( const nKeyFieldID: Integer );
procedure pFillListView( const bClearColumnHeader: Boolean = True );
procedure pInitInfoPanel( const bClearComponents: Boolean = True );
procedure pInitEditButtonEnabled;
procedure pDestroyComponents;
procedure SetDBListView( const Value: TJSDBListView );
procedure SetTableViewName( const Value: string );
procedure SetConnection( const Value: _Connection );
procedure SetKeyFieldName( const Value: string );
procedure SetSaveCheckNull( const Value: Boolean );
procedure SetSaveCheckRepeated( const Value: Boolean );
procedure SetShowSpecial( const Value: Boolean );
procedure SetSpecialEnabled( const Value: Boolean );
procedure SetLoadCondition( const Value: string );
procedure SetOnButtonAddClick( const Value: TNotifyEvent );
procedure SetOnButtonCancelClick( const Value: TNotifyEvent );
procedure SetOnButtonDeleteClick( const Value: TNotifyEvent );
procedure SetOnButtonEditClick( const Value: TNotifyEvent );
procedure SetOnButtonSaveClick( const Value: TNotifyEvent );
procedure SetShowListItemInfoHint( const Value: Boolean );
procedure SetSaveInfoProcName( const Value: string );
procedure SetShowKeyField( const Value: Boolean );
procedure SetDeleteInfoProcName( const Value: string );
public
procedure InfoMultiSelected;
procedure FillAllEditString( const sFillStr: string = '' );
procedure BlankAllEdit;
procedure SetAllEditReadOnly( const bReadOnly: Boolean );
procedure BlankAllInfoList;
procedure StartSurf( const bClearAll: Boolean = True );
procedure CheckBtnVisible;
property Connection: _Connection
read m_cn
write SetConnection;
property LoadCondition: string
read m_sLoadCondition
write SetLoadCondition;
property ButtonAdd: TRzToolButton
read btnAdd
write btnAdd;
property ButtonDelete: TRzToolButton
read btnDelete
write btnDelete;
property ButtonEdit: TRzToolButton
read btnEdit
write btnEdit;
property ButtonSave: TRzToolButton
read btnSave
write btnSave;
property ButtonCancel: TRzToolButton
read btnCancel
write btnCancel;
property ActionAdd: TAction
read actAdd
write actAdd;
property ActionDelete: TAction
read actDelete
write actDelete;
property ActionEdit: TAction
read actEdit
write actEdit;
property ActionSave: TAction
read actSave
write actSave;
property ActionCancel: TAction
read actCancel
write actCancel;
property ScrollBox: TScrollBox
read sbxInfoList
write sbxInfoList;
property ToolBar: TRzToolbar
read tbrBtns
write tbrBtns;
property DBListView: TJSDBListView
read m_lvwDBList
write SetDBListView;
property TableViewName: string
read m_sTableViewName
write SetTableViewName;
property KeyFieldName: string
read m_sKeyFieldName
write SetKeyFieldName;
property ShowSpecial: Boolean
read m_bShowSpecial
write SetShowSpecial;
property SpecialEnabled: Boolean
read m_bSpecialEnabled
write SetSpecialEnabled;
property SaveCheckNull: Boolean
read m_bSaveCheckNull
write SetSaveCheckNull;
property SaveCheckRepeated: Boolean
read m_bSaveCheckRepeated
write SetSaveCheckRepeated;
property OnButtonAddClick: TNotifyEvent
read m_eBtnAddClick
write SetOnButtonAddClick;
property OnButtonSaveClick: TNotifyEvent
read m_eBtnSaveClick
write SetOnButtonSaveClick;
property OnButtonDeleteClick: TNotifyEvent
read m_eBtnDeleteClick
write SetOnButtonDeleteClick;
property OnButtonEditClick: TNotifyEvent
read m_eBtnEditClick
write SetOnButtonEditClick;
property OnButtonCancelClick: TNotifyEvent
read m_eBtnCancelClick
write SetOnButtonCancelClick;
property ShowListItemInfoHint: Boolean
read m_bShowListItemInfoHint
write SetShowListItemInfoHint
default True;
property SaveInfoProcName: string
read m_sSaveInfoProcName
write SetSaveInfoProcName;
property DeleteInfoProcName: string
read m_sDeleteInfoProcName
write SetDeleteInfoProcName;
property ShowKeyField: Boolean
read m_bShowKeyField
write SetShowKeyField
default False;
property UserCanModify: Boolean
read m_bUserCanModfy;
end;
var
frmTableViewEditorForm: TfrmTableViewEditorForm;
implementation
uses
untFieldValuesList,
untTField,
untTViewParent,
untTEmployee,
untMain,
JCAMManagerForm;
{$R *.dfm}
{ TfrmTableViewEditorForm }
procedure TfrmTableViewEditorForm.BlankAllInfoList;
begin
if DBListView <> nil then
begin
DBListView.Items.Count := 0;
DBListView.CloseRecordset;
end;
BlankAllEdit;
end;
procedure TfrmTableViewEditorForm.FormCreate( Sender: TObject );
begin
m_nColumnSortIdx := -1;
m_nCurrentIdx := -1;
m_bColumnSortAscend := False;
m_bInfoAdding := False;
m_bBtnAddEnabled := True;
m_bBtnDeleteEnabled := True;
m_bBtnEditEnabled := False;
m_bBtnSaveEnabled := False;
m_bBtnCancelEnabled := False;
m_bShowListItemInfoHint := True;
DBListView := nil;
Connection := nil;
TableViewName := EmptyStr;
LoadCondition := EmptyStr;
ShowSpecial := True;
SpecialEnabled := False;
SaveCheckNull := True;
SaveCheckRepeated := True;
ShowKeyField := False;
end;
procedure TfrmTableViewEditorForm.actAddExecute( Sender: TObject );
begin
{ 添加信息 }
if DBListView <> nil then
begin
BlankAllEdit;
m_bInfoAdding := True;
actEdit.Execute;
end;
// TODO: 处理外部的事件过程
if Assigned( OnButtonAddClick ) then
OnButtonAddClick( Sender );
end;
procedure TfrmTableViewEditorForm.actCancelExecute( Sender: TObject );
begin
{ 选择了取消按钮 }
if DBListView <> nil then
begin
if m_nCurrentIdx <> -1 then
pFillInfoByKeyFieldID( m_nCurrentIdx );
// TODO: 设置按钮状态
SetAllEditReadOnly( True );
m_bInfoAdding := False;
ActionAdd.Enabled := m_bBtnAddEnabled and UserCanModify;
ActionDelete.Enabled := m_bBtnDeleteEnabled and UserCanModify;
ActionEdit.Enabled := m_bBtnEditEnabled and UserCanModify;
ActionSave.Enabled := m_bBtnSaveEnabled and UserCanModify;
ActionCancel.Enabled := m_bBtnCancelEnabled and UserCanModify;
DBListView.Enabled := True;
DBListView.SetFocus;
end;
// TODO: 处理外部的事件过程
if Assigned( OnButtonCancelClick ) then
OnButtonCancelClick( Sender );
end;
procedure TfrmTableViewEditorForm.actDeleteExecute( Sender: TObject );
var
cmd: _Command;
par: _Parameter;
li: TListItem;
nDeleteSuccess, nMsgReturn: Integer;
begin
{ 信息删除 }
if ( DBListView <> nil ) and
( DBListView.SelCount > 0 ) and
( DeleteInfoProcName <> EmptyStr ) then
with DBListView do
begin
nMsgReturn := MessageBox( Self.Handle, PChar( Format(
RSTR_MANAGER_INFODELETE_AFFIRM, [ IntToStr( DBListView.SelCount ) ] ) ),
PChar( STR_APPTITLE ), MB_ICONQUESTION + MB_YESNO );
if nMsgReturn = IDYES then
begin
Screen.Cursor := crHourGlass;
cmd := CoCommand.Create;
cmd.CommandText := DeleteInfoProcName;
cmd.CommandType := adCmdStoredProc;
cmd.Set_ActiveConnection( Self.Connection );
// TODO: 添加变量
par := cmd.CreateParameter
( PVSTR_RETURN, adBoolean, adParamReturnValue, 1, EmptyParam );
cmd.Parameters.Append( par );
par := cmd.CreateParameter
( KeyFieldName, adVarChar, adParamInput, 100, EmptyStr );
cmd.Parameters.Append( par );
// TODO: 开始删除
nDeleteSuccess := 0;
li := nil;
repeat
li := DBListView.GetNextItem( li, sdAll, [ isSelected ] );
if li <> nil then
begin
cmd.Parameters[ KeyFieldName ].Value := ItemKeyFieldValue( li.Index
);
cmd.Execute( EmptyParam, EmptyParam, adCmdStoredProc +
adExecuteNoRecords );
if cmd.Parameters[ PVSTR_RETURN ].Value > 0 then
Inc( nDeleteSuccess );
end;
until li = nil;
if nDeleteSuccess > 0 then
begin
StartFillData( False );
m_nCurrentIdx := -1;
pDVWSelectNone;
MessageBox( Self.Handle, PChar( Format(
RSTR_MANAGER_INFODELETE_SUCCESS, [ IntToStr( nDeleteSuccess ) ] ) ),
PChar( STR_APPTITLE ), MB_ICONEXCLAMATION );
end;
cmd := nil;
par := nil;
Screen.Cursor := crDefault;
end;
end;
// TODO: 处理外部的事件过程
if Assigned( OnButtonDeleteClick ) then
OnButtonDeleteClick( Sender );
end;
procedure TfrmTableViewEditorForm.actEditExecute( Sender: TObject );
var
cmp: TComponent;
n: Integer;
begin
{ 信息编辑 }
if DBListView <> nil then
begin
DBListView.Enabled := False;
SetAllEditReadOnly( False );
// TODO: 使第一个编辑框控件设置焦点
for n := 0 to sbxInfoList.ComponentCount - 1 do
begin
cmp := sbxInfoList.Components[ n ];
if ( ( cmp is TCustomEdit ) or ( cmp is TCustomComboBox ) ) and (
TControl( cmp ).Enabled ) then
begin
TWinControl( cmp ).SetFocus;
Break;
end;
end;
// TODO: 设置按钮状态
m_bBtnAddEnabled := ActionAdd.Enabled;
m_bBtnDeleteEnabled := ActionDelete.Enabled;
m_bBtnEditEnabled := ActionEdit.Enabled;
m_bBtnSaveEnabled := ActionSave.Enabled;
m_bBtnCancelEnabled := ActionCancel.Enabled;
ActionAdd.Enabled := False;
ActionDelete.Enabled := False;
ActionEdit.Enabled := False;
ActionSave.Enabled := True and UserCanModify;
ActionCancel.Enabled := True and UserCanModify;
end;
// TODO: 处理外部的事件过程
if Assigned( OnButtonEditClick ) then
OnButtonEditClick( Sender );
end;
procedure TfrmTableViewEditorForm.actSaveExecute( Sender: TObject );
var
tf: TTableField;
cmd: _Command;
par: _Parameter;
cmp, cmpCheckField: TComponent;
pfp: PFieldProp;
li: TListItem;
varFieldValue: Variant;
sFieldName, sFieldValue, sFieldChs: string;
n, nCheckField, nOutKeyFieldValue: Integer;
bProcResult: Boolean;
begin
{ 保存信息 }
if SaveInfoProcName <> EmptyStr then
begin
Screen.Cursor := crHourGlass;
tf := TTableField.Create;
tf.Connection := Self.Connection;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -