⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baseaccountvoucher.pas

📁 进销存·完整的·有数据库的·非常完整·只得参考
💻 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 + -