git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@12 7f62d464-2af8-f54e-996c-e91b33f51cbe
287 lines
8.1 KiB
ObjectPascal
287 lines
8.1 KiB
ObjectPascal
unit MainForm;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls, JvExStdCtrls,
|
|
JvDBCombobox, Grids, DBGrids, JvExDBGrids, JvDBGrid, JvDBUltimGrid,
|
|
JvDBGridFooter, ComCtrls;
|
|
|
|
type
|
|
TfrmMain = class(TForm)
|
|
JvDBGrid1: TJvDBUltimGrid;
|
|
DBMemo1: TDBMemo;
|
|
JvDBComboBox1: TJvDBComboBox;
|
|
DBLookupComboBox1: TDBLookupComboBox;
|
|
PanelButtons: TPanel;
|
|
PanelGrid: TPanel;
|
|
B_Connect: TButton;
|
|
B_TitleIndic: TButton;
|
|
B_WordWrap: TButton;
|
|
B_ModFooter: TButton;
|
|
B_ShowEdit: TButton;
|
|
B_Search: TButton;
|
|
ADOConnection1: TADOConnection;
|
|
MainTable: TADOTable;
|
|
MainTableRefLogiciel: TAutoIncField;
|
|
MainTableSoftware: TWideStringField;
|
|
MainTableCategory: TWideStringField;
|
|
MainTableFirstBool: TBooleanField;
|
|
MainTableSecondBool: TBooleanField;
|
|
MainTableLicenses: TSmallintField;
|
|
MainTablePrice: TBCDField;
|
|
MainTableComment: TMemoField;
|
|
DataSource1: TDataSource;
|
|
DataSource2: TDataSource;
|
|
LookupTable: TADOTable;
|
|
JvDBGridFooter1: TJvDBGridFooter;
|
|
CountQuery: TADOQuery;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure MainTableCategoryGetText(Sender: TField; var Text: String;
|
|
DisplayText: Boolean);
|
|
procedure B_ModFooterClick(Sender: TObject);
|
|
procedure B_ConnectClick(Sender: TObject);
|
|
procedure B_TitleIndicClick(Sender: TObject);
|
|
procedure B_WordWrapClick(Sender: TObject);
|
|
procedure B_ShowEditClick(Sender: TObject);
|
|
procedure DBMemo1Enter(Sender: TObject);
|
|
procedure JvDBComboBox1KeyPress(Sender: TObject; var Key: Char);
|
|
procedure DBLookupComboBox1KeyPress(Sender: TObject; var Key: Char);
|
|
procedure JvDBGrid1RestoreGridPosition(Sender: TJvDBUltimGrid;
|
|
SavedBookmark: Pointer; SavedRowPos: Integer);
|
|
procedure B_SearchClick(Sender: TObject);
|
|
procedure JvDBGridFooter1Calculate(Sender: TJvDBGridFooter;
|
|
const FieldName: String; var CalcValue: Variant);
|
|
private
|
|
{ Private declarations }
|
|
OldRowsHeight, Compteur : Integer;
|
|
DisplayList : TStringList;
|
|
procedure FillUpList;
|
|
public
|
|
{ Public declarations }
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
{ TfrmMain }
|
|
|
|
constructor TfrmMain.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
|
|
OldRowsHeight := JvDBGrid1.RowsHeight;
|
|
Compteur := 0;
|
|
DisplayList := TStringList.Create;
|
|
end;
|
|
|
|
destructor TfrmMain.Destroy;
|
|
begin
|
|
DisplayList.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrmMain.FillUpList;
|
|
begin
|
|
if ((DisplayList = nil) or (not LookupTable.Active)) then
|
|
Exit;
|
|
DisplayList.Clear;
|
|
LookupTable.First;
|
|
while (not LookupTable.Eof) do
|
|
begin
|
|
DisplayList.Add(LookupTable.FieldByName('CodeLogiciel').AsString +
|
|
'=' + LookupTable.FieldByName('LibelleLog').AsString);
|
|
LookupTable.Next;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.FormShow(Sender: TObject);
|
|
var
|
|
InitialSort: TSortFields;
|
|
begin
|
|
SetLength(InitialSort, 3);
|
|
InitialSort[0].Name := 'Category';
|
|
InitialSort[0].Order := JvGridSort_ASC;
|
|
InitialSort[1].Name := 'Licenses';
|
|
InitialSort[1].Order := JvGridSort_DESC;
|
|
InitialSort[2].Name := 'Software';
|
|
InitialSort[2].Order := JvGridSort_ASC;
|
|
JvDBGrid1.Sort(InitialSort);
|
|
end;
|
|
|
|
procedure TfrmMain.MainTableCategoryGetText(Sender: TField;
|
|
var Text: String; DisplayText: Boolean);
|
|
begin
|
|
if not Assigned(DisplayList) then
|
|
Exit;
|
|
if (DisplayList.IndexOfName(Sender.AsString) = -1) then
|
|
FillUpList; // Key value not found -> the list is (re)loaded
|
|
Text := DisplayList.Values[Sender.AsString];
|
|
end;
|
|
|
|
procedure TfrmMain.B_ModFooterClick(Sender: TObject);
|
|
begin
|
|
JvDBGridFooter1.Columns.Items[0].Alignment := taCenter;
|
|
JvDBGridFooter1.Columns.Items[0].Bevel := pbRaised;
|
|
JvDBGridFooter1.Columns.Items[1].FieldName := 'Category';
|
|
JvDBGridFooter1.Columns.Items[1].DisplayMask := '';
|
|
JvDBGridFooter1.IgnoreHorzScrolling := True;
|
|
JvDBGridFooter1.IgnoreResizing := True;
|
|
JvDBGrid1.FixedCols := 1;
|
|
B_ModFooter.Enabled := False;
|
|
end;
|
|
|
|
procedure TfrmMain.B_ConnectClick(Sender: TObject);
|
|
begin
|
|
ADOConnection1.Connected := not ADOConnection1.Connected;
|
|
MainTable.Active := ADOConnection1.Connected;
|
|
LookupTable.Active := ADOConnection1.Connected;
|
|
end;
|
|
|
|
procedure TfrmMain.B_TitleIndicClick(Sender: TObject);
|
|
begin
|
|
Inc(Compteur);
|
|
if (Compteur = 1) then
|
|
begin
|
|
JvDBGrid1.Options := JvDBGrid1.Options - [dgTitles];
|
|
end
|
|
else if (Compteur = 2) then
|
|
begin
|
|
JvDBGrid1.Options := JvDBGrid1.Options - [dgIndicator];
|
|
end
|
|
else if (Compteur = 3) then
|
|
begin
|
|
JvDBGrid1.Options := JvDBGrid1.Options + [dgTitles];
|
|
end
|
|
else if (Compteur = 4) then
|
|
begin
|
|
JvDBGrid1.Options := JvDBGrid1.Options + [dgIndicator];
|
|
Compteur := 0;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.B_WordWrapClick(Sender: TObject);
|
|
begin
|
|
JvDBGrid1.WordWrap := not JvDBGrid1.WordWrap;
|
|
end;
|
|
|
|
procedure TfrmMain.B_ShowEditClick(Sender: TObject);
|
|
begin
|
|
if (dgAlwaysShowEditor in JvDBGrid1.Options) then
|
|
JvDBGrid1.Options := JvDBGrid1.Options - [dgAlwaysShowEditor]
|
|
else
|
|
JvDBGrid1.Options := JvDBGrid1.Options + [dgAlwaysShowEditor];
|
|
end;
|
|
|
|
procedure TfrmMain.DBMemo1Enter(Sender: TObject);
|
|
begin
|
|
// Text is selected automatically
|
|
TDBMemo(Sender).SelectAll;
|
|
end;
|
|
|
|
procedure TfrmMain.JvDBComboBox1KeyPress(Sender: TObject; var Key: Char);
|
|
begin
|
|
if (Key = #13) then
|
|
JvDBGrid1.CloseControl;
|
|
end;
|
|
|
|
procedure TfrmMain.DBLookupComboBox1KeyPress(Sender: TObject;
|
|
var Key: Char);
|
|
begin
|
|
if (Key = #13) then
|
|
JvDBGrid1.CloseControl
|
|
else
|
|
if (Key = #27) then
|
|
DBLookupComboBox1.Field.Value := DBLookupComboBox1.Field.OldValue;
|
|
end;
|
|
|
|
procedure TfrmMain.JvDBGrid1RestoreGridPosition(Sender: TJvDBUltimGrid;
|
|
SavedBookmark: Pointer; SavedRowPos: Integer);
|
|
begin
|
|
// Perfect cursor replacement
|
|
if (MainTable.BookmarkValid(SavedBookmark)) then
|
|
MainTable.Recordset.Bookmark := POleVariant(SavedBookmark)^;
|
|
try
|
|
MainTable.Resync([rmExact]);
|
|
except
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.B_SearchClick(Sender: TObject);
|
|
var
|
|
ResultCol: Integer;
|
|
ResultField: TField;
|
|
Found: Boolean;
|
|
begin
|
|
// Search of W (uppercase) in Software field, then search of 1 in Licenses field
|
|
Found := false;
|
|
JvDBGrid1.SaveGridPosition;
|
|
JvDBGrid1.SearchFields.Clear;
|
|
JvDBGrid1.SearchFields.Add('Software');
|
|
if (JvDBGrid1.Search('W', ResultCol, ResultField, True, False, True)) then
|
|
begin
|
|
Found := (MainTable.FieldByName('Licenses').AsString = '1');
|
|
while (not Found) do
|
|
begin
|
|
if (not JvDBGrid1.SearchNext(ResultCol, ResultField, True, False, True)) then
|
|
break;
|
|
Found := (MainTable.FieldByName('Licenses').AsString = '1');
|
|
end;
|
|
end;
|
|
if (Found) then
|
|
ShowMessage('Result found:'#13#10 + ResultField.AsString)
|
|
else
|
|
begin
|
|
JvDBGrid1.RestoreGridPosition();
|
|
ShowMessage('Not found');
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.JvDBGridFooter1Calculate(Sender: TJvDBGridFooter;
|
|
const FieldName: String; var CalcValue: Variant);
|
|
var
|
|
C: Integer;
|
|
begin
|
|
if (MainTable.Active) then
|
|
begin
|
|
if (AnsiSameText(FieldName, 'Licenses')) then
|
|
begin
|
|
CountQuery.Open();
|
|
if (CountQuery.Eof) then
|
|
CalcValue := 'ERROR'
|
|
else
|
|
CalcValue := CountQuery.FieldByName('Total').AsInteger;
|
|
CountQuery.Close();
|
|
end
|
|
else
|
|
if (AnsiSameText(FieldName, 'Category')) then
|
|
begin
|
|
CalcValue := string('');
|
|
for C := 0 to JvDBGrid1.Columns.Count-1 do
|
|
begin
|
|
if (JvDBGrid1.Columns.Items[C].Visible) then
|
|
begin
|
|
if (CalcValue <> string('')) then
|
|
CalcValue := CalcValue + string(',');
|
|
CalcValue := CalcValue +
|
|
IntToStr(JvDBGrid1.Columns.Items[C].Width);
|
|
end;
|
|
end;
|
|
CalcValue := 'Widths = ' + CalcValue;
|
|
end
|
|
else
|
|
CalcValue := MainTable.RecordCount;
|
|
end
|
|
else
|
|
CalcValue := FieldName;
|
|
end;
|
|
|
|
end.
|