:: Visual Foxpro, Foxpro for DOS
Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
Добрые люди! Несколько дней бьюсь с одной проблемой, решение где-то на поверхности, но в упор не вижу. Подгоняю рабочую программу на FPD26 под VFP9, решил до возможного минимума оставить старый код (больно не бейте). Читал все ветки на форуме насколько это бесполезное занятие, но всё же взялся, т.к. нужно.
Суть проблемы: здесь на файловом архиве взял код Евгения Гамза Функциональные клавиши как в Нортоне , идею немного переделал, и в принципе всё работает. За исключением одной ситуации. Если "кликнул" по кнопке один раз, программа перешла в другую форму/процедуру, значения кнопок приняли новые значения, - второй раз эта же кнопка не срабатывает, остальные срабатывают без проблем. Вернулся назад в предыдущую процедуру - кнопка рабочая. Возможно, это связано с какой-то особенностью кнопок на панели тулбара, я не очень в этом силён. Вот код этой подпрограммки:

* *********************************************************
* Key_Str переменная названий кнопок через точку с запятой
* '1Помощь;;3Новый;4Редактировать;;\6Поиск;;8Удалить;;Выход'
* Key_Prog - программы назначаемые кнопкам через точку с запятой
* 'HELP;;DO NEWRECNO;DO EDITRECNO;;;;DO DELRECNO;;KEYB {ESC}'
* reNew .F./.T. флаг перехода на уровень выше-ниже, по умолчанию .F.
***********************************************************
PARAMETERS Key_Str,Key_Prog,reNew
PRIVATE Key_Str,Key_Prog,cnt,label,doForm
LOCAL M_EXA,M_OBJ
if EMPTY(Key_Prog).and.!reNew
Key_Prog='HELP;;;;;;;;;KEYB CHR(27)'
endif
if !EMPTY(Key_Str)
* если заданы названия кнопок
* перед первым использованием объявляем массив
if TYPE("Key_Stack") = "U"
PUBLIC ARRAY Key_Stack[10,2]
PUBLIC Key_Level
Key_Level = 0
endif
* если нет запрета, увеличиваем уровень на единицу и присваиваем массиву
* текущие значения Key_Str и Key_Prog
if !reNew
if Key_Level < 10
Key_Level = Key_Level + 1
endif
endif
Key_Stack[Key_Level,1] = Key_Str
Key_Stack[Key_Level,2] = Key_Prog
else
* если не указаны названия кнопок (возврат к предыдущей процедуре)
* и нет запрета, уменьшаем уровень на единицу и возвращаем переменным
* Key_Str и Key_Prog предыдущие значения из массива
if !reNew
if Key_Level>1
Key_Level = Key_Level - 1
endif
endif
Key_Str = Key_Stack[Key_Level,1]
Key_Prog= Key_Stack[Key_Level,2]
endif
if TYPE("M_TOOLS")#"O".or.ISNULL(M_TOOLS)
* перед первым использованием создаем панель инструментов
RELEASE M_TOOLS
PUBLIC M_TOOLS
M_TOOLS=CREATEOBJECT("FUNCTOOLS")
M_TOOLS.DOCK(3,0,0)
M_TOOLS.SHOW()
* привязываем к размеру главного окна
BINDEVENT(_SCREEN,"Resize",M_TOOLS,"Resize")
endif
M_TOOLS.RESIZE()
FOR cnt = 1 TO 10
* разбираем строку на части и присваиваем кнопкам значения
if AT(';', key_str) > 0
label = SUBSTR(key_str, 1, AT(';', key_str) - 1)
key_str = SUBSTR(key_str, AT(';', key_str) + 1)
doForm = SUBSTR(key_prog, 1, AT(';', key_prog) - 1)
key_prog = SUBSTR(key_prog, AT(';', key_prog) + 1)
else
label = key_str
doForm = key_prog
key_str = ''
key_prog = ''
endif
M_OBJ="COM"+ALLTRIM(STR(cnt))
if !EMPTY(label)
* если есть название кнопки
if left(label,1)#'\'
* если нет "слежа" в названии назначаем кнопку
MACRO_="ON KEY LABEL F"+ALLTRIM(STR(cnt))+" "+doForm
&MACRO_
M_TOOLS.&M_OBJ..FORECOLOR=0
M_TOOLS.&M_OBJ..COMMENT=doForm
else
* в противном случае кнопка не активна
label=SUBSTR(label,2)
MACRO_="ON KEY LABEL F"+ALLTRIM(STR(cnt))
&MACRO_
M_TOOLS.&M_OBJ..FORECOLOR=RGB(192,192,192)
M_TOOLS.&M_OBJ..COMMENT=''
endif
M_TOOLS.&M_OBJ..CAPTION=label
M_TOOLS.&M_OBJ..TOOLTIPTEXT=label
M_TOOLS.&M_OBJ..ENABLED=.T.
M_TOOLS.&M_OBJ..FONTNAME='Arial'
M_TOOLS.&M_OBJ..FONTSIZE=12
else
* если кнопка без названия, обнуляем все параметры
M_TOOLS.&M_OBJ..CAPTION=''
M_TOOLS.&M_OBJ..COMMENT=''
M_TOOLS.&M_OBJ..TOOLTIPTEXT=''
M_TOOLS.&M_OBJ..ENABLED=.F.
MACRO_="ON KEY LABEL F"+ALLTRIM(STR(cnt))
&MACRO_
endif
ENDFOR
RETURN
DEFINE CLASS functools AS toolbar
Caption = "Функциональные клавиши"
Height = 28
Left = 0
Sizable = .F.
Top = 0
Width = 751
ControlBox = .F.
Name = "functools"
ADD OBJECT com1 AS commandbutton WITH ;
Top = 5, ;
Left = 5, ;
Height = 22, ;
Width = 75, ;
Caption = "F1", ;
SpecialEffect = 0, ;
Name = "COM1"
* и т.д. до com10
PROCEDURE Destroy
THIS.Visible=.F.
ENDPROC
PROCEDURE Resize
LOCAL M.II,M_OBB,M.WIDTH
M.WIDTH=_SCREEN.WIDTH/10
FOR M.II=1 TO 10
M_OBB="COM"+ALLTRIM(STR(M.II))
THIS.&M_OBB..WIDTH=M.WIDTH
THIS.&M_OBB..HEIGHT=22
NEXT
THIS.REFRESH()
ENDPROC
PROCEDURE com1.Click
LOCAL M_PROG
M_PROG=THIS.COMMENT
&M_PROG
ENDPROC
* и т.д. до com10.Click
ENDDEFINE



