Текущий архив: 2003.05.19;
Скачать: CL | DM;
ВнизРасположение компонентов. Найти похожие ветки
← →
Alexeyss (2003-05-05 08:56) [0]Помогите кто знает!!!
Допустим на форме 10 button, нужно чтобы они в се встали в произвольном порядке но с определённой width, top и всё такое.
Нужно очень срочно!!!
← →
KSergey (2003-05-05 09:02) [1]Что подразумевается под произвольным порядком?
А вообще - ну random на них - и вперед! В чем сложность?
← →
Крот (2003-05-05 09:02) [2]
TMainForm.SetButtonsRect(AWidth, AHeight: integer);
var
index, Count: integer;
Control: TControl;
Button: TButton;
begin
Count := ControlCount;
for index := 0 to Count - 1 do
begin
Control := Controls[index];
if Control is TButton then
begin
Button := TButton(Control);
Button.Width := AWidth;
Button.Height := AHeight;
end;
end;
end;
← →
KSergey (2003-05-05 10:09) [3]> Крот © (05.05.03 09:02)
А где здесь произвольный порядок?
← →
крот (2003-05-05 11:16) [4]2 KSergey © (05.05.03 10:09)
Тут назначение размеров. Прошу пардону, про "произвольный порядок" не заметил.
← →
NickBat (2003-05-05 12:53) [5]Button1.Left=Random(Form1.Width);
Button1.Top=Random(Form1.Height);
Это при условии, что кнопки на форме расположены.
← →
MsGuns (2003-05-05 13:21) [6]С "габаритами" понятно.
Относительно произвольной функциональности.
Добавь TActionList. В него добавь 10 акций, для каждой определи иконку и написши соотв. обработчик.
При OnShow (или когда там надо перемешивать) назначай каждой кнопки акцию по номеру (индексу), случайно выбранному из массива [0..9], но не менее 0. После выборки соотв.элемент массива сбрасывай в -1 для предотвращения повторов кнопок.
← →
Alexeyss (2003-05-05 13:35) [7]Принцип работы должен быть такой, как при раздаче карт в любой карточной игре, т.е. любой компонент встаёт на место другого.
Всё что связанно с random я уже пробовал...во всяком случае, что знал:)
← →
MsGuns (2003-05-05 13:59) [8]У тебя что, размеры каждой кнопки жестко привязаны к ее функции ?
← →
PVOzerski (2003-05-05 16:11) [9]Я бы сделал такую штуку:
type
tBtnFeatures=record
caption:string;
onclick:tNotifyEvent;
и другие нужные поля...
end;
Завел бы массив из 10 таких записей[0..9], перемешал их в произвольном порядке (а уж алгоритмов перемешивания придумать - нет ничего сложного - например, сначала берем Random(10), выкидываем выпавший элемент в хвост массива со сдвигом остальных, потом - Random(9) и т. д.)
А потом бы присваивал 1-й кнопки - значения из элемента массива 0, 2-й - из из элемента массива 1 и т.д.
← →
LiViD (2003-05-06 18:11) [10]Человек видимо хочет, чтобы кнопочки встали в произвольном порядке по горизонтали, причем не накладываясь друг на друга.
Есть два варианта реализации. Первый, как уже сказал
MsGuns © с использованием Action List, второй же состоит в следующем:(Все кнопки имеют одинаковую ширину, расс-е между ними 2, все расположены на панели panel1)
var
i,j:integer;
entnums:array of integer;
label
1;
begin
setlength(entnums,panel1.ControlCount);
for i:=0 to length(entnums)-1 do
begin
1:
entnums[i]:=trunc(random*panel1.ControlCount);
for j:=0 to length(entnums) do
if (entnums[i]=entnums[j]) and (i<>j) then goto 1
end;
for i:=0 to length(entnums)-1 do
panel1.Controls[i].Left:=(panel1.Controls[i].Width+2)*entnums[i];
end;
У кода один недостаток
Кнопка №5 всегда первая
← →
LiViD (2003-05-06 18:12) [11]ps/ Ну, и скорость небольшая...
← →
LiViD (2003-05-06 18:23) [12]Вариант для ActionList
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
rnd:integer;
label
1;
begin
randomize;
for i:=0 to 4 do begin
1:
rnd:=trunc(random*6);
if rnd>4 then goto 1;
if panel1.Controls[rnd].Action=nil then
panel1.Controls[rnd].Action:=actionlist1.Actions[i]
else goto 1
end;
end;
← →
Um (2003-05-08 07:34) [13]procedure TForm1.BitBtn1Click(Sender: TObject);
var Buttons:array [0..9] of Tbutton;
ctl:tcontrol;
i,k,cc,rndi,aw,ah,dx:integer;
begin
k:=0;
with Panel1 do begin
CC:=ControlCount;
for i:=0 to CC-1 do begin
ctl:=controls[i];
if ctl is tbutton then begin
buttons[k]:=tbutton(ctl);inc(k)
end;
end;
dec(k);
aw:=buttons[0].Width;
ah:=buttons[0].Height;
dx:=2;
randomize;
For i:=0 to k do begin
rndi:=random(k);
ctl:=Buttons[k];
Buttons[k]:=Buttons[rndi];
Buttons[rndi]:=tbutton(ctl);
memo1.SelText:=format("%d,%d"#13#10,[k,rndi]);
Buttons[k].SetBounds(k*(aw+dx)+10,10,aw,ah);
dec(k);
end
end
end;
Страницы: 1 вся ветка
Текущий архив: 2003.05.19;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c