Консультация № 170082
01.07.2009, 19:35
0.00 руб.
0 5 2
Здраствуйте дорогие эксерты.
Как можно создать и разместить на форме массив какого-то компонента (например TComboBox) неопределённого размера?

Обсуждение

давно
Студент
15716
139
01.07.2009, 21:58
общий
это ответ
Здравствуйте, Писарев Павел Юрьевич.

Если я правильно понял,то вам поможет приведенный в приложении код.

Приложение:
unit Unit1;

interface

uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
Combos: array[0..9] of TComboBox;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
I: Integer;
begin
for I := Low(Combos) to High(Combos) do begin
Combos[i] := TComboBox.Create(Form1);
with Combos[i] do begin
Parent := Form1;
Top := Random(1000);
Left := Random(1000);
Height := Random(500);
Width := Random(500);
end;
end;
end;
end.
5
давно
Модератор
156417
2175
01.07.2009, 22:03
общий
Например так: помещаете на форму поле ввода и кнопку (если ставить значения как в примере, то данные компоненты ппоместите в правой части формы)
Далее объявляете массив компонентов глобальной переменной и пишите следующий обработчик нажатия на кнопку
Код:
var cb: array of TCombobox; //массив элементов

procedure TForm1.Button1Click(Sender: TObject);
const d=25 ; t=5; l=10; //параметры расположения компонентов (можете выбирать по вкусу)
var
n,i: integer;
begin
try n:=strtoint(Edit1.Text); //считываем число
except showmessage('Input natural number'); exit end; //при ошибкео станавливаем процедуру
if i<0 then begin showmessage('Input natural number'); exit end; //если введено отрицательное число, останавливаем процедуру
for i:=0 to length(cb)-1 do cb[i].Free; //очистка старых компонентов
setlength(cb,n); //длина массива
for i:=0 to n-1 do //для каждого элемента
begin cb[i]:=TComboBox.Create(self); //создание элемента
cb[i].Parent:=form1; //родительский компонент (помещаем компонент на форму)
Cb[i].Top:=i*d+t; //задаём расположение
Cb[i].Left:=l;
end;

end;

при нажатии на кнопку создаётся массив компонентов и они размещаются на форме
Неизвестный
01.07.2009, 22:13
общий
02.07.2009, 07:38
это ответ
Здравствуйте, Писарев Павел Юрьевич!
Под массивом я понимаю несколько компонентов одного типа. Так это можно сделать просто создав несколько таких компонентов. Дело в том, что в Delphi каждому отдельному компоненту присваиваивается определенное имя, и для каждого компонента выделяется свой блок программного кода. Поэтому они все должны рассматриваться как самостоятельные объекты.

давно
Мастер-Эксперт
425
4118
02.07.2009, 08:13
общий
Писарев Павел Юрьевич:
Гм... А ведь если все компоненты массива должны быть размещены на определённой форме и они должны быть читаемы, то словосочетание "массив ... неопределённого размера" совершенно не подходит. Размер будет определятся размерами формы и это будет максимум элементов массива. Иначе будет бессмыслица.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
03.07.2009, 18:53
общий
Jimhucksly:
Проблема заключается в том, что мне изнально не известно сколько у меня будет эти компонентов.
Форма ответа