Исправлено 5 раз(а). Последнее : segamel, 19.11.19 23:54
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
vk65

Сообщений: 402
Дата регистрации: 08.04.2008
forum.foxclub.ru
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
segamel
Суть проблемы: здесь на файловом архиве взял код Евгения Гамза Функциональные клавиши как в Нортоне , идею немного переделал, и в принципе всё работает. За исключением одной ситуации. Если "кликнул" по кнопке один раз, программа перешла в другую форму/процедуру, значения кнопок приняли новые значения, - второй раз эта же кнопка не срабатывает, остальные срабатывают без проблем. Вернулся назад в предыдущую процедуру - кнопка рабочая. Возможно, это связано с какой-то особенностью кнопок на панели тулбара, я не очень в этом силён. Вот код этой подпрограммки

Не совсем понятно - зачем?! Т.е. в чем суть, чтобы вообще применять вот эти "Функциональные клавиши как в Нортоне"?
Мне кажется, основная проблема - в изначально неверном подходе к "переводу программы на VFP".
Т.е., вместо того, чтобы использовать для себя данное решение (несколько, мягко говоря, специфическое, на мой взгляд и непонятно для чего вообще нужное) - лучше просто для начала четко сформулировать для себя суть самой задачи: "Что конкретно хочется получить?"
И думаю с большой вероятностью в результате окажется, что все можно решить каким-то иным образом, намного более простым.
Поскольку различные сложности как раз чаще всего и возникают - от изначально неверной для себя формулировки задачи.
Вдобавок с изначально путанным решением потом придется много мучиться. И зачем?! Когда можно сразу начать все делать более нормальным образом. В дальнейшем просто будет намного меньше проблем.

