📄 bankbookform.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 + -