Published Property - Rozwijana lista

0

Witam,
chciałbym umieścić w swoim komponencie właściwość, która jest wybierana z rozwijanej listy. Problem jest taki, że itemy z tej listy są ustawiane dopiero po podpięciu przez użytkownika komponentów od bazy danych. W tej liście chciałem umieścić nazwy tabel z tej bazy. Prosiłbym was o pomoc.

Pozdrawiam,

1

Witam,
chciałbym umieścić w swoim komponencie właściwość, która jest wybierana z rozwijanej listy. Problem jest taki, że itemy z tej listy są ustawiane dopiero po podpięciu przez użytkownika komponentów od bazy danych. W tej liście chciałem umieścić nazwy tabel z tej bazy. Prosiłbym was o pomoc.

Jakiej formy pomocy oczekujesz? Poklepania po plecach? <Klepie po plecach> Lepiej?
1.Jakie to Delphi? Chyba nie 7?
2.Jaka rozwijana lista? Nie możesz rzeczy opisać po 'lucku'?
3.Chcesz umieścić właściwości które nie są znane w czasie projektowania (możesz się podłączyć do dowolnej bazy danych)? Jak ty sobie to wyobrażasz?

0
-123oho napisał(a):

3.Chcesz umieścić właściwości które nie są znane w czasie projektowania (możesz się podłączyć do dowolnej bazy danych)? Jak ty sobie to wyobrażasz?
Dlatego nie rób tego pola published tylko zwykłe public. No chyba, że ty rzeczywiście chcesz mieć to pole w designerze?

0

-123oho "Hello I'm Marco Cantu, fuc..ing Genius and delphi guru"
Poniżej zamieszczam kod komponentu

type TDBClientBox = class( TAdvMultiColumnDropDown )
  private
    // Komponent - Połączenie z bazą danych
    FUniConnection : TUniConnection;

    // Komponent - Zapytania SQL
    FUniQuery : TUniQuery;

    // Lista baz danych
    FDataBase : TStrings;

  protected
    //function SetDataBase : String;
    procedure SetUniConnection( const value : TUniConnection );
    procedure SetUniQuery( const value : TUniQuery );
    procedure SetUniDataBase;

  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

  published
    property UniConnection : TUniConnection read FUniConnection Write SetUniConnection;
    property UniQuery : TUniQUery read FUniQuery Write SetUniQuery;
    property UniDataBase : TStrings read FDataBase write FDataBase;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('SoftSource', [TDBClientBox]);
end;
//------------------------------------------------------------------------------
constructor TDBClientBox.Create(AOwner: TComponent);
begin
  inherited;
  self.FDataBase := TStringList.Create;
end;
//------------------------------------------------------------------------------
destructor TDBClientBox.Destroy;
begin
  FreeAndNil( self.FDataBase );
  inherited;
end;
//------------------------------------------------------------------------------
procedure TDBClientBox.SetUniConnection( const value: TUniConnection);
begin
  self.FUniConnection := value;
  self.SetUniDataBase;
end;
//------------------------------------------------------------------------------
procedure TDBClientBox.SetUniQuery( const value: TUniQuery);
begin
  self.FUniQuery := value;
  self.SetUniDataBase;
end;
//------------------------------------------------------------------------------
procedure TDBClientBox.SetUniDataBase;
var i : integer;
begin
  if ( Assigned( self.FUniConnection )) AND ( Assigned( self.FUniQuery )) AND ( self.UniConnection.Connected ) then
  with self.FUniQuery do Begin
    SQL.Clear;
    SQL.Add( 'Select name from sys.databases' );
    Execute;

    for i := 1 to RecordCount do Begin
       self.FDataBase.Add(  FieldByName('name').AsString );
       RecNo := RecNo + 1;
    End;

  End;
end;
//------------------------------------------------------------------------------
 

w wyniku tego kodu dostaje rezultat: Załącznik1
po podpięciu komponentów: UniConnection oraz UniQuery, pole UniDataBase wypełnia mi się listą baz występujących na podłączonym serwerze.
Problem w tym, że bazy wylistowane są w formie Memo. Ja chciałbym, żeby było to w formie ComboBoxa ( załącznik nr 2 ).
Gdzie użytkownik wybiera sobie, na której bazie mój komponent ma pracować.

Pozdrawiam,

0

Moje Delphi XE Proffesional krzyczy, że brakuje mu modułu DsgnIntf. Nie sądziłem, że zwykły combobox jako property to tyle problemów.
Pozdrawiam,

1 użytkowników online, w tym zalogowanych: 0, gości: 1