Т.е. внчале нужно словесно, а еще лучше графически, набросать внешний вид желаемого пользовательского интерфейса и внимательно продумать, как наиболее оптимально он должен функционировать, по принципу нажал туда-то - получил то-то.
Ну и затем уже заняться, по возможности неспеша, реализацией всего этого уже непосредственно в кодах.
При этом надо учитывать - интерфейс в FPD и VFP - принципиально не могут быть абсолютно полностью одинаковы. Хотя при желании можно конечно получить что-то относительно близкое по функционалу. Но это уже потребует определенных усилий и дополнительного продумывания всех связей элементов. Если уж оно оправданно.
Поэтому могу предложить - не копаться с проблемами чужих решений, а сделать все свое с нуля.
Для чего - для начала продумать и четко сфориулировать свою задачу. а потом уже спрашивать-уточнять по ней какие-то возникающие неясности, которые неизбежно будут возникать.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 3 раз(а). Последнее : Crispy, 20.11.19 08:02
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Дополню Crispy.
segamel
оставить старый код
segamel
...насколько это бесполезное занятие...
Ну оставил старый код, что то заработало.
А теперь смотри что работает плохо. Или нужно иначе.
И от этих модулей FPD тебе нужен только функционал, т.е. что нужно сделать.
А вот делать то нужно, вообще не глядя на старый код.
Есть задача, ее надо правильно решить, на том что используешь.
Если это UI, как упоминал уже Crispy, UI тут совсем другое, и лучше делать сразу правильно
И так постепенно изменишь всю ПО, под vfp9.
Но сразу надо писать не под старье, а под vfp9.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
segamel
решил до возможного минимума оставить старый код (больно не бейте).
Зря.
Теперь чисто по коду:
Цитата:
FOR cnt = 1 TO 10
* разбираем строку на части и присваиваем кнопкам значения
if AT(';', key_str) > 0
label = SUBSTR(key_str, 1, AT(';', key_str) - 1)
key_str = SUBSTR(key_str, AT(';', key_str) + 1)
doForm = SUBSTR(key_prog, 1, AT(';', key_prog) - 1)
key_prog = SUBSTR(key_prog, AT(';', key_prog) + 1)
else
label = key_str
doForm = key_prog
key_str = ''
key_prog = ''
endif
Смотрим хелп по Alines() и думаем о необходимости сего куска кода.
Цитата:
M_OBJ="COM"+ALLTRIM(STR(cnt))
if !EMPTY(label)
* если есть название кнопки
if left(label,1)#'\'
* если нет "слежа" в названии назначаем кнопку
MACRO_="ON KEY LABEL F"+ALLTRIM(STR(cnt))+" "+doForm
&MACRO_
M_TOOLS.&M_OBJ..FORECOLOR=0
M_TOOLS.&M_OBJ..COMMENT=doForm
else
* в противном случае кнопка не активна
label=SUBSTR(label,2)
MACRO_="ON KEY LABEL F"+ALLTRIM(STR(cnt))
&MACRO_
M_TOOLS.&M_OBJ..FORECOLOR=RGB(192,192,192)
M_TOOLS.&M_OBJ..COMMENT=''
endif
M_TOOLS.&M_OBJ..CAPTION=label
M_TOOLS.&M_OBJ..TOOLTIPTEXT=label
M_TOOLS.&M_OBJ..ENABLED=.T.
M_TOOLS.&M_OBJ..FONTNAME='Arial'
M_TOOLS.&M_OBJ..FONTSIZE=12
else
* если кнопка без названия, обнуляем все параметры
M_TOOLS.&M_OBJ..CAPTION=''
M_TOOLS.&M_OBJ..COMMENT=''
M_TOOLS.&M_OBJ..TOOLTIPTEXT=''
M_TOOLS.&M_OBJ..ENABLED=.F.
MACRO_="ON KEY LABEL F"+ALLTRIM(STR(cnt))
&MACRO_
endif
ENDFOR
...
PROCEDURE Resize
LOCAL M.II,M_OBB,M.WIDTH
M.WIDTH=_SCREEN.WIDTH/10
FOR M.II=1 TO 10
M_OBB="COM"+ALLTRIM(STR(M.II))
THIS.&M_OBB..WIDTH=M.WIDTH
THIS.&M_OBB..HEIGHT=22
NEXT
THIS.REFRESH()
ENDPROC
PROCEDURE com1.Click
LOCAL M_PROG
M_PROG=THIS.COMMENT
&M_PROG
ENDPROC
* и т.д. до com10.Click
Кнопки тулбара есть составляющие коллекции и потому все эти пляски с тучей макроподстановок...

