Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2173
∙ повысить рейтинг »
star9491
Статус: Практикант
Рейтинг: 1816
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Бакалавр
Рейтинг: 888
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1526
Дата выхода:02.05.2010, 02:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:401 / 195
Вопросов / ответов:1 / 1

Вопрос № 178056: Приветствую. Подскажите как можно получить столбец кнопок на форме, расставленных между собой в случайном порядке. Объявляю массив кнопок: buttons: array[0..30] of TButton; Создаю 15 кнопок, которые будут расположены в столбец...



Вопрос № 178056:

Приветствую.

Подскажите как можно получить столбец кнопок на форме, расставленных между собой в случайном порядке.

Объявляю массив кнопок:
buttons: array[0..30] of TButton;

Создаю 15 кнопок, которые будут расположены в столбец один под другим по порядку:
for i:=0 to 14 do
begin
buttons[i]:= TButton.Create(Self);
buttons[i].Parent:= Self;
buttons[i].Left:= 495;
buttons[i].Width:= 210;
buttons[i].Height:= 20;
buttons[i].Top:= 16 + (22 * i) + 8;
buttons[i].Font.Size:= 12;
buttons[i].Caption:= inttostring(i);
buttons[i].OnClick:= ButtonsClick;
end;

То есть на форме будут по порядку следовать кнопки:
|0|
|1|
|2|
|3|
...

а надо так:
|1|
|3|
|0|
|2|

Как сделать?

Отправлен: 27.04.2010, 00:56
Вопрос задал: Maksim Trofimov, 6-й класс
Всего ответов: 1
Страница вопроса »


Отвечает Евгений/Genia007/, Бакалавр :
Здравствуйте, Maksim Trofimov.
Нужно создать массив из неповторяющихся чисел и потом просто в цикле брать из него очередное число и создавать соответствующую кнопку.
Код:
var
Form1: TForm1;
mass: array of integer; // массив номеров


function Unic(var flag: array of boolean; range: integer): integer;
begin
{данная функция возвращает одно случайное число}
result := random(range);
while flag[result] do
result := random(range); //ищем какого числа еще нет
flag[result] := true; //это чтобы не было повторений
end;

procedure MassRand(range: integer; var inputMass: array of integer); // Заполнение массива неповторяющимися числами
var
i: integer;
bm: array of boolean; //массив флагов д ля отслеживания было уже число или нет
begin
SetLength(bm, length(inputMass)); // Установка размера массива
for i := 0 to length(inputMass) - 1 do
begin
inputMass[i] := Unic(bm, range);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
SetLength(mass, 15); // тут получим размерность массива
MassRand(15, mass); // получаем массив не повторяющихся чисел
for i:= 0 to 14 do // создаём и размещаем кнопки
begin
TButton.Create(Self).Name := 'Buttons' + IntToStr(mass[i]); // создаём кнопку
with TButton(FindComponent('Buttons' + IntToStr(mass[i]))) do
begin // выставляем нужные свойства у созданной кнопки
Left:= 495;
Width:= 210;
Height:= 20;
Top:= 16 + (22 * i) + 8;
Parent:= Self;
Caption:= IntToStr(mass[i]);
Font.Size:= 12;
OnClick:= ButtonsClick;
end;
end;
end;

-----
Помогли тебе, помоги и ты.

Ответ отправил: Евгений/Genia007/, Бакалавр
Ответ отправлен: 27.04.2010, 09:42
Номер ответа: 261057

Оценка ответа: 5

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261057 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное