diff --git a/.gitattributes b/.gitattributes index dcab749d35..c0de40840e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/lcl/dbctrls.pp b/lcl/dbctrls.pp index c499a0da3b..d47e55ab83 100644 --- a/lcl/dbctrls.pp +++ b/lcl/dbctrls.pp @@ -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 diff --git a/lcl/include/dbcombobox.inc b/lcl/include/dbcombobox.inc new file mode 100644 index 0000000000..3b1e8cc771 --- /dev/null +++ b/lcl/include/dbcombobox.inc @@ -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 + diff --git a/lcl/include/dbradiogroup.inc b/lcl/include/dbradiogroup.inc index 0e8f256b20..d26dc0df27 100644 --- a/lcl/include/dbradiogroup.inc +++ b/lcl/include/dbradiogroup.inc @@ -120,7 +120,9 @@ end; function TDBRadioGroup.GetButtonValue(Index: Integer): string; begin - if (Index'') then + if Index<0 then + Result:='' + else if (Index'') then Result:=FValues[Index] else if Index