------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 20.11.19 10:05
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
Crispy
Не совсем понятно - зачем?! Т.е. в чем суть, чтобы вообще применять вот эти "Функциональные клавиши как в Нортоне"?
Подобный интерфейс с использованием этой подпрограммы "кнопки как в Нортоне", прописан по всей программе, а там под три сотни файлов, в VFP они выглядит криво, потому как просто прорисованы строкой внизу экрана через SAY. Поэтому не трогал эти кнопки, но попытался заменить SAY на тулбар. Примерно получилось, и все файлы переделывать не пришлось.

Crispy
Мне кажется, основная проблема - в изначально неверном подходе к "переводу программы на VFP".
Т.е., вместо того, чтобы использовать для себя данное решение (несколько, мягко говоря, специфическое, на мой взгляд и непонятно для чего вообще нужное) - лучше просто для начала четко сформулировать для себя суть самой задачи: "Что конкретно хочется получить?"
Как говориться, если всё работает, лучше не трогай. Я бы так и поступил. Но закупают новые компы с лицензией на Вин_х64, ну и далее разные рабочие моменты, типа "ничего не знаю, сделай, чтобы работало".

Crispy
Т.е. внчале нужно словесно, а еще лучше графически, набросать внешний вид желаемого пользовательского интерфейса и внимательно продумать, как наиболее оптимально он должен функционировать, по принципу нажал туда-то - получил то-то.
Ну и затем уже заняться, по возможности неспеша, реализацией всего этого уже непосредственно в кодах.
При этом надо учитывать - интерфейс в FPD и VFP - принципиально не могут быть абсолютно полностью одинаковы. Хотя при желании можно конечно получить что-то относительно близкое по функционалу. Но это уже потребует определенных усилий и дополнительного продумывания всех связей элементов. Если уж оно оправданно.
Поэтому могу предложить - не копаться с проблемами чужих решений, а сделать все свое с нуля.
Для чего - для начала продумать и четко сфориулировать свою задачу. а потом уже спрашивать-уточнять по ней какие-то возникающие неясности, которые неизбежно будут возникать.
Если коротко, времени как всегда мало, юзеры требуют, чтобы всё было как раньше, малейшие изменения - верни как было. Руководство в суть не вникает, ему важно два варианта: работает - не работает. Если буду дальше этим заниматься, то конечно неспеша можно подумать,изучить и переделать.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
Спасибо, вникаю в суть.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
ssa
segamel
решил до возможного минимума оставить старый код (больно не бейте).
Зря.
Теперь чисто по коду:
Цитата:
FOR cnt = 1 TO 10
* разбираем строку на части и присваиваем кнопкам значения
if AT(';', key_str) > 0
label = SUBSTR(key_str, 1, AT(';', key_str) - 1)
key_str = SUBSTR(key_str, AT(';', key_str) + 1)
doForm = SUBSTR(key_prog, 1, AT(';', key_prog) - 1)
key_prog = SUBSTR(key_prog, AT(';', key_prog) + 1)
else
label = key_str
doForm = key_prog
key_str = ''
key_prog = ''
endif
Смотрим хелп по Alines() и думаем о необходимости сего куска кода.
Это тот момент, когда не стал трогать старое За совет спасибо, изучу, этот кусок можно попробовать безболезненно переделать. Кусок тулбара взял из коллекции файлового архива, старый код, но хорошо подходил по задаче и интерфейсу.



