Автор | Сообщение |
|
| постоянный участник
|
Пост N: 12
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.06.07 21:07. Заголовок: Как запретить закрытие терминального окна "крестом"?
Речь идет об терминальном окне с прогой на xHarbour. Извините за ламерский вопрос. Возможно ли это? Если да, то как? Спасибо.
|
|
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 708
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.07 21:48. Заголовок: Re:
Где то была похожая тема , поищи !
|
|
|
|
| постоянный участник
|
Пост N: 13
Зарегистрирован: 27.01.07
|
|
Отправлено: 07.06.07 20:56. Заголовок: Re:
Не нашёл я ни хрена, чё-та... Сорри...
|
|
|
|
| модератор
|
Пост N: 493
Зарегистрирован: 25.05.05
|
|
Отправлено: 08.06.07 11:19. Заголовок: Рабочий пример
// How to disable Close for console Window Function Main() Local hWnd SetConsoleTitle( "This is my console Title" ) hWnd:= FindWindow( "This is my console Title" ) CLS ? " The close button is Enable " inkey( 0 ) DeleteCloseButton( hWnd) ? " The close button is Disable" inkey(0) Alert("Closing") #PRAGMA BEGINDUMP #include "hbapi.h" #include "Windows.h" HB_FUNC( SETCONSOLETITLE ) { hb_retl( SetConsoleTitle( hb_parc( 1 ) ) ) ; } HB_FUNC( FINDWINDOW ) { hb_retnl( (LONG)FindWindow( NULL, hb_parc( 1 ) ) ) ; } HB_FUNC( DELETECLOSEBUTTON ) { DeleteMenu(GetSystemMenu( (HWND)hb_parnl( 1 ), FALSE), SC_CLOSE, MF_BYCOMMAND ) ; DrawMenuBar( (HWND)hb_parnl( 1 ) ); } #PRAGMA ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 14
Зарегистрирован: 27.01.07
|
|
Отправлено: 08.06.07 20:33. Заголовок: Re:
Спасибо огромное!
|
|
|
|
| постоянный участник
|
Пост N: 15
Зарегистрирован: 27.01.07
|
|
Отправлено: 10.06.07 12:29. Заголовок: Re:
Пришлось добавить такой цикл: WHILE ( hWnd:= FindWindow( "Window Title" ) ) == 0 END // WHILE Почему-то иногда hWnd оказывается == 0 и, естественно DeleteCloseButton( hWnd ) ничего не делает. И еще: русские имена окон не прокатывают. Спасибо еще раз!
|
|
|
|
| |
Пост N: 2878
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.03.13 17:35. Заголовок: Может пригодится ком..
Может пригодится кому DeleteCloseButton(GetConsoleWindow()) ЗЫ Mingw #PRAGMA BEGINDUMP #include "hbapi.h" #include "Windows.h" HB_FUNC( DELETECLOSEBUTTON ) { DeleteMenu(GetSystemMenu( (HWND)hb_parnl( 1 ), FALSE), SC_CLOSE, MF_BYCOMMAND ) ; DrawMenuBar( (HWND)hb_parnl( 1 ) ); } WINBASEAPI HWND APIENTRY GetConsoleWindow( VOID ); HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( (LONG)GetConsoleWindow( ) ) ; } #PRAGMA ENDDUMP
|
|
|
|
| |
Пост N: 290
Зарегистрирован: 12.11.06
|
|
Отправлено: 25.03.13 08:38. Заголовок: Мне отвечали по данн..
Мне отвечали по данному вопросу... 1. Для терминала WIN SetConsoleTitle(Alltrim(cTxt)) hW := FindWindow(Alltrim(cTxt)) DeleteCloseButton(hW) #PRAGMA BEGINDUMP #include "hbapi.h" #include "windows.h" HB_FUNC(SETCONSOLETITLE) { hb_retl( SetConsoleTitle( hb_parc(1) ) ); } HB_FUNC(FINDWINDOW) { hb_retnl( (LONG) FindWindow(NULL,hb_parc(1)) ); } HB_FUNC(DELETECLOSEBUTTON) { DeleteMenu( GetSystemMenu((HWND) hb_parnl(1), FALSE), SC_CLOSE, MF_BYCOMMAND ) ; DrawMenuBar( (HWND) hb_parnl(1) ) ; } #PRAGMA ENDDUMP Для WVT ANNOUNCE HB_GTSYS REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT HB_gtInfo( HB_GTI_CLOSABLE, .F. ) // Блокирую крестик
|
|
|
|
| Администратор
|
Пост N: 2796
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.03.13 14:44. Заголовок: AndreyZh пишет: HB_..
AndreyZh пишет: цитата: | HB_gtInfo( HB_GTI_CLOSABLE, .F. ) |
| Я смотрю, в Harbour gtwin тоже реализована эта функция. Так что велосипед можно не изобретать. 2010-03-05 11:11 UTC+0100 Viktor Szakats (harbour syenar.net) ... * src/rtl/gtwin/gtwin.c % Simplified the way close button status is retrieved (based on code posted Saulius Zrelskis) + Added code to disable 'close' menu also. This is using undocumented Windows API call, so by default the logic is disabled, and can be enabled with HB_GTWIN_USE_UNDOC_WINAPI macro. (Thanks to Saulius Zrelskis for this API tip) (NOTE: All 'close' controls are controlled by HB_GTI_CLOSABLE) т.е. чтобы открыть эту функцию, надо собрать харбор с макросом HB_GTWIN_USE_UNDOC_WINAPI
|
|
|
|
| |
Пост N: 2886
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.03.13 14:58. Заголовок: Pasha пишет: т.е. ч..
Pasha пишет: цитата: | т.е. чтобы открыть эту функцию, надо собрать харбор с макросом HB_GTWIN_USE_UNDOC_WINAPI |
| а без пересборки ни как ? ;) пересобрать под MinGW это шибко долго будет , вчера уже поигрался.
|
|
|
|
| Администратор
|
Пост N: 2797
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.03.13 15:00. Заголовок: Dima пишет: а без п..
Dima пишет: цитата: | а без пересборки ни как ? ;) |
| Все-таки пересобирать не надо. Хотя в Changelog HB_GTWIN_USE_UNDOC_WINAPI упоминается, в сырцах его уже нет. Можно просто использовать HB_GTI_CLOSABLE
|
|
|
|
| |
Пост N: 2887
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.03.13 15:07. Заголовок: Pasha Да работает о..
Pasha Да работает однако.
|
|
|
|
|
| |
Пост N: 99
Зарегистрирован: 08.07.06
|
|
Отправлено: 12.08.13 12:03. Заголовок: Дабы не плодить темы..
Дабы не плодить темы, спрошу здесь: с удалением "крестика" из текущего окна понятно. Но пытливые умы юзеров не находят лучшего применения, чем напакостить программеру. Нету крестика - вызываем "диспетчер задач" и убиваем приложение. Как с этим бороться ? Есть ли в Harbour какой-нить обработчик наподобие onExit, onClose и тп - чтобы при закрытии приложения корректно выйти из базы ? Спасибо.
|
|
|
|
| постоянный участник
|
Пост N: 892
Зарегистрирован: 27.01.07
|
|
Отправлено: 12.08.13 13:30. Заголовок: Sergy Посмотри прим..
Sergy Посмотри пример для терминала gtwvt: harbour\tests\wvtext.prg
|
|
|
|
| |
Пост N: 103
Зарегистрирован: 08.07.06
|
|
Отправлено: 12.08.13 13:43. Заголовок: PSP пишет: Посмотри..
PSP пишет: цитата: | Посмотри пример для терминала gtwvt: harbour\tests\wvtext.prg |
| Спасибо, посмотрю. Не могли-бы Вы еще объяснить - что есть по сути "терминал" в понятиях Harbour ? На Clipper моя программа работает в двух основных режимах: локально на машине с удаленной БД (в офисной сети) и на удаленном сервере, у которого БД локальна (через интернет для иногородних клиентов) через Windows Terminal (удаленный доступ). Нигде специальных танцев с бубнами и "терминальных" библиотек не нужно было... Может я чего-то нужное упускаю ?
|
|
|
|
| |
Пост N: 3365
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.08.13 13:51. Заголовок: Sergy пишет: Нигде ..
Sergy пишет: цитата: | Нигде специальных танцев с бубнами и "терминальных" библиотек не нужно было |
| А сейчас понадобились ? Должно и так работать
|
|
|
|
| постоянный участник
|
Пост N: 893
Зарегистрирован: 27.01.07
|
|
Отправлено: 12.08.13 14:12. Заголовок: Sergy При сборке с ..
Sergy При сборке с помощью hbmk2 можно указать, какой терминал будет использован
|
|
|
|
| |
Пост N: 104
Зарегистрирован: 08.07.06
|
|
Отправлено: 12.08.13 15:15. Заголовок: PSP пишет: При сбор..
PSP пишет: цитата: | При сборке с помощью hbmk2 можно указать, какой терминал будет использован |
| Немного непонятно - нужен ли мне вообще он или нет. Из консольного окна в GUI переходить планов пока нет. Какие удобства/преимущества и тп дают терминальные драйверы для программы ? PS: используется Win2003 как файловый сервер, на нем-же установлен виндовый RDP сервер, т.е. программы, запущенные на нем, видят базу локально. Клиенты - Win XP SP3.
|
|
|
|
| |
Пост N: 105
Зарегистрирован: 08.07.06
|
|
Отправлено: 12.08.13 15:17. Заголовок: Dima пишет: А сейча..
Dima пишет: цитата: | А сейчас понадобились ? Должно и так работать |
| Да просто несколько раз встречался с этим в описаниях Harbour, да и вот отсылка к нему (по поводу возможности убить процесс через диспетчер задач) возникла. Может мне это очень нужно, но я не знаю, зачем...
|
|
|
|
| Администратор
|
Пост N: 2933
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.08.13 15:22. Заголовок: Не могли-бы Вы еще о..
цитата: | Не могли-бы Вы еще объяснить - что есть по сути "терминал" в понятиях Harbour ? |
| Тоже самое, что в клиппере. Это заменяемая библиотека, которая реализует функции ввода/вывода. Просто в клиппер был сделан только под ms dos, терминалов в нем было мало, и альтернативными терминалами мало кто пользовался. Харбор же используется под множество платформ, и под каждую есть как правило несколько терминалов. Что касается windows, это прежде всего gtwin, который работает через консольные средства windows. Примерно 10 лет назад Peter Rees из Новой Зеландии сделал еще один терминал для windows - gtwvt, которые реализован через стандартные графические средства windows, не использует wincon, и поддерживает 100%-ю функциональность харбора. С ним можно использовать различные шрифты, размеры, есть дополнительная библиотека, позволяющая использовать gui-контролы, что-то вроде псевдо-gui С тех пор можно говорить, что у харбора есть 2 стандартных терминала для windows: gtwin и gtwvt. Чтобы их подключить, достаточно опции скрипта для hbmk2. Можно их оба прилинковать к программе, и использовать при необходимости тот или другой.
|
|
|
|
| постоянный участник
|
Пост N: 894
Зарегистрирован: 27.01.07
|
|
Отправлено: 12.08.13 15:41. Заголовок: Sergy пишет: Из кон..
Sergy пишет: цитата: | Из консольного окна в GUI переходить планов пока нет. |
| Дык, как раз "консольное окно" посредством терминала и создается. По-умолчанию используется gtwin. Мне больше нравится gtwvt, он как-то гибче что ли... Посмотрите тот пример, что я выше указал. Скомпилируйте его. Сразу станет интересней )))
|
|
|
|
| |
Пост N: 107
Зарегистрирован: 08.07.06
|
|
Отправлено: 12.08.13 15:51. Заголовок: Pasha, PSP - спасибо..
Pasha, PSP - спасибо, понял. Запущу проект, потом обязательно займусь "красивостями" второго терминала.
|
|
|
|
|
| |
Пост N: 108
Зарегистрирован: 08.07.06
|
|
Отправлено: 12.08.13 16:38. Заголовок: PSP пишет: Посмотри..
PSP пишет: цитата: | Посмотри пример для терминала gtwvt: harbour\tests\wvtext.prg |
| Посмотрел. Офигенно. НО: диспетчер задач срубает программу без единого звука.
|
|
|
|
| |
Пост N: 248
Зарегистрирован: 08.07.06
|
|
Отправлено: 30.08.13 17:30. Заголовок: Вопрос. Вроде все о..
Вопрос. Вроде все отладил, но кое-где шаловливые руки юзеров "срубают" задачу несмотря на выключенный крестик. Я вижу это по увеличивающемуся значению переменной err_count. Прихожу, спрашиваю - что да как: в ответ невнятное блеяние что "все зависло, ничего не работало, я вызвал диспетчер задач, снял ее, запустил и снова все заработало". Как-бы грамотно запротоколировать процесс ? Что они там делают - то-ли винду вырубают не выйдя из программы, то-ли диспетчером срубают, то-ли терминальный сеанс завершают, то-ли вообще обходят какие-то программыне ограничения, введенные для младших сотрудников - х.е.з., но хотелось-бы разобраться... EXIT PROCEDURE в таком случае точно не срабатывает. Очень помог-бы снимок экрана или хотя-бы стек вызовов процедур на крайний случай... С какой стороны лучше подступиться и возможно ли это на Harbour ? Как первый вариант: маленькая программа-обертка(запускатель) для главной программы. Если выход из главной программы произошел без установки кода завершения, допустим, 55 - значит программа завершилась неудачно и нужно сохранить снимок экрана для разбора полетов. Может есть способ элегантнее? И я сомневаюсь, что он отработает в случае завершения работы винды или сеанса.
|
|
|
|
| |
Пост N: 3495
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.08.13 17:55. Заголовок: Снимок экрана наверн..
Снимок экрана наверное не поможет а вот стек процедур да.
|
|
|
|
| |
Пост N: 29
Зарегистрирован: 21.04.13
|
|
Отправлено: 30.08.13 17:55. Заголовок: Можно крестик не зап..
Можно крестик не запрещать, использовать под своим контролем что-то типа(см.ниже) WN_Notifier - можно вызывать и не при нажатии крестика, только задать nEvent(эмуляция) Коды возврата (0 или 1) нужно проверять, они разные для hb20 и hb30, h32 также разные коды для nEvent .. HB_GTINFO( HB_GTI_CLOSABLE , .t. ) HB_GtInfo( HB_GTI_NOTIFIERBLOCK, {|nEvent, ...| WN_Notifier( nEvent, ... ) } ) .... FUNCTION WN_Notifier( nEvent, ... ) Static n_GTE_CLOSE:=0// Номер вхождения .. DO CASE CASE nEvent == HB_GTE_SETFOCUS CASE nEvent == HB_GTE_CLOSE //HB_K_CLOSE n_GTE_CLOSE++ if n_GTE_CLOSE<=1// условие завершения - необязательное - можно требовать два нажатия на крестик и т.д. // завершение работы - здесь записать в лог, закрыть таблицы и прочее return 0 else n_GTE_CLOSE :=0 return 1 endif CASE nEvent == HB_GTE_RESIZED // обработка изменения размера окна OTHERWISE ENDCASE RETURN 0
|
|
|
|
| |
Пост N: 249
Зарегистрирован: 08.07.06
|
|
Отправлено: 30.08.13 17:57. Заголовок: petr707 пишет: HB_G..
petr707 пишет: цитата: | HB_GTINFO( HB_GTI_CLOSABLE , .t. ) |
| Это ведь с GTWIN не будет работать ? Нужно под GTWIN. Пока проблем от GTWVT для меня больше, чем преимуществ от его красивостей.
|
|
|
|
| |
Пост N: 30
Зарегистрирован: 21.04.13
|
|
Отправлено: 30.08.13 18:08. Заголовок: завершение сеанса - предыдущий сеанс некорректно завершен
Можно сделать как в самом Windows При запуске следующего сеанса проверяется неудаленный семафор предыдущего сеанса, определяется что завершение было нерегламентным, поднимаются логи и прочее. Если сеанс свалился по ошибке из ERRORSYS - должен быть файл этого лога. Если по внутренней ошибке - есть hb_out.log Можно завести служебную таблицу статистики сеансов регистировать в нее все сеансы - дата, время -входа, user, комп и дата+время завершения и тд. и смтреть сколько свалов в каком месте. Можно - по настройке - включить лог выполнения функций программы. Можете даже писать это не свои логи, а в журнал приложений Windows(на любителя)
|
|
|
|
| |
Пост N: 5690
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.05.16 17:31. Заголовок: petr707 пишет: HB_G..
petr707 пишет: цитата: | HB_GtInfo( HB_GTI_NOTIFIERBLOCK, {|nEvent, ...| WN_Notifier( nEvent, ... ) } ) |
| Как поймать событие в функции WN_Notifier что окно свернули ? PS Терминал Gtwvt/GtWvg Проехали , придумал как.
|
|
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|