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

📄 bankbookform.pas

📁 功能全面的商业财会系统源码,清晰,很有参考价值.扩展性强.
💻 PAS
字号:
unit BankBookForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, Grids, DBGrids, DB, DBTables, Menus, ExtCtrls, StdCtrls, Buttons;

type
  TfrmBankBook = class(TForm)
    Panel1: TPanel;
    MainMenu1: TMainMenu;
    mnuFile: TMenuItem;
    mnuView: TMenuItem;
    mnuHelp: TMenuItem;
    mnuRefresh: TMenuItem;
    mnuBankBookHelp: TMenuItem;
    mnuExit: TMenuItem;
    Bevel1: TBevel;
    qryGLHist: TQuery;
    StringGrid1: TStringGrid;
    qryGLHistGLAccount: TStringField;
    qryGLHistTransDate: TDateField;
    qryGLHistAmount: TCurrencyField;
    Label1: TLabel;
    cboBank: TComboBox;
    qryGLHistTransDescription: TStringField;
    qryGLHistVendorID: TIntegerField;
    qryGLHistCustomerID: TIntegerField;
    qryGLHistSource: TStringField;
    procedure mnuRefreshClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Panel1DblClick(Sender: TObject);
    procedure mnuExitClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure mnuBankBookHelpClick(Sender: TObject);
    procedure qryGLHistCalcFields(DataSet: TDataSet);
    procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
      Rect: TRect; State: TGridDrawState);
    procedure FormShow(Sender: TObject);
    procedure SetDefaultBankID;
    procedure cboBankDropDown(Sender: TObject);
    procedure cboBankKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    procedure SetBankID(BankID: integer);
    function GetBankID: integer;
  public
    property BankID: integer read GetBankID write SetBankID;
  end;

var
  frmBankBook: TfrmBankBook;
  
implementation

uses BS1Form, LookUpsData;

var
  intClientHeight, intClientWidth: Integer;
  OldWindowState: TWindowState;
  cboBankIDs: TStringList;

{$R *.DFM}

procedure TfrmBankBook.SetBankID(BankID: integer);
begin
  CboBank.ItemIndex := cboBankIDs.IndexOf(IntToStr(BankID));
end;

function TfrmBankBook.GetBankID: integer;
begin
  if cboBank.ItemIndex > 0 then Result := StrToInt(cboBankIDs[cboBank.ItemIndex])
  else Result := 0;
end;

procedure TfrmBankBook.SetDefaultBankID;
var
  LookupResults: variant;
begin
  if CboBank.Items.count > 0 then begin   //Set default bank.
    if frmBS1.tblCompanyDefaultCurrencyID.value > 0 then begin
      LookupResults := dmLookUps.tblBank.LookUp('CurrencyID', frmBS1.tblCompanyDefaultCurrencyID.value, 'BankID');
      if LookupResults = null then CboBank.ItemIndex := 0
      else CboBank.ItemIndex := cboBankIDs.IndexOf(VarToStr(LookupResults));
    end else CboBank.ItemIndex := 0;
  end;  
end;

procedure cboBank_Load(const Tbl: TTable; const Cbo: TCombobox);
begin
  Cbo.Items.Clear;   //Populate "Bank" combobox.
  cboBankIDs.Clear;
  Tbl.First;
  while not Tbl.EOF do begin
    Cbo.Items.Add(Tbl['BankName']);
    cboBankIDs.Add(Tbl['BankID']);
    Tbl.Next;
  end;
  frmBankBook_cboFind_RequeryRequired := false;
end;

procedure TfrmBankBook.mnuRefreshClick(Sender: TObject);
var
  R: Integer;
  LookupResults: variant;
  Balance: currency;
