started TDBComboBox

git-svn-id: trunk@4638 -
This commit is contained in:
mattias 2003-09-18 10:53:05 +00:00
parent 5e5c1122a7
commit f7dcbba69f
4 changed files with 199 additions and 1 deletions

1
.gitattributes vendored
View File

@ -807,6 +807,7 @@ lcl/include/customradiogroup.inc svneol=native#text/pascal
lcl/include/customstatictext.inc svneol=native#text/pascal
lcl/include/customupdown.inc svneol=native#text/pascal
lcl/include/dbcheckbox.inc svneol=native#text/pascal
lcl/include/dbcombobox.inc svneol=native#text/pascal
lcl/include/dbedit.inc svneol=native#text/pascal
lcl/include/dblistbox.inc svneol=native#text/pascal
lcl/include/dbradiogroup.inc svneol=native#text/pascal

View File

@ -344,6 +344,68 @@ Type
property ValueUnchecked: string read FValueUncheck write SetValueUncheck;
property Visible;
end;
{ TDBComboBox }
TDBComboBox = class(TCustomComboBox)
private
FDataLink: TFieldDataLink;
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function GetReadOnly: Boolean;
procedure SetDataField(const AValue: string);
procedure SetDataSource(const AValue: TDataSource);
procedure SetReadOnly(const AValue: Boolean);
protected
function GetComboText: string; virtual;
procedure SetComboText(const NewText: string); virtual;
procedure DataChange(Sender: TObject); virtual;
procedure EditingChange(Sender: TObject); virtual;
procedure UpdateData(Sender: TObject); virtual;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
property Field: TField read GetField;
property Text;
property ItemIndex;
published
property Anchors;
property ArrowKeysTraverseList;
property AutoDropDown;
property Ctl3D;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DropDownCount;
property Enabled;
property Font;
property ItemHeight;
property Items write SetItems;
property ItemWidth;
property MaxLength default -1;
property OnChange;
property OnClick;
property OnCloseUp;
property OnDrawItem;
property OnDropDown;
property OnEnter;
property OnExit;
Property OnKeyDown;
property OnKeyPress;
Property OnKeyUp;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property ShowHint;
property Sorted;
property Style;
property TabOrder;
property TabStop;
property Visible;
end;
// ToDo: Move this to db.pp
function ExtractFieldName(const Fields: string; var StartPos: Integer): string;
@ -675,12 +737,16 @@ end;
{$Include dblistbox.inc}
{$Include dbradiogroup.inc}
{$Include dbcheckbox.inc}
{$Include dbcombobox.inc}
end.
{ =============================================================================
$Log$
Revision 1.5 2003/09/18 10:50:05 mattias
started TDBComboBox
Revision 1.4 2003/09/16 11:35:14 mattias
started TDBCheckBox

129
lcl/include/dbcombobox.inc Normal file
View File

@ -0,0 +1,129 @@
// included by dbctrls.pas
{
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.LCL, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
}
{ TDBComboBox }
function TDBComboBox.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;
function TDBComboBox.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
function TDBComboBox.GetField: TField;
begin
Result := FDataLink.Field;
end;
function TDBComboBox.GetReadOnly: Boolean;
begin
Result := FDataLink.ReadOnly;
end;
procedure TDBComboBox.SetDataField(const AValue: string);
begin
FDataLink.FieldName := AValue;
end;
procedure TDBComboBox.SetDataSource(const AValue: TDataSource);
begin
if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
FDataLink.DataSource := AValue;
if AValue <> nil then
AValue.FreeNotification(Self);
end;
procedure TDBComboBox.SetReadOnly(const AValue: Boolean);
begin
FDataLink.ReadOnly := AValue;
end;
function TDBComboBox.GetComboText: string;
var
i: Integer;
begin
if Style in [csDropDown,csSimple] then
Result:=Text
else begin
i:=ItemIndex;
if i<0 then
Result := ''
else
Result := Items[i];
end;
end;
procedure TDBComboBox.SetComboText(const NewText: string);
var
i: Integer;
begin
if NewText=GetComboText then exit;
if NewText='' then
i:=-1
else
i:=Items.IndexOf(NewText);
ItemIndex:=i;
if ItemIndex>=0 then Exit;
if Style in [csDropDown,csSimple] then Text:=NewText;
end;
procedure TDBComboBox.DataChange(Sender: TObject);
begin
if not (Style = csSimple) and DroppedDown then Exit;
if FDataLink.Field <> nil then
// ToDo: use Field.Text
SetComboText(FDataLink.Field.DisplayText)
else
if csDesigning in ComponentState then
SetComboText(Name)
else
SetComboText('');
end;
procedure TDBComboBox.EditingChange(Sender: TObject);
begin
// ToDo
end;
procedure TDBComboBox.UpdateData(Sender: TObject);
begin
// ToDo: use Field.Text
FDataLink.Field.AsString:=GetComboText;
end;
constructor TDBComboBox.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
ControlStyle := ControlStyle+[csReplicatable];
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := @DataChange;
FDataLink.OnUpdateData := @UpdateData;
FDataLink.OnEditingChange := @EditingChange;
end;
destructor TDBComboBox.Destroy;
begin
FDataLink.Free;
FDataLink := nil;
inherited Destroy;
end;
// included by dbctrls.pas

View File

@ -120,7 +120,9 @@ end;
function TDBRadioGroup.GetButtonValue(Index: Integer): string;
begin
if (Index<FValues.Count) and (FValues[Index]<>'') then
if Index<0 then
Result:=''
else if (Index<FValues.Count) and (FValues[Index]<>'') then
Result:=FValues[Index]
else if Index<Items.Count then
Result:=Items[Index]