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

Вниз

Управление доступностью кнопок, как организовать?   Найти похожие ветки 

 
Kolan ©   (2007-05-14 21:22) [0]

Здравствуйте,
 Ситуация есть, допустим, семь кнопок на ToolBar"е. Внутри разных операций надо изменять их доступность.
 Вопрос, как это сделать красиво?

Отвратительное решение — сделать метод:
 EnableToolButtons(False, True, False, False, False, False, False);
 При изменении кол-ва кнопок метод надо переписывать.

ЗЫ
 Сижу смотрю на медиатор — вроде он не подходит&#133 :(


 
Плохиш ©   (2007-05-14 21:36) [1]


> EnableToolButtons([False, True, False, False, False, False, False]);

Но я бы сделал на TAction...


 
Loginov Dmitry ©   (2007-05-14 21:38) [2]

Вообще желательно использовать TActionList, и изменять Enableb не кнопкам, а Экшенам. Кнопочки при этом (в общем случае) становятся более послушными :)


> Отвратительное решение — сделать метод:
> EnableToolButtons(False, True, False, False, False, False,
> False);
> При изменении кол-ва кнопок метод надо переписывать.


Другой способ: EnableToolButtons(ButArray: array of TButton; Enabled: Boolean);


 
Leonid Troyanovsky ©   (2007-05-14 21:39) [3]


> Kolan ©   (14.05.07 21:22)  

>  Ситуация есть, допустим, семь кнопок на ToolBar"е. Внутри
> разных операций надо изменять их доступность.

TAction Class, RTFM.
Если не устраивает, то надо менятьчто-то на уровне Toolbar.
Or TFormX.

--
Regards, LVT.


 
Kolan ©   (2007-05-14 21:42) [4]

> Вообще желательно использовать TActionList, и изменять Enableb
> не кнопкам, а Экшенам.

Это понятно :).


> TAction Class, RTFM.
> Если не устраивает, то надо менятьчто-то на уровне Toolbar.
> Or TFormX.

Не понял&#133 Мне ненравится не TAction а приведенный пример управления видимостью.


> EnableToolButtons([False, True, False, False, False, False,
> False]);

Действительно лучьше с одной стороны, а с другой непонятно какая где когда пишешь, а с параметрами понятно
EnableToolButtons(Write, Read, Compare, Save, Delete, Menu,
 OpenButton: Boolean);


 
Kolan ©   (2007-05-14 21:46) [5]

Да я хочу подправить проект один небольшой. Там несколько однотипных функций:
Кноки работают в вкл/выкл режиме. Те если нажата, то что-то делает программа.

Комментарии написал сейчас&#133

procedure TMainForm.DeleteActionExecute(Sender: TObject);
begin
 if not HeadManager.IsOperating then
 begin
   DeleteToolButton.Down := True;
   EnableToolButtons(False, False, False, False, True, False, False);
   try
     HeadManager.DeleteImage; //Собстевенно работа, в других местах тоже самое, только кнопка другая и эта операция.
   finally
     EnableToolButtons(True, True, True, True, True, True, True);
     DeleteToolButton.Down := False;
   end;
 end
 else
 begin
   HeadManager.StopCurrentOperation;
   DeleteToolButton.Down := False;
   EnableToolButtons(True, True, True, True, True, True, True);
 end;
end;


Вот еще одна:


procedure TMainForm.WriteImageExecute(Sender: TObject);
begin
 if not HeadManager.IsOperating then
 begin
   WriteToolButton.Down := True;
   EnableToolButtons(True, False, False, False, False, False, False);
   try
     HeadManager.WriteImage;
   finally
     EnableToolButtons(True, True, True, True, True, True, True);
     WriteToolButton.Down := False;
   end;
 end
 else
 begin
   HeadManager.StopCurrentOperation;
   WriteToolButton.Down := False;
   EnableToolButtons(True, True, True, True, True, True, True);
 end;
end;


Непорядок так делать имхо. Как поправить?


 
Leonid Troyanovsky ©   (2007-05-14 21:53) [6]


> Kolan ©   (14.05.07 21:46) [5]

> Непорядок так делать имхо. Как поправить?

ХЗ.
Возможно, что путем  установления
TFormX.EnableGroupOfButtons..property

--
Regards, LVT.


 
Kolan ©   (2007-05-14 22:01) [7]

> ХЗ.