begin
  if cboBank.Items.count = 0 then exit;   //Bypass if no banks yet.
  screen.cursor := crHourglass;
  with qryGLHist do begin
    close;
    LookupResults := dmLookUps.tblBank.LookUp('BankID', cboBankIDs[cboBank.ItemIndex], 'BankGLAccount');
    if LookupResults = null then Params[0].AsString := ''
    else Params[0].AsString := LookupResults;
    open;
  end;
  R := 1;
  Balance := 0;
  qryGLHist.first;
  while not qryGLHist.eof do begin
    Balance := Balance + qryGLHistAmount.value;
    if qryGLHist.recno > (qryGLHist.RecordCount - 300) then begin   //Show recent transactions only (to conserve memory).
      StringGrid1.cells[0,R] := FormatDateTime('dd mmm yy',qryGLHistTransDate.value);
      if      qryGLHistSource.value = 'AP' then StringGrid1.cells[1,R] := copy(qryGLHistTransDescription.value,11,10)   //Extract cheque no.
      else if qryGLHistSource.value = 'AR' then StringGrid1.cells[1,R] := 'Deposit'
      else                                      StringGrid1.cells[1,R] := '';
      if qryGLHistSource.value = 'AP' then begin
        LookupResults := dmLookUps.tblVendor.Lookup('VendorID', qryGLHistVendorID.value, 'VendorName;VendorNo');
        if LookupResults[0] <> null then StringGrid1.cells[2,R] := LookupResults[0] + ' (' + LookupResults[1] + ')';
      end else if qryGLHistSource.value = 'AR' then begin
        LookupResults := dmLookUps.tblCustomer.Lookup('CustomerID', qryGLHistCustomerID.value, 'CustomerName;CustomerNo');
        if LookupResults[0] <> null then StringGrid1.cells[2,R] := LookupResults[0] + ' (' + LookupResults[1] + ')';
      end else StringGrid1.cells[2,R] := qryGLHistTransDescription.value;
      StringGrid1.cells[3,R] := FloatToStrF(qryGLHistAmount.value,ffCurrency,18,2);
      StringGrid1.cells[4,R] := FloatToStrF(Balance,ffCurrency,18,2);
      R := R+1;
    end;
      qryGLHist.next;
  end;
  if R>1 then StringGrid1.rowcount := R
  else begin
    StringGrid1.rowcount := 2;   //Show headings + 1 blank row.
    StringGrid1.cells[0,1] := '';
    StringGrid1.cells[1,1] := '';
    StringGrid1.cells[2,1] := '';
    StringGrid1.cells[3,1] := '';
    StringGrid1.cells[4,1] := '';
  end;
  StringGrid1.TopRow := StringGrid1.RowCount - StringGrid1.VisibleRowCount;   //Goto end (most recent).
  screen.cursor := crDefault;
end;

procedure TfrmBankBook.FormCreate(Sender: TObject);
var
  x: integer;
begin
  qryGLHist.DatabaseName := strDatabaseName;
  //qryGLHist.Active := true;   //Called by refresh.
  dmLookUps.tblBank.Active := true;

  cboBankIDs := TStringList.create;   //Create a TStringList to store BankIDs for the combobox.
  cboBank_Load(dmLookUps.tblBank, cboBank);   //Populate "Bank" combobox.
  //SetDefaultBankID;   //Done by calling form.

  StringGrid1.cells[0,0] := 'Date';
  StringGrid1.cells[1,0] := 'Cheque no.';
  StringGrid1.cells[2,0] := 'Description';
  StringGrid1.cells[3,0] := 'Amount';
  StringGrid1.cells[4,0] := 'Balance';
  StringGrid1.ColWidths[0] := 58;
  StringGrid1.ColWidths[1] := 67;
  StringGrid1.ColWidths[2] := 248;
  StringGrid1.ColWidths[3] := 82;
  StringGrid1.ColWidths[4] := 82;

  if FontFactor <> 1 then begin   //If using large fonts, resize grid columns.
    intClientWidth := Trunc(20*FontFactor) + StringGrid1.ColCount - 1;   //Scrollbar + grid lines.
    for x := 0 to StringGrid1.ColCount - 1 do begin
      StringGrid1.Colwidths[x] := Trunc(StringGrid1.Colwidths[x]*FontFactor);
      intClientWidth := intClientWidth + StringGrid1.Colwidths[x];
    end;
    ClientWidth := intClientWidth;
    StringGrid1.DefaultRowHeight := Trunc(StringGrid1.DefaultRowHeight*FontFactor);
  end;
  intClientHeight := ClientHeight;   //Store form size.
  intClientWidth := ClientWidth;
