home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 October
/
Chip_2001-10_cd1.bin
/
zkuste
/
delphi
/
kolekce
/
d6
/
FRCLX.ZIP
/
SOURCE
/
FR_DBLookupCtl.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-07-06
|
5KB
|
174 lines
{******************************************}
{ }
{ FastReport CLX v2.4 - DB components }
{ Lookup control }
{ }
{ Copyright (c) 1998-2001 by Tzyganenko A. }
{ }
{******************************************}
unit FR_DBLookupCtl;
interface
{$I FR.inc}
uses
Types, SysUtils, Classes, QGraphics, FR_Class, QStdCtrls,
QControls, QForms, QMenus, QDialogs, DB, QDBCtrls, FR_DCtrl;
type
TfrDBLookupControl = class(TfrStdControl)
private
FLookup: TDBLookupComboBox;
FListSource: String;
protected
procedure SetPropValue(Index: String; Value: Variant); override;
function GetPropValue(Index: String): Variant; override;
public
constructor Create; override;
destructor Destroy; override;
procedure LoadFromStream(Stream: TStream); override;
procedure SaveToStream(Stream: TStream); override;
procedure DefineProperties; override;
procedure Loaded; override;
end;
implementation
uses FR_Utils, FR_DBRel, FR_DBUtils, FR_Const, Variants;
{ TfrDBLookupControl }
constructor TfrDBLookupControl.Create;
begin
inherited Create;
FLookup := TDBLookupComboBox.Create(nil);
FLookup.Parent := frDialogForm;
AssignControl(FLookup);
BaseName := 'DBLookupComboBox';
dx := 145; dy := 21;
end;
destructor TfrDBLookupControl.Destroy;
begin
FLookup.Free;
inherited Destroy;
end;
procedure TfrDBLookupControl.DefineProperties;
function GetFields: String;
var
i: Integer;
sl: TStringList;
ds: TDataSet;
begin
Result := '';
if (FLookup.ListSource = nil) or (FLookup.ListSource.DataSet = nil) then Exit;
ds := FLookup.ListSource.DataSet;
sl := TStringList.Create;
frGetFieldNames(TfrTDataSet(ds), sl);
for i := 0 to sl.Count - 1 do
Result := Result + sl[i] + ';';
sl.Free;
end;
function GetListSource: String;
var
i: Integer;
sl: TStringList;
begin
Result := '';
sl := TStringList.Create;
frGetComponents(frDialogForm, TDataSet, sl, nil);
sl.Sort;
for i := 0 to sl.Count - 1 do
Result := Result + sl[i] + ';';
sl.Free;
end;
begin
inherited DefineProperties;
AddEnumProperty('KeyField', GetFields, [Null]);
AddEnumProperty('ListField', GetFields, [Null]);
AddEnumProperty('ListSource', GetListSource, [Null]);
AddProperty('Text', [], nil);
end;
procedure TfrDBLookupControl.SetPropValue(Index: String; Value: Variant);
var
d: TDataset;
begin
inherited SetPropValue(Index, Value);
Index := AnsiUpperCase(Index);
if Index = 'TEXT' then
FLookup.KeyValue := Value
else if Index = 'KEYFIELD' then
FLookup.KeyField := Value
else if Index = 'LISTFIELD' then
FLookup.ListField := Value
else if Index = 'LISTSOURCE' then
begin
d := frFindComponent(frDialogForm, Value) as TDataSet;
FLookup.ListSource := frGetDataSource(frDialogForm, d);
end;
FLookup.DropDownAlign := daLeft;
end;
function TfrDBLookupControl.GetPropValue(Index: String): Variant;
begin
Index := AnsiUpperCase(Index);
Result := inherited GetPropValue(Index);
if Result <> Null then Exit;
if Index = 'TEXT' then
Result := FLookup.KeyValue
else if Index = 'KEYFIELD' then
Result := FLookup.KeyField
else if Index = 'LISTFIELD' then
Result := FLookup.ListField
else if Index = 'LISTSOURCE' then
Result := frGetDataSetName(frDialogForm, FLookup.ListSource)
end;
procedure TfrDBLookupControl.LoadFromStream(Stream: TStream);
begin
inherited LoadFromStream(Stream);
FListSource := frReadString(Stream);
Prop['ListSource'] := FListSource;
Prop['KeyField'] := frReadString(Stream);
Prop['ListField'] := frReadString(Stream);
end;
procedure TfrDBLookupControl.SaveToStream(Stream: TStream);
begin
inherited SaveToStream(Stream);
frWriteString(Stream, Prop['ListSource']);
frWriteString(Stream, Prop['KeyField']);
frWriteString(Stream, Prop['ListField']);
end;
procedure TfrDBLookupControl.Loaded;
begin
Prop['ListSource'] := FListSource;
inherited Loaded;
end;
var
Bmp: TBitmap;
initialization
Bmp := TBitmap.Create;
Bmp.LoadFromResourceName(hInstance, 'FR_DBLOOKUPCONTROL');
frRegisterControl(TfrDBLookupControl, Bmp, (SInsertDBLookup));
finalization
frUnRegisterObject(TfrDBLookupControl);
Bmp.Free;
end.