![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
! вопрос нашим мастерам. [D6]
Officeman © (2005-12-27 08:20:00)Уважаемые коллеги! Поздравляю Вас с наступающим Новым 2006 годом.
Желаю Вам успехов, благополучия в новом году, Желаю крепкого
здоровья Вам и Вашей семье. с Наилучшими пожеланиями, Offceman.
Содержание
-----------
Часто приходится обрабатывать события множества диалоговых компонентов,
например кнопок. в данном примере необходимо задать заголовок кнопкам.
button1.caption:=COU;
button2.caption:=COU;
button3.caption:=COU;
button4.caption:=COU;
...
button99.caption:=COU;
button100.caption:=COU;
Также для этих кнопок необходимо задать Visible, по ходу работы программы.
button1.visible:=false;
button2.visible:=false;
button3.visible:=false;
button4.visible:=false;
...
button99.visible:=false;
button100.visible:=false;
сейчас в моей программе 40 кнопок. =), скоро будет 100 кнопок.
со временем программа должна перекочевать на платформу КПК.
Необходимо сократить КОД(оптимизировав его)
Вопрос
-------
как сократить код?
возможно ли сделать цикл по перебору кнопок?
Привидите пример пожалуйста.
evvcom (2005-12-28 08:58:00) [1]
type
TForm1 = class(TForm)
Button1: TButton; // Все TButton здесь должны следовать друг за другом
Button2: TButton; // без посторонних вкраплений !!! :)
Button3: TButton;
Button4: TButton;
...
Button100: TButton;
private
procedure ChangeButtons(AEnabled: Boolean; const ACaption: string);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ChangeButtons(AEnabled: Boolean; const ACaption: string);
type
PTButton = ^TButton;
var
I: Integer;
pTButton: PTButton;
begin
pTButton := @Button1;
for I:=1 to 100 do begin
pTButton^.Caption := ACaption;
pTButton^.Enabled := AEnabled;
Inc(pTButton);
end;
end;
Вариантов - море! Выбирай. :)
аматор (2005-12-27 21:59:00) [2]Привет...
Можно и так
var i : integer;
begin
for i := 0 to 10 do begin
TLabel(FindComponent('Label' + intToStr(i))).Caption := Edit1.Text;
end;
end;
И т.д. и т.п.
msguns (2005-12-27 13:50:00) [3]Кнопками, если они являются элементами контрольных панелей, лучше управлять "через" TActionList+TAction, как справедливо заметил evvcom ©
"Заодно" будут переключаться и соответствующие пункты меню.
Officeman (2005-12-27 11:08:00) [4]Игорь Шевченко, спасибо за понимание! Попробую внедрить данный метод в свой проект.
Игорь Шевченко (2005-12-27 10:43:00) [5]
> как сократить код?
> возможно ли сделать цикл по перебору кнопок?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
private
procedure ChangeButtons (const Buttons: array of TButton;
AEnabled: Boolean; const ACaption: string);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ChangeButtons(const Buttons: array of TButton;
AEnabled: Boolean; const ACaption: string);
var
I: Integer;
begin
for I:=Low(Buttons) to High(Buttons) do begin
Buttons[I].Caption := ACaption;
Buttons[I].Enabled := AEnabled;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ChangeButtons([Button1,Button2,Button3,Button4], false, 'Foo');
end;
end.
umbra (2005-12-27 09:52:00) [6]зачем столько кнопок? все одновременно видимы для пользователя они наверняка не будут. Почему бы не создать некое минимальное количество, а затем менять им надписиб обработчики и т.д.?
mfender (2005-12-27 09:44:00) [7]
> Это все уже есть в TAction
Надо будет поинтересоваться. Спасибо за подсказку.
evvcom (2005-12-27 09:37:00) [8]
> где-то держать и где-то менять, рекурсивно бегая по всем
> контролам. Вероятно, загнать их в массив и искать по нему.
Это все уже есть в TAction
mfender (2005-12-27 09:18:00) [9]Рояль концертный, что-ли? :)))
Нужно состояние этих кнопок (надписи, визиблы и т.п.) где-то держать и где-то менять, рекурсивно бегая по всем контролам. Вероятно, загнать их в массив и искать по нему.
evvcom (2005-12-27 08:45:00) [10]
> сейчас в моей программе 40 кнопок. =), скоро будет 100 кнопок
Застрелиться!
> Необходимо сократить КОД(оптимизировав его)
Используй TAction, а лучше подумай, а действительно ли тебе надо столько кнопок?
vrem (2005-12-27 08:30:00) [11]http://www.delphimaster.ru/articles/comparray.html