Исправлено 2 раз(а). Последнее : segamel, 20.11.19 11:46
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
segamel
Это тот момент, когда не стал трогать старое
Так дальше то же самое старье, хоть и в применении к VFP.
Предлагаю не заниматься ерундой и выкинуть все пляски с макроподстановками, научиться работать с объектами не через имя, а через ссылку, забыть про переназначения On key label, назначив их один раз, а ветвление делать уже в самих кнопках.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
Суть проблемы я понял, благодаря сообщению Igor Korolyov. Попробую применить.
Igor Korolyov
Обработчики фоксовых событий, в т.ч. click кнопки нереентерабельны - это значит, что после первого нажатия кнопки (при том совершенно неважно какой супер-пупер, или мегу-простой тулбар или форма эту кнопку содержит) если мы НЕ выходим из Click (а запустив модальную форму мы, естественно, НЕ выходим оз обработчка - висим на DO FORM или что там запускает эту самую форму), то более "событие нажатия" не возникает.
Обход этой проблемы - использование одноразовых таймеров. Т.е. Click кнопки просто включает таймер, а сам завершается - а уже в обработчике Timer производится реальное действие (в т.ч. запуск формы).
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
segamel
закупают новые компы с лицензией на Вин_х64, ну и далее разные рабочие моменты, типа "ничего не знаю, сделай, чтобы работало".

Могу порекомендовать вот это решение: forum.foxclub.ru
Отлично работает на х64 системах. Плюс - что вообще ничего менять не надо.
Т.е. просто нужно настроить эмулятор согласно всему описанному в теме, и можно запускать. При этом, если разместить программу в папке эмулятора, можно добиться вдобавок портируемости всего этого комплекса. Т.е. настроив для одной машины - можно простым копированием ставить на все другие.
А тем временем постепенно написать заново аналог уже на VFP9. Это будет наилучшим вариантом для будущего сопровождения.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 2 раз(а). Последнее : Crispy, 20.11.19 12:23
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Пожалуй, соглашусь с братом Криспой. Гибридный монстр будет гораздо более худшим решением.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> click кнопки нереентерабельны
> Click кнопки просто включает таймер, а сам завершается

И проблема нерентерабельности снимается?
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
Crispy
segamel
закупают новые компы с лицензией на Вин_х64, ну и далее разные рабочие моменты, типа "ничего не знаю, сделай, чтобы работало".

Могу порекомендовать вот это решение: forum.foxclub.ru

Спасибо, раньше уже читал эту тему, т.к. понимал что рано или поздно время "Х" наступит. Попробую ещё потестировать vDosPlus, ни DOSBox, ни VirtualBox не подходит. К тому же на некоторых компах уже работают мои "переделки", и таблицы назад конвертировать не хочеться. Озвученную здесь проблему обходим тем, что кроме кнопок тулбара там есть возможность нажать соответствующий ON KEY LABEL, чем пока обходяться юзеры. К тому же думал сразу убить двух зайцев, и решить проблему использования genrep на Win7 где в окне ДОСа меняется кодировка после выхода из Word или Excel. Эту проблему пытались решить здесь, но я так понял, для FPD26 она не решаемая.



Исправлено 1 раз(а). Последнее : segamel, 20.11.19 15:35
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
of63
> click кнопки нереентерабельны
> Click кнопки просто включает таймер, а сам завершается

