lazarus-ccr/components/orpheus/tests/TestTable/unit1.pas

156 lines
4.7 KiB
ObjectPascal

unit Unit1;
interface
uses
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, {$ENDIF}
SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
ovcbase, ovctcbmp, ovctccbx, ovctcgly, ovctcbox, ovctcedt,
ovctchdr, ovctcmmn, ovctcell, ovctcstr, ovctable;
const
MaxDataRecs = 20;
MaxStrLen = 100;
MaxMemoLen = 1000;
cnStr = 1; {Column numbers for controls}
cnMemo = 2;
cnCheckbox = 3;
cnCombo = 4;
cnBitmap = 5;
type
TDataRec = record
Str : string[MaxStrLen];
Memo : array[0..MaxMemoLen] of Char;
Check : TCheckBoxState;
ComboIndex : Integer;
Bitmap : TBitmap;
end;
TDataArray = array[1..MaxDataRecs] of TDataRec;
TForm1 = class(TForm)
OvcTable1: TOvcTable;
OvcController1: TOvcController;
OvcTCColHead1: TOvcTCColHead;
OvcTCRowHead1: TOvcTCRowHead;
OvcTCString1: TOvcTCString;
OvcTCMemo1: TOvcTCMemo;
OvcTCCheckBox1: TOvcTCCheckBox;
OvcTCComboBox1: TOvcTCComboBox;
OvcTCBitMap1: TOvcTCBitMap;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure OvcTable1GetCellData(Sender: TObject; RowNum,
ColNum: Integer; var Data: Pointer; Purpose: TOvcCellDataPurpose);
procedure OvcTCComboBox1Change(Sender: TObject);
private
BmpPath : string; {Path to Orpheus .bmp files}
DataArray : TDataArray; {A place to store data entered in table}
public
end;
var
Form1: TForm1;
implementation
{$IFNDEF LCL}
{$R *.dfm} {Link Delphi form file}
{$ENDIF}
procedure TForm1.FormCreate(Sender: TObject);
{Initialize the main form.
Do anything that needs to be done before the form
can be displayed.}
var
SearchResult : Integer;
SearchRec : TSearchRec;
begin
OvcTable1.RowLimit := MaxDataRecs + OvcTable1.LockedRows;
OvcTCString1.MaxLength := MaxStrLen; {Be sure to set this here or in form}
OvcTCMemo1.MaxLength := MaxMemoLen;
{Populate cell combo box with names of Orpheus control bitmap files.
Assumes bitmap files are two levels up from program with Windows and GTK
or five levels up with OS X app bundle folder.}
BmpPath := ExtractFilePath(ParamStr(0)) + '..' + PathDelim + '..' + PathDelim;
if FindFirst(BmpPath + 'TO*.bmp', 0, SearchRec) <> 0 then
begin
BmpPath := '..' + PathDelim + '..' + PathDelim;
if FindFirst(BmpPath + 'TO*.bmp', 0, SearchRec) <> 0 then
BmpPath := ExtractFilePath(ParamStr(0)) + '..' + PathDelim + '..' +
PathDelim + '..' + PathDelim + '..' + PathDelim + '..' + PathDelim;
end;
OvcTCComboBox1.Items.Add(' (None)'); {So we can "unselect"}
try
SearchResult := FindFirst(BmpPath + 'TO*.bmp', 0, SearchRec);
while SearchResult = 0 do {Do until no more matching files found}
begin
OvcTCComboBox1.Items.Add(SearchRec.Name);
SearchResult := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
end; {TForm1.FormCreate}
procedure TForm1.FormDestroy(Sender: TObject);
var
RecNum : Integer;
begin
for RecNum := 1 to MaxDataRecs do {Free any TBitmap's created}
DataArray[RecNum].Bitmap.Free;
end; {TForm1.FormDestroy}
procedure TForm1.OvcTable1GetCellData(Sender: TObject; RowNum,
ColNum: Integer; var Data: Pointer; Purpose: TOvcCellDataPurpose);
{This event handler is called when the table needs data to display
or edit in a cell or a place to save a cell's edited data.}
begin
Data := nil;
if (RowNum < OvcTable1.LockedRows) or (RowNum > OvcTable1.RowLimit) then
Exit;
case ColNum of
cnStr : Data := @DataArray[RowNum].Str;
cnMemo : Data := @DataArray[RowNum].Memo;
cnCheckbox : Data := @DataArray[RowNum].Check;
cnCombo : Data := @DataArray[RowNum].ComboIndex;
cnBitmap : Data := pointer(DataArray[RowNum].Bitmap);
end;
end; {TForm1.OvcTable1GetCellData}
procedure TForm1.OvcTCComboBox1Change(Sender: TObject);
{This event handler is called whenever combo box selection
changes.
Note: TOvcTCComboBox is not descended from TCustomComboBox, but
its editing control (Sender) is, so okay to typecast it in order
to reference ItemIndex.}
begin
DataArray[OvcTable1.ActiveRow].Bitmap.Free;
DataArray[OvcTable1.ActiveRow].Bitmap := nil;
if TCustomComboBox(Sender).ItemIndex > 0 then {Bitmap file selected?}
begin
DataArray[OvcTable1.ActiveRow].Bitmap := TBitmap.Create;
DataArray[OvcTable1.ActiveRow].Bitmap.LoadFromFile(
BmpPath + OvcTCComboBox1.Items[TCustomComboBox(Sender).ItemIndex]);
end;
OvcTable1.AllowRedraw := False;
OvcTable1.InvalidateCell(OvcTable1.ActiveRow, cnBitmap); {Force display of bitmap}
OvcTable1.AllowRedraw := True;
end; {TForm1.OvcTCComboBox1Change}
initialization
{$IFDEF LCL}
{$I unit1.lrs} {Include form's Lazarus resource file}
{$ENDIF}
end.