Форум: "Начинающим";
Текущий архив: 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.015 c