Вопрос по синтаксису?

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

Как можно создать прямо в процедуре, так чтобы:
ComboBox(N)
Где N целочисленная переменная?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Не понятен вопрос, создать много ComboBox'ов, что-ли, а потом обращаться к ним, как к массиву?
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

somewhere,
Нужно создавать комбо боксы, чтобы они отличались по именам, но неизвестно сколько их. Т.е. их в массиве нужно хранить?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Боксы все-равно будут на форме (наверное), поэтому каждому боксу в поле Tag можно задать его номер, а обращаться можно через Form.Controls. Берешь контрол, если это комбос, то проверяешь его Tag, а там дальше танцуешь. Для удобства можно использовать панель на форме, и также Panel.Controls
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

somewhere,
Немного не понял Form.Controls.Tag я задаю какой-то и дальше продолжаю работать с этим самым Комбобоксом?
т.е.
Form.Controls.Tag := 1; Первый комбобокс

Как к ним потом обращаться к конкретным?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

For I := 1 to 10 do
begin
MyCombo := TComboBox.Create(MyForm);
MyCombo.Left := 15;
MyCombo.Top := 24*I;
MyCombo.Tag := I;
end;
For I:=1 to MyForm.ControlCount do
begin
If (MyForm.Controls.ClassNameIs('TComboBox')) and (MyForm.Controls.Tag = 7) then
begin
.........
.........
end;
end;
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

somewhere,
Гм, все равно не получается.
Согдал ListBox с Tag := 1.

Главная форма Form1, пробую:
Form1.Controls[1].Items.Add('Не получается');

Что-то я невъехал совсем :(


Для удобства можно использовать панель на форме, и также Panel.Controls
У меня получается есть PageControl1, все происходит на 1 закладке. На которой еще есть GroupBox2 вот с этим непонимаю. Нашел такой пример:
TCheckBox(PanelTest.Controls).Checked:=True


тут автор получается указывает, что это чекбокс. Но у него есть форма на которой PanelTest и в нем чекбоксы... Вот тут вся и проблема- непонимаю как мне бращаться с такой структурой. Постоянно выдает ошибку как не пробовал..
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Controls содержит динамический массив из объектов типа TControl.
TComboBox - наследник TControl, т.е. включает все его свойства и методы
ControlCount - это сколько всего объектов в Controls, я ошибся в тексте, т.к. отчет идет с нуля.
Чтобы прога поняла, что за контрол находиться в Controls, выполняеться указание на тип, т.е. :

Controls - тип TControl
TComboBox(Controls) - это уже TComboBox.

Вот листинг для примера, возьми пустую Form1 и повесь Button1 в любое место, посмотри как она работает:

procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
MyCombo : TComboBox;
begin
For I := 1 to 10 do
begin
MyCombo := TComboBox.Create(Form1);
MyCombo.Left := 15;
MyCombo.Top := 24*I;
MyCombo.Tag := I;
Form1.InsertControl(MyCombo);
end;

For I:=0 to Form1.ControlCount-1 do
begin
If (Form1.Controls.ClassNameIs('TComboBox')) and (Form1.Controls.Tag = 7) then
begin
TComboBox(Form1.Controls).Text := 'Its all right';
end;
end;
end;

Form1.Controls[1].Items.Add('Не получается');


А так точно не получиться, Controls[1] - тип TControl, не имеет свойства Items, ну как, понятно?
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

Form1.InsertControl(ListBox);
Вот что не работало оказывается! Теперь понятно :)
Это нужно инициализировать для каждого где мы используем?

Один вопрос только непонятен:

Код: Выделить всё

Form1.InsertControl(MilkSelect);
Это я инициализировал свой ListBox
Но теперь PageControl1 на всех страница поверх всего выводит эти лист боксы.... как тут верно записать, чтобы такого глюка не было?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

В принципе, если Panel.Controls содержит только комбосы, то Tag как бы и не нужен, можно получать доступ к I-ому комбосу как Controls[I-1]
It's a long way to the top if you wanna rock'n'roll
Ответить