On-line: i3t4j6, PSP, гостей 1. Всего: 3 [подробнее..]
АвторСообщение





Пост N: 7
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 19.11.11 22:38. Заголовок: Как правильно перехватить событие выхода по кресту?


Привет всем!
Что-то не могу перехватить событие nEvent == HB_GTE_CLOSE
Или эта возможность не реализована ?
Harbour 3.0.0 (r16951)

FUNCTION Main()
#include "hbgtinfo.ch"
#include "inkey.ch"
REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_GT_WVT
Hb_GtInfo( HB_GTI_CLOSABLE, .T. )
HB_GtInfo( HB_GTI_NOTIFIERBLOCK, { |nEvent| CloseX( nEvent ) } )
Set( _SET_EVENTMASK, INKEY_ALL )
MSETCURSOR( .T. )
CLS
Alert( 'Start Application' )
? 'To close by a cross'
while .t. ; end
RETURN NIL
*----------------
STATIC FUNCTION CloseX( nEvent )
if nEvent == HB_GTE_CLOSE.and.Alert( 'Close Application',{'OK','NO'})==1
CLOSE ALL
endif
RETURN NIL


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 20.11.11 00:53. Заголовок: Выход по X


Похоже, просто пропущен Quit ?

STATIC FUNCTION CloseX( nEvent )
if nEvent == HB_GTE_CLOSE.and.Alert( 'Close Application',{'OK','NO'})==1
CLOSE ALL
QUIT
endif
RETURN NIL


Спасибо: 0 
Цитата Ответить





