📄 baseaccountvoucher.pas
字号:
unit BaseAccountVoucher;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
BaseForm, ImgList, ExtCtrls, DBData,
dxBar, dxBarExtItems, Menus, KsSkinForms,
KsSkinPanels, dxExEdtr, dxEdLib, dxDBELib, Variants,
KsSkinLabels, dxCntner, dxEditor, dxTL, sncCurrency, dxTLClms, dxDBCtrl,
dxDBGrid, DB, ADODB, dxDBTLCl, dxGrClms, sncDBCurrency, Grids, DBGrids,
StdCtrls, se_controls;
type
TfrmBaseAccountVoucher = class(TfrmBaseForm)
dxBarManager1: TdxBarManager;
bbAdd: TdxBarLargeButton;
bbEdit: TdxBarLargeButton;
bbDel: TdxBarLargeButton;
bbType: TdxBarLargeButton;
bbPrint: TdxBarLargeButton;
bbExit: TdxBarLargeButton;
PopupMenu1: TdxBarPopupMenu;
pbbPrint: TdxBarButton;
pbbPrintView: TdxBarButton;
pbbPrintCustom: TdxBarButton;
pbbPrintInit: TdxBarButton;
bbFind: TdxBarLargeButton;
bbDate: TdxBarLargeButton;
SeSkinLabel1: TSeSkinLabel;
SeSkinLabel4: TSeSkinLabel;
SeSkinLabel5: TSeSkinLabel;
SeSkinLabel6: TSeSkinLabel;
lblBillDate: TSeSkinLabel;
lblUserCode: TSeSkinLabel;
SeSkinLabel2: TSeSkinLabel;
SeSkinLabel3: TSeSkinLabel;
lblMemo: TSeSkinLabel;
dxBarLargeButton1: TdxBarLargeButton;
dxBarLargeButton2: TdxBarLargeButton;
dxBarLargeButton3: TdxBarLargeButton;
bbSave: TdxBarLargeButton;
bbIns: TdxBarLargeButton;
bbDelRow: TdxBarLargeButton;
dxBarLargeButton7: TdxBarLargeButton;
CurrencyEdit: TsncDBCurrencyEdit;
CurrencyLabel1: TsncCurrencyLabel;
CurrencyLabel2: TsncCurrencyLabel;
dsMaster: TDataSource;
ADOSetMaster: TADODataSet;
dsList: TDataSource;
ADOSetList: TADODataSet;
edtUserCode: TdxDBEdit;
edtAccessory: TdxDBEdit;
edtMemo: TdxDBEdit;
edtDate: TdxDBDateEdit;
gridMain: TdxDBGrid;
gridMainSummary: TdxDBGridButtonColumn;
gridMainSubjectName: TdxDBGridButtonColumn;
gridMainDebitTotal: TdxDBGridMaskColumn;
gridMainLenderTotal: TdxDBGridMaskColumn;
edtE1: TdxEdit;
dxEdit1: TdxEdit;
dxEdit2: TdxEdit;
GridPopMenu: TdxBarPopupMenu;
procedure bbExitClick(Sender: TObject);
procedure pbbPrintClick(Sender: TObject);
procedure pbbPrintViewClick(Sender: TObject);
procedure pbbPrintCustomClick(Sender: TObject);
procedure pbbPrintInitClick(Sender: TObject);
procedure bbPrintClick(Sender: TObject);
procedure gridMainCustomDrawCell(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean; var AText: string;
var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
var ADone: Boolean);
procedure gridMainChangeColumn(Sender: TObject; Node: TdxTreeListNode;
Column: Integer);
procedure CurrencyEditMoveOut(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure gridMainCustomDrawBand(Sender: TObject;
ABand: TdxTreeListBand; ACanvas: TCanvas; ARect: TRect;
var AText: string; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
procedure bbInsClick(Sender: TObject);
procedure bbDelRowClick(Sender: TObject);
procedure dxBarLargeButton7Click(Sender: TObject);
procedure gridMainChangedColumnsWidth(Sender: TObject);
procedure CurrencyEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure gridMainKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormShow(Sender: TObject);
procedure gridMainKeyPress(Sender: TObject; var Key: Char);
procedure ADOSetListRecordChangeComplete(DataSet: TCustomADODataSet;
const Reason: TEventReason; const RecordCount: Integer;
const Error: Error; var EventStatus: TEventStatus);
procedure edtDateKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure gridMainMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure gridMainCustomDraw(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn;
const AText: string; AFont: TFont; var AColor: TColor; ASelected,
AFocused: Boolean; var ADone: Boolean);
private
{ Private declarations }
bReturn: Boolean;
function ShowCurrecyEdit(ARect: TRect): boolean;
function DrawCurrencyEdit(ACanvas: TCanvas; ARect: TRect; AText: string):
Boolean;
function CheckCurrencyField(FieldName: string): Boolean;
procedure GridDrawSummaryFooter(Sender: TObject; ACanvas: TCanvas; ARect:
TRect;
var AText: string; var AAlignment: TAlignment; AFont: TFont; var AColor:
TColor;
var ADone: Boolean);
procedure LoadGrid;
procedure LoadData;
function ChangeCells: Boolean;
public
{ Public declarations }
protected
lSumRow: Integer;
bDrawFullGrid: Boolean;
function SetCurrecyLable: Boolean;
procedure BaseMainShow;
end;
const
CurrencyCol: array[0..1] of string = ('DebitTotal', 'LenderTotal');
function BaseAccountVoucherShow: Boolean;
implementation
uses SysPublic;
{$R *.DFM}
function BaseAccountVoucherShow: Boolean;
var
frmBaseAccountVoucher: TfrmBaseAccountVoucher;
begin
frmBaseAccountVoucher := TfrmBaseAccountVoucher.Create(Application);
with frmBaseAccountVoucher do
begin
BaseMainShow;
Result := bReturn;
Free;
end;
end;
function TfrmBaseAccountVoucher.CheckCurrencyField(FieldName: string): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to Length(CurrencyCol) - 1 do
begin
if (FieldName = CurrencyCol[I]) then
begin
Result := True;
Break;
end;
end;
end;
procedure TfrmBaseAccountVoucher.BaseMainShow;
begin
LoadGrid;
LoadData;
end;
procedure TfrmBaseAccountVoucher.LoadGrid;
begin
bReturn := false;
lSumRow := -1;
Caption := '记财凭证';
CurrencyEdit.Parent := gridMain;
gridMainDebitTotal.OnDrawSummaryFooter := GridDrawSummaryFooter;
gridMainLenderTotal.OnDrawSummaryFooter := GridDrawSummaryFooter;
end;
function TfrmBaseAccountVoucher.SetCurrecyLable: Boolean;
begin
CurrencyLabel1.Parent := gridMain;
CurrencyLabel2.Parent := gridMain;
with gridMain do
begin
Bands[0].Width := Columns[0].Width;
Bands[1].Width := Columns[1].Width;
Bands[2].Width := Columns[2].Width;
Bands[3].Width := Columns[3].Width;
CurrencyLabel1.Left := Bands[0].Width + Bands[1].Width - 1;
CurrencyLabel1.Width := Bands[2].Width + 1;
CurrencyLabel1.Top := 14;
CurrencyLabel2.Left := Bands[0].Width + Bands[1].Width + Bands[2].Width - 1;
CurrencyLabel2.Width := Bands[3].Width + 1;
CurrencyLabel2.Top := 14;
end;
CurrencyLabel1.Visible := True;
CurrencyLabel2.Visible := True;
Result := True;
end;
procedure TfrmBaseAccountVoucher.LoadData;
begin
end;
procedure TfrmBaseAccountVoucher.bbExitClick(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmBaseAccountVoucher.pbbPrintClick(Sender: TObject);
begin
inherited;
PrintForm(Self, 1, PRINT_REPORT, sPrintFile);
end;
procedure TfrmBaseAccountVoucher.pbbPrintViewClick(Sender: TObject);
begin
inherited;
PrintForm(Self, 1, SHOW_REPORT, sPrintFile);
end;
procedure TfrmBaseAccountVoucher.pbbPrintCustomClick(Sender: TObject);
begin
inherited;
PrintForm(Self, 1, DESIGN_REPORT, sPrintFile);
end;
procedure TfrmBaseAccountVoucher.pbbPrintInitClick(Sender: TObject);
begin
inherited;
PrintForm(Self, 1, INITI_REPORT, sPrintFile);
end;
procedure TfrmBaseAccountVoucher.bbPrintClick(Sender: TObject);
begin
inherited;
pbbPrintViewClick(nil);
end;
procedure TfrmBaseAccountVoucher.gridMainCustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: string; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
begin
inherited;
SetGridColor(ANode, AColor);
if CheckCurrencyField(TdxDBTreeListColumn(AColumn).FieldName) then
begin
if AFocused then
ShowCurrecyEdit(ARect)
else
ADone := DrawCurrencyEdit(ACanvas, ARect, AText);
end;
end;
function TfrmBaseAccountVoucher.ShowCurrecyEdit(ARect: TRect): boolean;
begin
CurrencyEdit.Left := ARect.Left;
CurrencyEdit.Top := ARect.Top;
CurrencyEdit.Width := ARect.Right - ARect.Left;
CurrencyEdit.Height := ARect.Bottom - ARect.Top;
CurrencyEdit.Color := CurrencyEdit.FocusedColor;
if (CurrencyEdit.Tag = 1) and not CurrencyEdit.Visible then
begin
CurrencyEdit.Visible := True;
end;
Result := True;
end;
function TfrmBaseAccountVoucher.DrawCurrencyEdit(ACanvas: TCanvas; ARect: TRect;
AText: string): Boolean;
var
OldColor, OldFontColor: TColor;
begin
OldColor := CurrencyEdit.Color;
OldFontColor := CurrencyEdit.Font.Color;
CurrencyEdit.Color := gridMain.Color;
if AText = '' then
AText := '0';
CurrencyEdit.Font.Color := gridMain.Font.Color;
DrawCurrencyFrame(ACanvas, ARect, CurrencyEdit, StrToFloat(AText));
CurrencyEdit.Color := OldColor;
CurrencyEdit.Font.Color := OldFontColor;
Result := True;
end;
procedure TfrmBaseAccountVoucher.gridMainChangeColumn(Sender: TObject;
Node: TdxTreeListNode; Column: Integer);
begin
inherited;
if CheckCurrencyField(gridMain.FocusedField.FieldName) then
begin
CurrencyEdit.Tag := 1;
ChangeCells;
end
else
begin
CurrencyEdit.Visible := false;
CurrencyEdit.Tag := 0;
end;
end;
procedure TfrmBaseAccountVoucher.CurrencyEditMoveOut(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
case Key of
VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT:
begin
gridMain.SetFocus;
SendMessage(gridMain.Handle, WM_KEYDOWN, WORD(Key), 0);
end;
end;
end;
function TfrmBaseAccountVoucher.ChangeCells: Boolean;
begin
with gridMain do
begin
if CheckCurrencyField(Columns[FocusedColumn].FieldName) then
begin
CurrencyEdit.Left := 2000;
CurrencyEdit.Visible := True;
CurrencyEdit.DataField := Columns[FocusedColumn].FieldName;
if CurrencyEdit.Visible then
CurrencyEdit.SetFocus;
end;
end;
Result := True;
end;
procedure TfrmBaseAccountVoucher.gridMainCustomDrawBand(Sender: TObject;
ABand: TdxTreeListBand; ACanvas: TCanvas; ARect: TRect;
var AText: string; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
begin
inherited;
if (ABand.Index = 0) or (ABand.Index = 1) then
ADone := SetBandCenter(gridMain, ABand, ACanvas, ARect, AText);
end;
procedure TfrmBaseAccountVoucher.bbInsClick(Sender: TObject);
begin
inherited;
gridMain.DataLink.DataSet.Append;
end;
procedure TfrmBaseAccountVoucher.bbDelRowClick(Sender: TObject);
begin
inherited;
gridMain.DataLink.DataSet.Delete;
end;
procedure TfrmBaseAccountVoucher.dxBarLargeButton7Click(Sender: TObject);
begin
inherited;
WinExecCalc;
end;
procedure TfrmBaseAccountVoucher.gridMainChangedColumnsWidth(
Sender: TObject);
begin
inherited;
SetCurrecyLable;
end;
procedure TfrmBaseAccountVoucher.CurrencyEditKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
case KEY of
VK_RETURN:
begin
gridMain.SetFocus;
SendMessage(gridMain.Handle, WM_KEYDOWN, Key, 0);
end;
VK_ESCAPE: gridMain.SetFocus;
end;
end;
procedure TfrmBaseAccountVoucher.gridMainKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
case KEY of
VK_RETURN:
with gridMain do
if FocusedColumn = 2 then
FocusedColumn := FocusedColumn + 1
else
if FocusedColumn = 3 then
begin
FocusedColumn := 0;
if isEof then
DataLink.DataSet.Append
else
DataLink.DataSet.Next;
gridMain.ShowEditor;
end;
end;
end;
procedure TfrmBaseAccountVoucher.FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
case KEY of
VK_RETURN:
begin
if GetFocusedComponent(self) is TdxInplaceEdit then
perform(WM_NEXTDLGCTL, 0, 0);
end;
VK_ESCAPE: Close;
end;
end;
procedure TfrmBaseAccountVoucher.FormShow(Sender: TObject);
begin
inherited;
SetCurrecyLable;
end;
procedure TfrmBaseAccountVoucher.gridMainKeyPress(Sender: TObject;
var Key: Char);
begin
inherited;
if (key <> chr(9)) and
CheckCurrencyField(gridMain.Columns[gridMain.FocusedColumn].FieldName) then
begin
CurrencyEdit.SetFocus;
SendMessage(CurrencyEdit.Handle, WM_Char, WORD(Key), 0);
end;
end;
procedure TfrmBaseAccountVoucher.GridDrawSummaryFooter(Sender: TObject; ACanvas:
TCanvas; ARect: TRect;
var AText: string; var AAlignment: TAlignment; AFont: TFont; var AColor:
TColor;
var ADone: Boolean);
begin
inherited;
if not (edgoLoadAllRecords in
TdxDBGrid(TdxDBTreeListColumn(Sender).ATreeList).OptionsDB) then
AText := CalcColumnSummary(TdxDBTreeListColumn(Sender));
end;
procedure TfrmBaseAccountVoucher.ADOSetListRecordChangeComplete(
DataSet: TCustomADODataSet; const Reason: TEventReason;
const RecordCount: Integer; const Error: Error;
var EventStatus: TEventStatus);
begin
inherited;
ChangeCells;
end;
procedure TfrmBaseAccountVoucher.edtDateKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
case KEY of
VK_DOWN: SendMsg(TWinControl(Sender).Handle, WM_KEYDOWN, VK_F4);
end;
end;
procedure TfrmBaseAccountVoucher.FormCreate(Sender: TObject);
begin
inherited;
bDrawFullGrid := StrToBool2(GetIniValue(frmData.ADOConnetLogin, 'DrawFullGrid'));
end;
procedure TfrmBaseAccountVoucher.gridMainMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
P: TPoint;
begin
inherited;
GetCursorPos(P);
if Button = mbRight then
GridPopMenu.Popup(P.X, P.Y)
else
if (Button = mbLeft) and (gridMain.GetHitTestInfoAt(X, Y) = htNowhere) then
bbIns.Click;
end;
procedure TfrmBaseAccountVoucher.gridMainCustomDraw(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxDBTreeListColumn; const AText: string; AFont: TFont;
var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean);
begin
inherited;
if bDrawFullGrid then DrawFullGrid(gridMain, ACanvas, ARect, ANode);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -