Страница 1 из 2
Вопрос по синтаксису?
Добавлено: 24 окт 2006, 11:31
Nikoshka
Как можно создать прямо в процедуре, так чтобы:
ComboBox(N)
Где N целочисленная переменная?
Добавлено: 24 окт 2006, 11:40
somewhere
Не понятен вопрос, создать много ComboBox'ов, что-ли, а потом обращаться к ним, как к массиву?
Добавлено: 24 окт 2006, 12:22
Nikoshka
somewhere,
Нужно создавать комбо боксы, чтобы они отличались по именам, но неизвестно сколько их. Т.е. их в массиве нужно хранить?
Добавлено: 24 окт 2006, 12:32
somewhere
Боксы все-равно будут на форме (наверное), поэтому каждому боксу в поле Tag можно задать его номер, а обращаться можно через Form.Controls. Берешь контрол, если это комбос, то проверяешь его Tag, а там дальше танцуешь. Для удобства можно использовать панель на форме, и также Panel.Controls
Добавлено: 24 окт 2006, 12:47
Nikoshka
somewhere,
Немного не понял Form.Controls.Tag я задаю какой-то и дальше продолжаю работать с этим самым Комбобоксом?
т.е.
Form.Controls.Tag := 1; Первый комбобокс
Как к ним потом обращаться к конкретным?
Добавлено: 24 окт 2006, 12:57
somewhere
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;
Добавлено: 24 окт 2006, 14:59
Nikoshka
somewhere,
Гм, все равно не получается.
Согдал ListBox с Tag := 1.
Главная форма Form1, пробую:
Form1.Controls[1].Items.Add('Не получается');
Что-то я невъехал совсем
Для удобства можно использовать панель на форме, и также Panel.Controls
У меня получается есть PageControl1, все происходит на 1 закладке. На которой еще есть GroupBox2 вот с этим непонимаю. Нашел такой пример:
TCheckBox(PanelTest.Controls).Checked:=True
тут автор получается указывает, что это чекбокс. Но у него есть форма на которой PanelTest и в нем чекбоксы... Вот тут вся и проблема- непонимаю как мне бращаться с такой структурой. Постоянно выдает ошибку как не пробовал..
Добавлено: 24 окт 2006, 15:44
somewhere
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, ну как, понятно?
Добавлено: 24 окт 2006, 15:56
Nikoshka
Form1.InsertControl(ListBox);
Вот что не работало оказывается! Теперь понятно

Это нужно инициализировать для каждого где мы используем?
Один вопрос только непонятен:
Это я инициализировал свой ListBox
Но теперь PageControl1 на всех страница поверх всего выводит эти лист боксы.... как тут верно записать, чтобы такого глюка не было?
Добавлено: 24 окт 2006, 16:04
somewhere
В принципе, если Panel.Controls содержит только комбосы, то Tag как бы и не нужен, можно получать доступ к I-ому комбосу как Controls[I-1]