Конференция "Компоненты" » Создать заполненный ComboBox [D7, WinXP]
 
  • Evo (02.08.12 15:42) [0]
    Здравствуйте. Подскажите пожалуйста, как создать компонент - наследник TComboBox, который при создании уже будет содержать некоторые строки.
  • DimaBr © (02.08.12 16:33) [1]
    Перекрыть конструктор и вставить в него эти строки
  • Evo (02.08.12 16:41) [2]
    Делал так:

    constructor TSerialBaudrateComboBox.Create(AOwner: TComponent);
    begin
           inherited Create(AOwner);
           //Parent := AOwner as TWinControl;
           Style := csDropDownList;
           Font.Size := 10;
           Font.Style := [fsBold];
           Items.Add('110');
           Items.Add('300');
           Items.Add('600');
           Items.Add('1200');
           Items.Add('2400');
           Items.Add('4800');
           Items.Add('9600');
           Items.Add('14400');
           Items.Add('19200');
           Items.Add('38400');
           Items.Add('56000');
           Items.Add('57600');
           Items.Add('115200');
           Items.Add('128000');
           Items.Add('256000');
    end;



    Ошибка при вставке компонента на форму: Control '' has no parent window
  • Медвежонок Пятачок © (02.08.12 17:06) [3]
    зачем же ты зарегистрировал в иде неотлаженный компонент?
  • Evo (02.08.12 17:09) [4]
    Мне показалось, что так будет быстрее.
  • Медвежонок Пятачок © (02.08.12 17:12) [5]
    ну вот теперь ты видишь и правишь один код, а ошибку генерирует совсем другой код твоего комбобокса.
    молодец.
  • Evo (02.08.12 17:13) [6]
    При такой модификации во время выполнения строки присутствуют. А почему не получается сделать аналогично во время проектирования, чтобы при клике на Items в инспекторе объектов видеть эти строчки?

    constructor TSerialBaudrateComboBox.Create(AOwner: TComponent);
    begin
           inherited Create(AOwner);

           Style := csDropDownList;
           Font.Size := 10;
           Font.Style := [fsBold];
           if not (csDesigning in ComponentState) then
           begin
                   Items.Add('110');
                   Items.Add('300');
                   Items.Add('600');
                   Items.Add('1200');
                   Items.Add('2400');
                   Items.Add('4800');
                   Items.Add('9600');
                   Items.Add('14400');
                   Items.Add('19200');
                   Items.Add('38400');
                   Items.Add('56000');
                   Items.Add('57600');
                   Items.Add('115200');
                   Items.Add('128000');
                   Items.Add('256000');
           end;
    end;

  • Evo (02.08.12 17:16) [7]
    Медвежонок Пятачок, возможно, ошибка генерируется из-за того, что комбобокс пытается отреагировать на изменения свойства Items и для этого ему нужно знать Parent (наверное), который определяется после выполнения кода конструктора.
  • Медвежонок Пятачок © (02.08.12 17:18) [8]
    потому что итемсы это паблишед свойство, и оно читается во время лоадед из дфм.
    а в дфм у тебя пусто.
  • Evo (02.08.12 17:29) [9]
           
    CBox := TComboBox.Create(Self);
    CBox.Items.Add('test');



    Здесь комбобокс создаётся во время выполнения. Но та же ошибка "Control '' has no parent window". Значит, дело не в загрузке из .dfm?
  • Медвежонок Пятачок © (02.08.12 17:31) [10]
    а теперь снова смотри [5]
  • Evo (02.08.12 17:45) [11]
    Как сделать аналогично, чтобы во время проектирования при клике на Items в инспекторе объектов видеть эти строчки?
  • Медвежонок Пятачок © (02.08.12 17:49) [12]
    как как. добавить эти строчки конечно же.
    когда уже есть парент.
  • Evo (02.08.12 17:53) [13]
    Я имел ввиду следующее. Бросаешь компонент на форму. Смотришь в инспекторе объектов Items и обнаруживаешь там несколько строчек.
  • Медвежонок Пятачок © (02.08.12 18:03) [14]
    без разницы что ты там имел.
    хочешь видеть строки - создай их.
  • DimaBr © (03.08.12 09:18) [15]

    TMyComboBox = class(TComboBox)
     protected
       procedure CreateWnd;override;
    end;

    implementation

    { TMyComboBox }

    procedure TMyComboBox.CreateWnd;
    begin
     inherited;
     Items.Add('1');
    end;

  • Evo (03.08.12 09:49) [16]
    DimaBr, спасибо!
 
Конференция "Компоненты" » Создать заполненный ComboBox [D7, WinXP]
Есть новые Нет новых   [118411   +35][b:0][p:0.003]