end;

procedure TfrmBankBook.Panel1DblClick(Sender: TObject);
begin
  ClientHeight := intClientHeight;   //Resize form.
  ClientWidth := intClientWidth;
end;

procedure TfrmBankBook.mnuExitClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmBankBook.FormResize(Sender: TObject);
begin
  if (WindowState <> OldWindowState)   //Prevent grid resize bugs.
  and (WindowState <> wsMinimized)
  and (OldWindowState <> wsMinimized)
  then mnuRefreshClick(sender);
  OldWindowState := WindowState;
end;

procedure TfrmBankBook.mnuBankBookHelpClick(Sender: TObject);
begin
  Application.HelpContext(440);
end;

procedure TfrmBankBook.qryGLHistCalcFields(DataSet: TDataSet);
begin
  //Balance := Balance + qryGLHistAmount.value;
  //qryGLHistTotAmt.value := Balance;
end;

procedure TfrmBankBook.StringGrid1DrawCell(Sender: TObject; Col,
  Row: Longint; Rect: TRect; State: TGridDrawState);
var
  strText: string;
  RaisedRect: TRect;
  OldColor: TColor;
begin
  if Row = 0 then begin
    OldColor := StringGrid1.Canvas.Brush.Color;
    RaisedRect.left := rect.left +1; RaisedRect.top := rect.top +1; RaisedRect.right := rect.right; RaisedRect.bottom := rect.bottom;
    StringGrid1.Canvas.Brush.Color := clBtnShadow; StringGrid1.Canvas.FillRect(RaisedRect);
    RaisedRect.left := rect.left +1; RaisedRect.top := rect.top +1; RaisedRect.right := rect.right -1; RaisedRect.bottom := rect.bottom -1;
    StringGrid1.Canvas.Brush.Color := clBtnFace; StringGrid1.Canvas.FillRect(RaisedRect);
    strText := StringGrid1.cells[Col,Row];
    if Col in [3,4] then StringGrid1.Canvas.TextOut(rect.left + (rect.right - rect.left - StringGrid1.Canvas.TextWidth(strText))div 2,rect.top +2,strText)   //Center headings on numeric columns.
    else StringGrid1.Canvas.TextOut(rect.left +2,rect.top +2,strText);
    StringGrid1.Canvas.Brush.Color := OldColor;
  end else begin
    StringGrid1.Canvas.TextRect(rect,rect.left +2,rect.top +2,'                                        ');   //Clear previous data.
    strText := StringGrid1.cells[Col,Row];
    if Col in [3,4] then StringGrid1.Canvas.TextOut(rect.right - StringGrid1.Canvas.TextWidth(strText)-3,rect.top +2,strText)   //Right justify numeric columns.
    else StringGrid1.Canvas.TextOut(rect.left +2,rect.top +2,strText);
  end;
end;

procedure TfrmBankBook.FormShow(Sender: TObject);
begin
  mnuRefreshClick(sender);
end;

procedure TfrmBankBook.cboBankDropDown(Sender: TObject);
begin
  if frmBankBook_cboFind_RequeryRequired = true then cboBank_Load(dmLookUps.tblBank, cboBank);   //Populate "find" combobox.
end;

procedure TfrmBankBook.cboBankKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if frmBankBook_cboFind_RequeryRequired = true then cboBank_Load(dmLookUps.tblBank, cboBank);   //Populate "find" combobox.
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -