Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Как можно показать n кнопок на панеле   Найти похожие ветки 

 
Любитель   (2006-12-18 11:22) [0]

Как можно показать n кнопок на панеле.
n - вводиться пользователем.


 
ЮЮ ©   (2006-12-18 11:29) [1]

Создать в цикле.
 Например, в каком либо методе формы

 for I := 0 to n - 1 do
   with TButton.Create(Self) do begin
      Left := Random(Self.ClientWidth - Width);
      Top := Random(Self.ClientHeigth - Heigth);
   end;

Показать будет сложновато при большом N :)
Да и бессмысленно создавать столько, ничего ге делающих кнопок


 
novill ©   (2006-12-18 11:30) [2]

> [0] Любитель   (18.12.06 11:22)
> Как можно показать n кнопок на панеле.

Как хочешь! :) хоть в столбик хоть в строчку, хоть произвольно набросай :)


 
Desdechado ©   (2006-12-18 11:45) [3]

ЮЮ ©   (18.12.06 11:29) [1]
панель парентом забыл сделать


 
ЮЮ ©   (2006-12-18 11:54) [4]


> панель парентом забыл сделать


Ну да, получается, как создать невидимы кнопки. в цикле же
  Parent := Self;

а панель я в вопросе  не заметил. Тогда все Self заменить на PanelXXX этой формы


 
Любитель   (2006-12-18 12:00) [5]

Забыл уточнить сделать их видимыми/невидимыми


 
Anatoly Podgoretsky ©   (2006-12-18 12:23) [6]

> ЮЮ  (18.12.2006 11:29:01)  [1]

Как это ничего не делающих, а зачет?


 
novill ©   (2006-12-18 12:48) [7]

> [5] Любитель   (18.12.06 12:00)

Можно воспользоваться функцией findcomponent, операторами is и as
Как невидимость сделать - сообразишь сам.


 
RebroFF   (2006-12-18 13:59) [8]


> Как можно показать n кнопок на панеле.
> n - вводиться пользователем.

Поистине неистощима фантазия преподавателей информатики.


 
clickmaker ©   (2006-12-18 14:08) [9]


> Поистине неистощима фантазия преподавателей информатики

да ну разве ж это фантазия? Вот если б в задаче стояло организовать их броуновское движение, с невыползанием за границу панели - это да.


 
Anatoly Podgoretsky ©   (2006-12-18 14:15) [10]

> clickmaker  (18.12.2006 14:08:09)  [9]

Это задание для другого курса.


 
Любитель   (2006-12-21 10:14) [11]

Есть... 10 скрытых кнопок... Пользователь их невидет, но они есть. Есть CheckBox, в нём значения от 1 до 10, выбирая одно из значений, пользователь выберет, сколько кнопок ему откроется (По порядку). Допустим пользователь выбрал число 7, тоесть надо 7-ми кнопкам присвоить значения Visible:=True; Представляешь, сколько надо на составление такой малой задачки.
Тоесть, надо написать, грубо говоря :
[code]
if CheckBox1.Index=1 then
Button1.Visible:=True;
if CheckBox1.Index=2 then
Begin
Button1.Visible:=True;
Button2.Visible:=True;
end;
if CheckBox1.Index:=3 then
begin
Button1.Visible:=True;
Button2.Visible:=True;
Button3.Visible:=True;
end;
[/code]

а можно что бы просто пустить цикл,что-то вроде
[code]

a:=CheckBox.Index;
for i:=1 to a do
begin
Button[i].Visible:=True;
end;
[/code]


 
ЮЮ ©   (2006-12-21 10:29) [12]


> [code]
> if CheckBox1.Index=1 then
> Button1.Visible:=True;
> if CheckBox1.Index=2 then
> Begin
> Button1.Visible:=True;
> Button2.Visible:=True;
> end;
> if CheckBox1.Index:=3 then
> begin
> Button1.Visible:=True;
> Button2.Visible:=True;
> Button3.Visible:=True;
> end;
> [/code]


Даже такое можно написать короче:

Button1.Visible := CheckBox.Index >= 1;
...
Button10Visible := CheckBox.Index >= 10;


P/S/ никто не мешает объявить массив Button и заполнить его один раз


 
Любитель   (2006-12-21 10:34) [13]

Что то я не догнал ????