И проблема нерентерабельности снимается?
Мысля отсюда, но протестировать ещё не успел. В теме отписываются, что работает.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
По-моему, это просто механизм непотери нажатия клавиш, а выполняться действия (в таймере, заряженном кнопкой) будут все равно последовательно. Если таймер запустил модальную форму, то кнопка зарядит свой таймер с действием, но когда экспериментировал, то таймер работал не всегда, как раз в момент запуска всяких монопольных процедур иногда не работал. Я к тому, что истиную реентерабельность (вклинивание выполнения процедуры между строками выполнения другой процедуры) не всегда можно достичь, мтк...

Доб. Забыл добавить, что реентерабельность должна включать независимость, непорчу, окружения (набора видимых переменных), т.н. надо уметь писать процедуры максимально локально, не меняя и не портя окружение (например SELECT()/ALIAS() )... Я так, для себя болше, подбадриваю, это просто специфика фокса, в си-шарпе, наверное, вообще не имеет подобия... хотя это просто типичный синтаксис (семантика ли, хз в чем разница) с WITH.



Исправлено 1 раз(а). Последнее : of63, 20.11.19 20:24
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Проблема с шрифтом решамая. И к слову сказать, в Win 8.1 и Win10 такой проблемы вообще нет. В Win 7 решается так. Надо установить дополнительные растровые шрифты в Windows 7, и установить в запускаем ом значке растровый шрифт типа 12х27 или какой-то из такого размера - чтобы окно приложения помещалось без прокруток. Файл для скачивания есть где-то на форуме и есть у Crispy - он этот файл готовил/редактировал.
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
segamel
Автор

Сообщений: 20
Дата регистрации: 27.04.2011
Simple777
Проблема с шрифтом решамая. И к слову сказать, в Win 8.1 и Win10 такой проблемы вообще нет. В Win 7 решается так. Надо установить дополнительные растровые шрифты в Windows 7, и установить в запускаем ом значке растровый шрифт типа 12х27 или какой-то из такого размера - чтобы окно приложения помещалось без прокруток. Файл для скачивания есть где-то на форуме и есть у Crispy - он этот файл готовил/редактировал.
Да я знаю, что это проблема только Win7. На некоторых компьютерах ещё стоит семёрка. Не знал, что есть решение, поищу.



Исправлено 1 раз(а). Последнее : segamel, 20.11.19 17:51
Ratings: 0 negative/0 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
forum.foxclub.ru
Ratings: 0 negative/1 positive
Re: Проблема с повторным нажатием кнопки панели инструментов
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
По-моему, это просто механизм непотери нажатия клавиш, а выполняться действия (в таймере, заряженном кнопкой) будут все равно последовательно.
Они и должны исполняться последовательно нет в этом проблемы. проблема в том, что пока в стеке вызовов висит cmd.click - то нажатия на эту кнопку НЕ вызывают срабатывания данного метода ещё и ещё раз. По сути кнопка блокируется.
Не требуется тут никаких параллельных/многопоточных решений, достаточно "освободить" кнопку.
of63
Я к тому, что истиную реентерабельность (вклинивание выполнения процедуры между строками выполнения другой процедуры) не всегда можно достичь, мтк...
Реентерабельность это не "вклинивание выполнения". Это лишь возможность сколько угодно раз запускать один и тот же код (метод, процедуру) не испытывая при этом проблем - обычно повторные входы в код возникают из-за многопоточности, но никто не запрещает использовать рекурсию, или, как в данном случае, "подвесить" обработчик на DO FORM или ином модальном действии. При этом позволив фоксу продолжать "обрабатывать UI" - соответственно дав возможность ещё раз войти в этот же самый обработчик. В данном случае не совсем реентерабельность имеется в виду, но так вроде бы проще описать...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 (Гостей: 28)

© 2000-2024 Fox Club 
Яндекс.Метрика