Там их ужо 5 штук. И мне надо еще добавить. Вот и решил про рефакторить.
А так получится надо будет скопипастить и расширить список переменных — :(


 
Leonid Troyanovsky ©   (2007-05-14 22:05) [8]


> Kolan ©   (14.05.07 22:01) [7]

> Там их ужо 5 штук. И мне надо еще добавить.

Дык, проанализируй, куда, и на каком уровне.
Т.е., чьего поля сущность.

--
Regards, LVT.


 
Kolan ©   (2007-05-14 22:16) [9]

> Т.е., чьего поля сущность.

Ниче не понял как какие поля?

procedure TMainForm.EnableToolButtons(Write, Read, Compare, Save, Delete, Menu,
 OpenButton: Boolean);

begin
 WriteImage.Enabled := Write;
 ReadAction.Enabled := Read;
 CompareImage.Enabled := Compare;
 SaveImageToFile.Enabled := Save;
 DeleteAction.Enabled := Delete;
&#133


Что анализировать?
if not HeadManager.IsOperating then //Если не работаем
begin
  WriteToolButton.Down := True; //нажать кнопку
  EnableToolButtons(True, False, False, False, False, False, False); //задизеблить все кроме той на которую нажали
  try
    HeadManager.WriteImage; // отработать
  finally
    EnableToolButtons(True, True, True, True, True, True, True); // в итоге все снова сделать доступным
    WriteToolButton.Down := False; //Отжать кнопку
  end;
end
else // если работаем,
begin
  HeadManager.StopCurrentOperation; //то надо прекратить работу
  WriteToolButton.Down := False; // отжать кнопку
  EnableToolButtons(True, True, True, True, True, True, True); // все сделать доступными
end;
end;


 
Leonid Troyanovsky ©   (2007-05-14 22:33) [10]


> Kolan ©   (14.05.07 22:16) [9]

> > Т.е., чьего поля сущность.

> Ниче не понял как какие поля?

Чьего поля ягода - так понятней?

--
Regards, LVT.


 
Kolan ©   (2007-05-14 23:43) [11]

> Чьего поля ягода — так понятней?

Аааа, вот оно что&#133 — нет все равно не понял.
На грибы что ли намекаете? :)


 
Kolan ©   (2007-05-15 09:26) [12]

Начал с того, что подменяю Action. Те избавился от
if not HeadManager.IsOperating then //Если не работаем
begin


А как сделать чтобы при задании Action"а не менялась Caption кнопки?


 
Gadenysh   (2007-05-15 09:44) [13]

поставить нужный Caption Action - у


 
StriderMan ©   (2007-05-15 12:10) [14]

я бы сделал перечисление под кнопки типа
TMyButtonType = (bt1, bt2...)
и TSetMyButtonType = set of TMyButtonType

соответственно процедурка принимает сет из, например, жоступных в данный момент кнопок.


 
Kolan ©   (2007-05-15 13:32) [15]

> я бы сделал перечисление под кнопки типа

Ок. Это наверно лучьше всего.


 
Kolan ©   (2007-05-15 19:07) [16]

Давайте проделжем тему.
Как же все таки управлять интерфейсом?

Допустим есть у программы два состояния(2 — для простоты, на самом деле больше).
1. Ниче не делаю
2. Работаю.

В режиме работы у программы должны быть Enabled = Fasle некоторые кнопки.
Как это сделать?
1. Вариант как в этом собже. То есть Disable-работа-Enable пишется там где это надо.
2. Вариант сделать у объекта который собственно и выполняет работу событие, типа: «Я перешел в состояние работа» и по возниконовении этого события делать Disable.

А как еще можно? Какие есть стандартные методы, приемы, паттерны&#133?


 
Leonid Troyanovsky ©   (2007-05-15 21:01) [17]


> Kolan ©   (15.05.07 19:07) [16]

> А как еще можно? Какие есть стандартные методы, приемы,

Не знаю насчет паттернов, но, по-старинке, это делалось так:
предположим, что у формы есть конечное число состояний,
каждое из которых определяет некую комбинацию допустимых
состояний ее контролов.
Тогда, делаем форме property и сеттер, который согласованно
меняет состояние ее контролов в зависимости от устанавливаемого
состояния формы. Т.к. свойство принадлежит форме, то оно
доступно в любых ее обработчиках - несогласованных состояний
больше нет.

А к чему относить эти свойства: к форме, к тулбару или к ХЗЧ
и был мой вопрос.  Т.е., вовсе не про грибы (отсель :).

--
Regards, LVT.


 
Kolan ©   (2007-05-15 22:18) [18]

> но, по-старинке, это делалось так:

Ок, это то что я подразумевал под пунктом два.
Начертить StateChart(чтобы понять состояния) и Сделать TEnumeration = (eState1, eState2 &#133)
А потом устанавливать. А в сеттере бОльшой case.

Правильно ли я понял?

Хоть теперь буду знать что так делают. Интересно как в том же BDS переключаются состояния(Degug, Normal{писал названия по памяти}).


 
Leonid Troyanovsky ©   (2007-05-15 23:28) [19]


> Kolan ©   (15.05.07 22:18) [18]

> Правильно ли я понял?

Мы не знаем, что было понято по поводу ягод.

--
Regards, LVT.


 
Kolan ©   (2007-05-16 09:25) [20]

> А к чему относить эти свойства: к форме, к тулбару или к
> ХЗЧ
> и был мой вопрос

Ну вы выше написали про форму. Имхо — нормальный вариант. Те к форме.



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

Форум: "Основная";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.059 c
15-1182784402
antonn
2007-06-25 19:13
2007.07.22
проблемка с html


15-1180700601
Сергей М.
2007-06-01 16:23
2007.07.22
Творчество Андрея Мисина


2-1182239087
Сергей Макс.
2007-06-19 11:44
2007.07.22
Delphi и оболочка


2-1183019447
Alex8
2007-06-28 12:30
2007.07.22
QUERY-SQL


15-1182524283
Dreamse
2007-06-22 18:58
2007.07.22
Подскажите утилиту для извлечения списка экспорта из dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский