C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: как отличить внешний вызов функции от программного  (Прочитано 2168 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


как отличить внешний вызов функции от программного
« : 28 Июль 2014, 09:54:46 »

Здравствуйте товарищи форумчане. На повестку дня выносится след. вопрос.  Такая ситуация. Есть на форме Label и CheckBox. Также имеется обработчик нажатия на Label   void __fastcall TMainForm::LabelClick(TObject *Sender)
 так вот когда галочка на   CheckBox стоит нужно запретить пользователю щелчок. В то же время не блокировать программный вызов этой функции.
Вот как это можно реализовать    
Записан
serg76
Участник


Сказали спасибо: +38/-2
Offline

Сообщений: 575


Re: как отличить внешний вызов функции от программного
« Ответ #1 : 28 Июль 2014, 10:02:05 »

проверять
Код
  if(!CheckBox1->Checked)
 {
   Label1->Caption="ok";
 }
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: как отличить внешний вызов функции от программного
« Ответ #2 : 28 Июль 2014, 10:58:42 »

ну так в этом случае точно так же будет работать эта функция и при программном ее вызове
Label1->Click();
В этом то и загвоздка определить функция была задействована путем нажатия на мышку или программно
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: как отличить внешний вызов функции от программного
« Ответ #3 : 28 Июль 2014, 11:01:46 »

Label1->Enabled=false когда установилась галочка (через обработчик чекбокса)
Записан
OVE
Участник


Сказали спасибо: +67/-0
Offline

Сообщений: 72


Re: как отличить внешний вызов функции от программного
« Ответ #4 : 28 Июль 2014, 11:51:48 »

Можно использовать какую-нибудь глобальную переменную.
Перед программным вызовом устанавливать эту переменную в true, а после - сбрасывать в false
Код:
bool bIsProg=false;
.....
bIsProg=true;
LabelClick(...);
bIsProg=false;

а в самом обработчике нажатия сделать дополнительную проверку этой глобальной переменнной
Код:
if((CheckBox1->Checked)&&(!bIsProg)) return;
Записан
serg76
Участник


Сказали спасибо: +38/-2
Offline

Сообщений: 575


Re: как отличить внешний вызов функции от программного
« Ответ #5 : 28 Июль 2014, 11:54:44 »

Цитата: Sergey1985 от 28 Июль 2014, 10:58:42
В этом то и загвоздка определить функция была задействована путем нажатия на мышку или программно
у каждого компанента есть свойства MouseDown, MouseUp - проверяй в момент нажатия
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: как отличить внешний вызов функции от программного
« Ответ #6 : 28 Июль 2014, 12:51:09 »

Попробую все варианты
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: как отличить внешний вызов функции от программного
« Ответ #7 : 28 Июль 2014, 12:55:28 »

Больше всего мне понравилась идея с Enable = false (true) но при Enable = false компонент меняет свой цвет. А заблокировать это изменение можно? Естественно не создавая ремейковый новый класс от родительского?
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: как отличить внешний вызов функции от программного
« Ответ #8 : 28 Июль 2014, 12:58:33 »

Цитата: Sergey1985 от 28 Июль 2014, 12:55:28
Больше всего мне понравилась идея с Enable = false (true) но при Enable = false компонент меняет свой цвет. А заблокировать это изменение можно? Естественно не создавая ремейковый новый класс от родительского?

Лабел не меняет же! А едит затемняется. Едит можно расположить, например, на панели без бордюра и енаблить именно контейнер.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: как отличить внешний вызов функции от программного
« Ответ #9 : 28 Июль 2014, 13:38:56 »

Цитата: POV от 28 Июль 2014, 12:58:33
... Едит ... и енаблить ...

(С) "В моем доме - не выражаться!"  
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


« Ответ #10 : 28 Июль 2014, 13:44:33 »

Цитата: S0mbre от 28 Июль 2014, 13:38:56
Цитата: POV от 28 Июль 2014, 12:58:33
... Едит ... и енаблить ...

Во то что нужно!!! Тема!!! Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.135 секунд. Запросов: 21.