Button1.Visible := CheckBox.Index >= 1;
...
Button10Visible := CheckBox.Index >= 10;


 
ЮЮ ©   (2006-12-21 10:35) [14]

З.Ы. Проблему надо нормально описывать сразу, а не [11] посте через 3 дня


 
Ega23 ©   (2006-12-21 10:35) [15]


> Что то я не догнал ????


Что ты не догнал? Что результатом CheckBox.Index >= 1; является или True или False?


 
ЮЮ ©   (2006-12-21 10:38) [16]

Если CheckBox.Index = 5, то у Button1..Button5 Visible будет True, а у   Button6..Button10 - false, т.к. 5 >= 5 - истина, а т.к. 5 >= 6  - ложь


 
Любитель   (2006-12-21 10:41) [17]

Button1.Visible := CheckBox.Index >= 1;
ругаеться что неизвестный индификатор


 
ЮЮ ©   (2006-12-21 10:46) [18]

так писать надо в методе формы, а не где придется


 
ЮЮ ©   (2006-12-21 10:49) [19]

и кто такой CheckBox, откуда у него Index?
Код, извени, ты приводил :)


 
Любитель   (2006-12-21 11:56) [20]

мне это надо сделать на события нажатия кнопки


 
Плохиш ©   (2006-12-21 11:59) [21]


> Любитель   (21.12.06 11:56) [20]
> мне это надо сделать на события нажатия кнопки

С моей стороны никаких возражений, делай.


 
Anatoly Podgoretsky ©   (2006-12-21 12:18) [22]

> Любитель  (21.12.2006 10:14:11)  [11]

Что за хитрый такой CheckBox с несколькими числовыми значениями и индексом?
Народ наверно голову ломает, пытаясь понять это. Их всего твоего вопроса понятно только, что есть 10 скрытых кнопок


 
novill ©   (2006-12-21 12:28) [23]

> [20] Любитель   (21.12.06 11:56)

Зануда!!!

Создай новый проект, брось на форму 11 кнопок, radiogroup с элементами от 0 до 10, замени текст модуля на этот код и дважды кликни на последней созданной кнопке.
Запускай!

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   Button5: TButton;
   Button6: TButton;
   Button7: TButton;
   Button8: TButton;
   Button9: TButton;
   Button10: TButton;
   RadioGroup1: TRadioGroup;
   Button11: TButton;
   procedure B_init;
   procedure Button11Click(Sender: TObject);
 private
   b_arr: array [1..10] of TButton;
  { Private declarations }
 public
   { Public declarations }
 end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.B_init;
begin
b_arr[1]:=Self.Button1;
b_arr[2]:=Self.Button2;
b_arr[3]:=Self.Button3;
b_arr[4]:=Self.Button4;
b_arr[5]:=Self.Button5;
b_arr[6]:=Self.Button6;
b_arr[7]:=Self.Button7;
b_arr[8]:=Self.Button8;
b_arr[9]:=Self.Button9;
b_arr[10]:=Self.Button10;
end;

procedure TForm1.Button11Click(Sender: TObject);
var i:integer;
begin
if b_arr[1]=nil then B_init;
for i:=1 to 10 do
 b_arr[i].Visible:=i<=RadioGroup1.ItemIndex;
end;

end.


Если не получится - хорошо подумай о работе на свежем воздухе!


 
Ega23 ©   (2006-12-21 12:46) [24]


> novill ©   (21.12.06 12:28) [23]


Это ужасно.


 
Любитель   (2006-12-21 12:51) [25]

Тьфу ты совсем запутался


procedure TForm1.Button8Click(Sender: TObject);
begin
if CheckBox1.Checked then
Button1.Visible:=True;
if CheckBox2.Checked then
Begin
Button1.Visible:=True;
Button2.Visible:=True;
end;
if CheckBox3.Checked then
begin
Button1.Visible:=True;
Button2.Visible:=True;
Button3.Visible:=True;
end;


Сделать по короче
что бы при выборе определенного CheckBox N показывались N кнопок

begin
Button[N].Visible:=True;


 
novill ©   (2006-12-21 12:52) [26]

> [24] Ega23 ©   (21.12.06 12:46)

акваланг.


 
novill ©   (2006-12-21 12:54) [27]

Ega23, крайне интересует твое цензруное мнение о [25]

Или это твой виртуал?


 
Ega23 ©   (2006-12-21 12:57) [28]


> Ega23, крайне интересует твое цензруное мнение о [25]


