Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

Как можно показать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.016 c
2-1166806144
AlexanderMS
2006-12-22 19:49
2007.01.14
Мусор в памяти после жизнедеятельности программы.


4-1157089018
vodvorezlaya
2006-09-01 09:36
2007.01.14
Как получить вписок окон в системе


11-1143527894
shalex
2006-03-28 10:38
2007.01.14
И еще один вопрос о TabControl


15-1166645169
IMHO
2006-12-20 23:06
2007.01.14
Покачать фильмы и сериалы


2-1167067759
Troan_81
2006-12-25 20:29
2007.01.14
Класс окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский