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

Вниз

! вопрос нашим мастерам.   Найти похожие ветки 

 
Officeman   (2005-12-27 08:20) [0]

Уважаемые коллеги! Поздравляю Вас с наступающим Новым 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 кнопок.
со временем программа должна перекочевать на платформу КПК.
Необходимо сократить КОД(оптимизировав его)

Вопрос
-------
как сократить код?
возможно ли сделать цикл по перебору кнопок?
Привидите пример пожалуйста.


 
vrem   (2005-12-27 08:30) [1]

http://www.delphimaster.ru/articles/comparray.html


 
evvcom ©   (2005-12-27 08:45) [2]


> сейчас в моей программе 40 кнопок. =), скоро будет 100 кнопок

Застрелиться!

> Необходимо сократить КОД(оптимизировав его)

Используй TAction, а лучше подумай, а действительно ли тебе надо столько кнопок?


 
mfender ©   (2005-12-27 09:18) [3]

Рояль концертный, что-ли? :)))

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


 
evvcom ©   (2005-12-27 09:37) [4]


> где-то держать и где-то менять, рекурсивно бегая по всем
> контролам. Вероятно, загнать их в массив и искать по нему.

Это все уже есть в TAction


 
mfender ©   (2005-12-27 09:44) [5]


> Это все уже есть в TAction

Надо будет поинтересоваться. Спасибо за подсказку.


 
umbra ©   (2005-12-27 09:52) [6]

зачем столько кнопок? все одновременно видимы для пользователя они наверняка не будут. Почему бы не создать некое минимальное количество, а затем менять им надписиб обработчики и т.д.?


 
Игорь Шевченко ©   (2005-12-27 10:43) [7]


> как сократить код?
> возможно ли сделать цикл по перебору кнопок?


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.


 
Officeman   (2005-12-27 11:08) [8]

Игорь Шевченко, спасибо за понимание! Попробую внедрить данный метод в свой проект.


 
msguns ©   (2005-12-27 13:50) [9]

Кнопками, если они являются элементами контрольных панелей, лучше управлять "через" TActionList+TAction, как справедливо заметил evvcom ©
"Заодно" будут переключаться и соответствующие пункты меню.


 
аматор ©   (2005-12-27 21:59) [10]

Привет...

Можно и так

var i : integer;
begin
   for i := 0 to 10 do begin
       TLabel(FindComponent("Label" + intToStr(i))).Caption := Edit1.Text;
   end;
end;

И т.д. и т.п.


 
evvcom ©   (2005-12-28 08:58) [11]

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;


Вариантов - море! Выбирай. :)



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

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

Наверх




Память: 0.5 MB
Время: 0.05 c
14-1133348949
Post
2005-11-30 14:09
2006.01.15
Framework SDK


14-1134712989
syte_ser78
2005-12-16 09:03
2006.01.15
Премодерация


1-1134215624
ooo
2005-12-10 14:53
2006.01.15
вопрос


14-1135323629
vidiv
2005-12-23 10:40
2006.01.15
что делает программа ctfmon?


14-1133958616
Mike Kouzmine
2005-12-07 15:30
2006.01.15
Слышали новость? Волгу снимают с производства!