349 lines
10 KiB
Plaintext
349 lines
10 KiB
Plaintext
{******************************************************************
|
|
|
|
JEDI-VCL Demo
|
|
|
|
Copyright (C) 2002 Project JEDI
|
|
|
|
Original author:
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the JEDI-JVCL
|
|
home page, located at http://jvcl.sourceforge.net
|
|
|
|
The contents of this file are used with permission, subject to
|
|
the Mozilla Public License Version 1.1 (the "License"); you may
|
|
not use this file except in compliance with the License. You may
|
|
obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1_1Final.html
|
|
|
|
Software distributed under the License is distributed on an
|
|
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
rights and limitations under the License.
|
|
|
|
******************************************************************}
|
|
|
|
unit DbAware;
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
|
|
Forms, Dialogs, DB, DBTables, Grids, DBGrids, JvPicClip, JvBDEQuery,
|
|
JvFormPlacement, JvComponent, JvBDEFilter, JvBDEQBE, StdCtrls, ExtCtrls,
|
|
Buttons, DBCtrls, JvBDEIndex, JvDBLookup, Mask, JvLabel, JvDBControls,
|
|
ComCtrls, TabNotBk, JvExControls, JvDBGrid, JvExStdCtrls, JvExDBGrids;
|
|
|
|
type
|
|
TDBAwareForm = class(TForm)
|
|
TabbedNotebook1: TTabbedNotebook;
|
|
DataSource1: TDataSource;
|
|
Table2: TTable;
|
|
Table2SpeciesNo: TFloatField;
|
|
Table2Category: TStringField;
|
|
Table2Common_Name: TStringField;
|
|
Table2Lengthcm: TFloatField;
|
|
Table2Notes: TMemoField;
|
|
Table2Graphic: TGraphicField;
|
|
GroupBox1: TGroupBox;
|
|
rxDBGrid1: TJvDBGrid ;
|
|
Panel1: TPanel;
|
|
CheckBox1: TCheckBox;
|
|
GroupBox2: TGroupBox;
|
|
DBStatusLabel1: TJvDBStatusLabel ;
|
|
DBNavigator1: TDBNavigator;
|
|
Label2: TLabel;
|
|
DataSource2: TDataSource;
|
|
QBEQuery1: TJvQBEQuery ;
|
|
GroupBox3: TGroupBox;
|
|
Label3: TLabel;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
Edit1: TMaskEdit;
|
|
Label6: TLabel;
|
|
Table1: TTable;
|
|
DataSource3: TDataSource;
|
|
GroupBox4: TGroupBox;
|
|
rxDBGrid2: TJvDBGrid ;
|
|
DBIndexCombo1: TJvDBIndexCombo ;
|
|
Label7: TLabel;
|
|
Table3: TTable;
|
|
DataSource4: TDataSource;
|
|
DBFilter1: TJvDBFilter ;
|
|
Panel2: TPanel;
|
|
Panel3: TPanel;
|
|
ScrollBox: TScrollBox;
|
|
Label8: TLabel;
|
|
Label9: TLabel;
|
|
Label10: TLabel;
|
|
Label11: TLabel;
|
|
Label12: TLabel;
|
|
Label13: TLabel;
|
|
EditCompany: TDBEdit;
|
|
EditCity: TDBEdit;
|
|
EditState: TDBEdit;
|
|
EditZip: TDBEdit;
|
|
EditCountry: TDBEdit;
|
|
Label14: TLabel;
|
|
EditPhone: TDBEdit;
|
|
GroupBox6: TGroupBox;
|
|
DBNavigator: TDBNavigator;
|
|
GroupBox7: TGroupBox;
|
|
Label15: TLabel;
|
|
GroupBox5: TGroupBox;
|
|
EnterQuery: TSpeedButton;
|
|
ExecQuery: TSpeedButton;
|
|
CancelQuery: TSpeedButton;
|
|
RadioGroup1: TRadioGroup;
|
|
EditCustNo: TDBEdit;
|
|
rxDBLookupCombo1: TJvDBLookupCombo ;
|
|
FormStorage1: TJvFormStorage ;
|
|
Table1OrderNo: TFloatField;
|
|
Table1ItemNo: TFloatField;
|
|
Table1PartNo: TFloatField;
|
|
Table1Qty: TIntegerField;
|
|
Table1Discount: TFloatField;
|
|
GroupBox8: TGroupBox;
|
|
Label16: TLabel;
|
|
Panel4: TPanel;
|
|
Label17: TLabel;
|
|
Label19: TLabel;
|
|
rxDBLookupCombo2: TJvDBLookupCombo ;
|
|
ComboBox2: TComboBox;
|
|
DBGrid1: TJvDBGrid ;
|
|
Table4: TTable;
|
|
DataSource6: TDataSource;
|
|
rxQuery1: TJvQuery ;
|
|
DataSource5: TDataSource;
|
|
DBStatusLabel2: TJvDBStatusLabel ;
|
|
JvPicclip: TJvPicClip ;
|
|
Label1: TLabel;
|
|
CheckBox2: TCheckBox;
|
|
rxQuery1OrderNo: TFloatField;
|
|
rxQuery1SaleDate: TDateTimeField;
|
|
rxQuery1Company: TStringField;
|
|
rxQuery1CustNo: TFloatField;
|
|
rxQuery1ShipDate: TDateTimeField;
|
|
rxQuery1ShipToContact: TStringField;
|
|
rxQuery1ShipToAddr1: TStringField;
|
|
rxQuery1ShipToAddr2: TStringField;
|
|
rxQuery1ShipToCity: TStringField;
|
|
rxQuery1ShipToState: TStringField;
|
|
rxQuery1ShipToZip: TStringField;
|
|
rxQuery1ShipToCountry: TStringField;
|
|
rxQuery1ShipToPhone: TStringField;
|
|
rxQuery1ShipVIA: TStringField;
|
|
rxQuery1PO: TStringField;
|
|
rxQuery1Terms: TStringField;
|
|
rxQuery1PaymentMethod: TStringField;
|
|
rxQuery1ItemsTotal: TCurrencyField;
|
|
rxQuery1TaxRate: TFloatField;
|
|
rxQuery1Freight: TCurrencyField;
|
|
rxQuery1AmountPaid: TCurrencyField;
|
|
rxQuery1EmpNo: TIntegerField;
|
|
rxQuery1LastName: TStringField;
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure CheckBox1Click(Sender: TObject);
|
|
procedure rxDBLookupCombo1Change(Sender: TObject);
|
|
procedure EnterQueryClick(Sender: TObject);
|
|
procedure ExecQueryClick(Sender: TObject);
|
|
procedure CancelQueryClick(Sender: TObject);
|
|
procedure RadioGroup1Click(Sender: TObject);
|
|
procedure DBFilter1Change(Sender: TObject);
|
|
procedure ComboBox2Change(Sender: TObject);
|
|
procedure rxDBLookupCombo2Change(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure rxDBGrid1GetCellParams(Sender: TObject; Field: TField;
|
|
AFont: TFont; var Background: TColor; Highlight: Boolean);
|
|
procedure rxDBLookupCombo1GetImage(Sender: TObject; IsEmpty: Boolean;
|
|
var Graphic: TGraphic; var TextMargin: Integer);
|
|
procedure DBGrid1CheckButton(Sender: TObject; ACol: Longint;
|
|
Field: TField; var Enabled: Boolean);
|
|
procedure DBGrid1TitleBtnClick(Sender: TObject; ACol: Longint;
|
|
Field: TField);
|
|
procedure CheckBox2Click(Sender: TObject);
|
|
procedure DBGrid1GetBtnParams(Sender: TObject; Field: TField;
|
|
AFont: TFont; var Background: TColor; var SortMarker: TSortMarker;
|
|
IsDown: Boolean);
|
|
procedure rxDBGrid1KeyPress(Sender: TObject; var Key: Char);
|
|
private
|
|
{ Private declarations }
|
|
procedure SetMacro(const MacroName, Value: string);
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses JvDBUtils, Main;
|
|
|
|
{$R *.DFM}
|
|
|
|
procedure TDBAwareForm.FormClose(Sender: TObject;
|
|
var Action: TCloseAction);
|
|
begin
|
|
Action := caFree;
|
|
end;
|
|
|
|
procedure TDBAwareForm.CheckBox1Click(Sender: TObject);
|
|
begin
|
|
rxDBGrid1.ShowGlyphs := CheckBox1.Checked;
|
|
end;
|
|
|
|
procedure TDBAwareForm.rxDBLookupCombo1Change(Sender: TObject);
|
|
begin
|
|
Edit1.Text := rxDBLookupCombo1.Value;
|
|
end;
|
|
|
|
procedure TDBAwareForm.EnterQueryClick(Sender: TObject);
|
|
begin
|
|
DBFilter1.SetCapture;
|
|
end;
|
|
|
|
procedure TDBAwareForm.ExecQueryClick(Sender: TObject);
|
|
begin
|
|
with DBFilter1 do begin
|
|
ReadCaptureControls;
|
|
ReleaseCapture;
|
|
Activate;
|
|
end;
|
|
end;
|
|
|
|
procedure TDBAwareForm.CancelQueryClick(Sender: TObject);
|
|
begin
|
|
with DBFilter1 do begin
|
|
ReleaseCapture;
|
|
Deactivate;
|
|
end;
|
|
end;
|
|
|
|
procedure TDBAwareForm.RadioGroup1Click(Sender: TObject);
|
|
begin
|
|
DBFilter1.LogicCond := TFilterLogicCond(RadioGroup1.ItemIndex);
|
|
end;
|
|
|
|
procedure TDBAwareForm.DBFilter1Change(Sender: TObject);
|
|
begin
|
|
ExecQuery.Enabled := DBFilter1.Captured;
|
|
CancelQuery.Enabled := DBFilter1.Active or DBFilter1.Captured;
|
|
EnterQuery.Enabled := True;
|
|
end;
|
|
|
|
procedure TDBAwareForm.SetMacro(const MacroName, Value: string);
|
|
begin
|
|
with rxQuery1 do begin
|
|
MacroByName(MacroName).AsString := Value;
|
|
DisableControls;
|
|
try
|
|
Close;
|
|
Open;
|
|
finally
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TDBAwareForm.ComboBox2Change(Sender: TObject);
|
|
var
|
|
Order: string;
|
|
begin
|
|
case ComboBox2.ItemIndex of
|
|
0: Order := 'SaleDate';
|
|
1: Order := 'ShipDate';
|
|
2: Order := 'Company';
|
|
3: Order := 'LastName';
|
|
end;
|
|
SetMacro('ORDER', Order);
|
|
end;
|
|
|
|
procedure TDBAwareForm.rxDBLookupCombo2Change(Sender: TObject);
|
|
var
|
|
Value: string;
|
|
begin
|
|
Value := TrueExpr;
|
|
if rxDBLookupCombo2.Value <> '' then begin
|
|
Value := 'ORDERS."CustNo"=' + rxDBLookupCombo2.Value;
|
|
end;
|
|
SetMacro('CUSTOMER', Value);
|
|
end;
|
|
|
|
procedure TDBAwareForm.FormCreate(Sender: TObject);
|
|
begin
|
|
ComboBox2.ItemIndex := 1;
|
|
{$IFDEF WIN32}
|
|
DBGrid1.Columns.State := csCustomized;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
procedure TDBAwareForm.rxDBGrid1GetCellParams(Sender: TObject;
|
|
Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);
|
|
var
|
|
Len: Integer;
|
|
begin
|
|
if Field.FieldName = 'Category' then
|
|
AFont.Style := AFont.Style + [fsBold]
|
|
else if Field.FieldName = 'Length (cm)' then
|
|
Background := clYellow;
|
|
Len := (Sender as TJvDBGrid ).DataSource.DataSet.FieldByName('Length (cm)').AsInteger;
|
|
if (Len <= 30) and (Len > 0) then
|
|
Background := clLime { shortest }
|
|
else if Len >= 150 then
|
|
AFont.Color := clRed; { longest }
|
|
if Highlight then begin
|
|
AFont.Color := clHighlightText;
|
|
Background := clHighlight;
|
|
end;
|
|
end;
|
|
|
|
procedure TDBAwareForm.rxDBGrid1KeyPress(Sender: TObject; var Key: Char);
|
|
begin
|
|
if (Key = ' ') then rxDBGrid1.ToggleRowSelection;
|
|
end;
|
|
|
|
procedure TDBAwareForm.rxDBLookupCombo1GetImage(Sender: TObject;
|
|
IsEmpty: Boolean; var Graphic: TGraphic; var TextMargin: Integer);
|
|
var
|
|
PhoneExt: string;
|
|
begin
|
|
TextMargin := JvPicclip.Width + 2;
|
|
if not IsEmpty then begin
|
|
PhoneExt := QBEQuery1.FieldByName('PhoneExt').AsString;
|
|
Graphic := JvPicclip.GraphicCell[3];
|
|
if Length(PhoneExt) = 0 then
|
|
Graphic := JvPicclip.GraphicCell[4];
|
|
end
|
|
else Graphic := JvPicclip.GraphicCell[5];
|
|
end;
|
|
|
|
procedure TDBAwareForm.DBGrid1CheckButton(Sender: TObject; ACol: Longint;
|
|
Field: TField; var Enabled: Boolean);
|
|
begin
|
|
Enabled := (Field <> nil) and not (Field is TBlobField);
|
|
end;
|
|
|
|
procedure TDBAwareForm.DBGrid1TitleBtnClick(Sender: TObject; ACol: Longint;
|
|
Field: TField);
|
|
begin
|
|
if (Field <> nil) then begin
|
|
SetMacro('ORDER', Field.FieldName);
|
|
ComboBox2.ItemIndex := -1;
|
|
end;
|
|
end;
|
|
|
|
procedure TDBAwareForm.CheckBox2Click(Sender: TObject);
|
|
begin
|
|
rxDBGrid1.MultiSelect := CheckBox2.Checked;
|
|
end;
|
|
|
|
procedure TDBAwareForm.DBGrid1GetBtnParams(Sender: TObject; Field: TField;
|
|
AFont: TFont; var Background: TColor; var SortMarker: TSortMarker;
|
|
IsDown: Boolean);
|
|
begin
|
|
if (Field <> nil) and rxQuery1.Active and (CompareText(Field.FieldName,
|
|
rxQuery1.MacroByName('ORDER').AsString) = 0) then
|
|
SortMarker := smDown;
|
|
end;
|
|
|
|
end.
|