создание собственного компонента в Delphi
От: VooDoo-KB Россия  
Дата: 24.08.04 11:50
Оценка:
Доброе время суток!
У меня возникла одна проблемка, а заключается она в следующем: необходимо создать собственный компонент на основе(TComboBox). В новый компонент должны быть добавлены 2 новых свойства
1 свойство — DataSet_DB — в нем должны на этапе проектирования выводиться все все наборы данных(НД) проекта.
2 свойство — Field_DB — в нем, автоматически после установки значения DataSet_DB, должен выводиться список полей выбранного НД.

И после установки пользователем этих 2-ух свойств в нашем ComboBox-e должен выводиться список значений полей из выбранного НД. В результате получается очень полезный компонент для работы с БД!
Все бы хорошо, но вот в одном месте кода возникает непонятная ошибка!
листинг:


unit comboBox_class;
interface
uses
  SysUtils, Classes, QControls, QStdCtrls, Messages,
  Windows, Graphics, Forms, Controls, StdCtrls, Dialogs, db;

type
  tcomboBox_class = class(TComboBox)
    private
    { Private declarations }
     FDataEntText: TDataSet;
     FFieldEntText: TCOmboBox;
  protected
    { Protected declarations }
    procedure SetDataEntText(value: TDataSet);
    procedure SetFieldEntText(value: TCOmboBox);
  public
    { Public declarations }
    constructor create(AOwner: TComponent);override;
  published

property  FIELDS_DB:TCOmboBox read FFieldEntText 
                              write SetFieldEntText;
property DATASET_DB:TDataSet read FDataEntText 
                             write SetDataEntText;
    
  end;

procedure Register;

implementation
Procedure TCombobox_class.SetDataEntText(value: TDataSet);
begin
{------------------------------------------------------}
 FDataEntText:=value;
//а дальше 3 варианта и ни один не работает ???
{1 вариант для случая FIELDS_DB:TCOmboBox ???}

{ FDataEntText.GetFieldNames(self.FFieldEntText.Items);}

{2 вариант тоже для случая FIELDS_DB:TCOmboBox ???}
 
{
     while not FDataEntText.Eof;
     do
     begin
         FFieldEntText.Items.Add
         ( FDataEntText.Fields[0].AsString);
         FDataEntText.Next;
     end;

   end;
}

{3 вариант для случая FIELDS_DB:TStrings (вверху заменить на TStrings ) ???}
//self - по усмотрению
{FDataEntText.GetFieldNames(self.FIELDS_DB);}
//или
{FDataEntText.GetFieldNames(self.FFieldEntText);}



Procedure TCombobox_class.SetFieldEntText(value: TCOmboBox);
begin
FFieldEntText:=value;
FFieldEntText.Clear;

    

constructor TComboBox_class.create(AOwner: TComponent);
begin
  inherited create(AOwner);

 // if FDataEntText<>nil then FDataEntText.GetFieldNames(self.items);
  
end;

procedure Register;
begin
  RegisterComponents('Standard', [tcomboBox_class]);

end;

end.




24.08.04 16:12: Перенесено модератором из 'Базы данных' — Merle
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.