Ну как минимум procedure TForm1.B_init; переписать.


 
novill ©   (2006-12-21 12:59) [29]

> [28] Ega23 ©   (21.12.06 12:57)
>
> > Ega23, крайне интересует твое цензруное мнение о [25]
>
>
> Ну как минимум procedure TForm1.B_init; переписать.

я о [25] спрашивал, а не о [23] :)


 
Ega23 ©   (2006-12-21 13:07) [30]


> я о [25] спрашивал, а не о [23] :)


Ну там много чего не хватает. Я бы так написАл:

procedure TForm1.Button8Click(Sender: TObject);
begin
if CheckBox1.Checked=True then
begin
 Button1.Visible:=True;
end
else
if CheckBox1.Checked=False then
 begin
   Button1.Visible:=False;
 end;

if CheckBox2.Checked=True then
Begin
 Button1.Visible:=True;
 Button2.Visible:=True;
end
else
if CheckBox2.Checked=False then
 begin
  Button1.Visible:=False;
  Button2.Visible:=False;
 end;

if CheckBox3.Checked=True then
begin
 Button1.Visible:=True;
 Button2.Visible:=True;
 Button3.Visible:=True;
end
else
if CheckBox3.Checked=False then
 begin
  Button1.Visible:=False;
  Button2.Visible:=False;
  Button3.Visible:=False;
 end;

end;


 
novill ©   (2006-12-21 13:17) [31]

> [30] Ega23 ©   (21.12.06 13:07)
))))))))))))) Гениально! Ты уже можешь преподавать программирование, просветляя юные умы!


 
Anatoly Podgoretsky ©   (2006-12-21 13:17) [32]

> Ega23  (21.12.2006 13:07:30)  [30]

А я бы написал

Button1.Visible := CheckBox1.Checked;
Button2.Visible := CheckBox2.Checked;
Button3.Visible := CheckBox3.Checked;

И в других местах аналогично


 
Ega23 ©   (2006-12-21 13:23) [33]


> А я бы написал
>
> Button1.Visible := CheckBox1.Checked;
> Button2.Visible := CheckBox2.Checked;
> Button3.Visible := CheckBox3.Checked;
>
> И в других местах аналогично


Да, но посмотри насколько мой вариант круче.
Подумал, можно его ещё обогатить:

if CheckBox1.Checked=True then
begin
Button1.Visible:=True;
end
else
if CheckBox1.Checked=False then
 begin
  Button1.Visible:=False;
 end;
else
  raise Exception.Create("Unknown value");


 
novill ©   (2006-12-21 13:29) [34]

> [32] Anatoly Podgoretsky ©   (21.12.06 13:17)

"... Неправильно ты, дядя Федор, бутерброд ешь." (с)матроскин


 
Anatoly Podgoretsky ©   (2006-12-21 13:36) [35]

> Ega23  (21.12.2006 13:23:33)  [33]

Мне тоже понравилось :-)


 
Любитель   (2006-12-21 14:52) [36]

> Ega23 это все понятно и если представить что будет кнопок так 20 и больше так сколько строк получиться в коде только на это

Вот как его укоротить


 
novill ©   (2006-12-21 14:56) [37]

> [36] Любитель   (21.12.06 14:52)

А вы чей виртуал? Веселите образцово!


 
Любитель   (2006-12-21 14:59) [38]

> novill [37]

не понял


 
Сергей М. ©   (2006-12-21 15:05) [39]


> Вот как его укоротить


Ножовкой. По Паскалю.
В кр.случае - тяпкой. Огородной.

Ты программер или где ?)


 
_RusLAN ©   (2006-12-21 15:07) [40]

>[33]
>параноидальное условие. Работает со 100% гарантией даже в военное время.



Страницы: 1 2 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.052 c
15-1166794248
Pit_q
2006-12-22 16:30
2007.01.14
Интересно, у всех сотрудников ГИБДД есть водительские права?


15-1166474896
Piter
2006-12-18 23:48
2007.01.14
Лишение прав за вождение в пьяном виде


15-1166388021
partizan
2006-12-17 23:40
2007.01.14
Вписать эллипс макс. площади в 4-угольник


15-1167103101
Slider007
2006-12-26 06:18
2007.01.14
С днем рождения ! 26 декабря


9-1141658314
i)lya
2006-03-06 18:18
2007.01.14
HELP