Пост N: 8
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 11:29. Заголовок: Функция CloseX( nEve..


Функция CloseX( nEvent ) не вызывается, т.е. не срабатывает кодоблок в строке
HB_GtInfo( HB_GTI_NOTIFIERBLOCK, { |nEvent| CloseX( nEvent ) } )
Может быть у кого-нибудь на другой версии Harbour этот тестик работает ?

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 20.11.11 12:01. Заголовок: крестик


У меня работает - на Harbour 2.x

Тема обсуждалась на форуме, можно сделать поиск по слову "HB_GTI_NOTIFIERBLOCK"

Можно убрать слово STATIC из описания функции,
а также в тело MAIN добавить контроль ,что дейстительно программа использует терминал gtWVT
? hb_gtversion() // = "WVT"

в gtWIN - NOTIFIER не работает


Спасибо: 0 
Цитата Ответить





Пост N: 9
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 14:02. Заголовок: проверил ? hb_gtver..


проверил ? hb_gtversion() - возвращает WVT
STATIC убрал, хотя не должно бы мешать.
Попробую скачать новую версию Harbour, но помнится у меня и на Harbour 2 не работало.
Я тогда эту затею отложил, но заказчики привыкли закрывать крестом вместо меню "выход "

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2203
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 14:45. Заголовок: как вариант hb_GtInf..


как вариант hb_GtInfo( HB_GTI_CLOSABLE, .f. )

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 10
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 15:07. Заголовок: У меня этот параметр..


У меня этот параметр так и установлен в 'False'
Hb_GtInfo( HB_GTI_CLOSABLE, .F. )
но тянутся то пользователи к крестику!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 11
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 15:52. Заголовок: Скачал ночную сборку..


Скачал ночную сборку Harbour 3.1
компилирую: строка в bat-файле c:\hb31\bin\hbmk2 %1 -Lc:\hb30\lib\win\mingw -iC:\hb30\Include
не помогло.
???

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2204
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 16:15. Заголовок: Vladimir_K пишет: ..


Vladimir_K пишет:

 цитата:
Функция CloseX( nEvent ) не вызывается


У меня вызывается но как то странно.

Когда вылезает месага Alert( 'Start Application' ) , CloseX cрабатывает.

Закрываем Alert( 'Start Application' ) , видим ? 'To close by a cross' , жмем крест , срабатывает CloseX.
А вот если понажимать любые клавиши после ? 'To close by a cross' , то не работает.
Странно однако, ведь в 2-х последних случаях мы сидим в Do while


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2205
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 16:42. Заголовок: Попробуй так (у меня..


Попробуй так (у меня заработало)
 
FUNCTION CloseX( nEvent )
if nEvent == HB_GTE_CLOSE
clear typeahead
if Alert( 'Close Application',{'OK','NO'})==2
Return 1
else
close all
quit
endif
endif
RETURN 0


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 12
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 16:50. Заголовок: А у меня в любом слу..


А у меня в любом случае если нажатие на крест - моментально закрывается как при Alt-C
CloseX ниразу не сработала

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2206
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 16:52. Заголовок: Vladimir_K я собра..


Vladimir_K
я собрал прогу так а Вы ?
hbmk2 test -gtwvt

PS
BCC55

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 13
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 16:59. Заголовок: FUNCTION Main() #inc..


FUNCTION Main()
#include "hbgtinfo.ch"
#include "inkey.ch"
REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_GT_WVT
Hb_GtInfo( HB_GTI_CLOSABLE, .T. )
HB_GtInfo( HB_GTI_NOTIFIERBLOCK, { |nEvent| CloseX( nEvent ) } )
Set( _SET_EVENTMASK, INKEY_ALL )
MSETCURSOR( .T. )
CLS
Alert( 'Start Application' )
? hb_gtversion() // WVT
? 'To close by a cross'
while .t. ; end
RETURN NIL
*----------------
/*
FUNCTION CloseX( nEvent )
if nEvent == HB_GTE_CLOSE.and.Alert( 'Close Application',{'OK','NO'})==1
CLOSE ALL
endif
RETURN NIL
*/
FUNCTION CloseX( nEvent )
if nEvent == HB_GTE_CLOSE
clear typeahead
if Alert( 'Close Application',{'OK','NO'})==2
Return 1
else
close all
quit
endif
endif
RETURN 0

Не работает - потому что у меня, почему-то, не выполняестся кодоблок в этой строчке
HB_GtInfo( HB_GTI_NOTIFIERBLOCK, { |nEvent| CloseX( nEvent ) } )


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2207
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 17:02. Заголовок: Vladimir_K пишет: ..


Vladimir_K пишет:

 цитата:
Не работает


А если пробнуть BCC а не MINGW

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 14
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 17:09. Заголовок: также c:\hb31 ..


также c:\hb31\bin\hbmk2 clos.prg -gtwvt
Я подозреваю что не работает из-за того, что транслятор не Борландовский
Попробуйте minGW (я ВСС никогда не пользовался)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2208
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 17:42. Заголовок: Vladimir_K пишет: ..


Vladimir_K пишет:

 цитата:
Попробуйте minGW


Прибил я его и давно.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 20.11.11 17:54. Заголовок: крестик


Цитата из MAIN : while .t. ; end
Зачем же так нагружать систему ?
Ну хотя бы так:
n:=0;do while n<10000 ; n++; ?"n="+str(n); inkey(100);end

Цитата: "..почему-то, не выполняестся кодоблок..."
Нет доказательств этого утверждения.
Хотя бы сделайте вставку
FUNCTION CloseX( nEvent )
Static n_call:=0
n_call++
? "Call Closex="+str(n_call)
...





Спасибо: 0 
Цитата Ответить





Пост N: 15
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 17:56. Заголовок: Скачаю ВСС и попробу..


Скачаю ВСС и попробую
А почему minGW не подходит?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 16
Зарегистрирован: 14.09.11
ссылка на сообщение  Отправлено: 20.11.11 18:06. Заголовок: Петр 707 1)Цитата и..


Петр 707

1)Цитата из MAIN : while .t. ; end
Зачем же так нагружать систему ?
------------------------------------------
это же тэстовая програмка
=====================

2) Цитата: "..почему-то, не выполняестся кодоблок..."
Нет доказательств этого утверждения.
------------------------------------
если бы выполнялся, то
я бы увидел сообщение Alert( 'Close Application',{'OK','NO'})
из функции
FUNCTION CloseX( nEvent )
if nEvent == HB_GTE_CLOSE.and.Alert( 'Close Application',{'OK','NO'})==1
CLOSE ALL
endif
RETURN NIL






Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2209
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.11 18:27. Заголовок: Проверил в Mingw , д..


Проверил в Mingw , да не работает.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 20.11.11 18:28. Заголовок: Ответ на ответ


Э-э... Цитата: это же тэстовая програмка
То есть - должна работать иначе, чем нетестовая?!..

Сильно Нагруженный процесс просто не даст системе отработать нажатие на крестик.
Все ресурсы уйдут на цикл while .t. ; end

2) Что-то с логикой не так.
Цитата:"..я бы увидел сообщение Alert( 'Close Application',{'OK','NO'}) "
Фишка в том, что может и увидел бы, но не всегда, а только в случае "if nEvent == HB_GTE_CLOSE"


Спасибо: 0 
Цитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 65
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет