Форум » [x]Harbour » Как запретить закрытие терминального окна "крестом"? » Ответить

Как запретить закрытие терминального окна "крестом"?

PSP: Речь идет об терминальном окне с прогой на xHarbour. Извините за ламерский вопрос. Возможно ли это? Если да, то как? Спасибо.

Ответов - 28, стр: 1 2 All

Dima: Где то была похожая тема , поищи !

PSP: Не нашёл я ни хрена, чё-та... Сорри...

gfilatov: // 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


PSP: Спасибо огромное!

PSP: Пришлось добавить такой цикл: WHILE ( hWnd:= FindWindow( "Window Title" ) ) == 0 END // WHILE Почему-то иногда hWnd оказывается == 0 и, естественно DeleteCloseButton( hWnd ) ничего не делает. И еще: русские имена окон не прокатывают. Спасибо еще раз!

Dima: Может пригодится кому DeleteCloseButton(GetConsoleWindow()) ЗЫ Mingw [pre2] #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 [/pre2]

AndreyZh: Мне отвечали по данному вопросу... 1. Для терминала WIN [pre2] 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 [/pre2] Для WVT [pre2] ANNOUNCE HB_GTSYS REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT HB_gtInfo( HB_GTI_CLOSABLE, .F. ) // Блокирую крестик [/pre2]

Pasha: 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

Dima: Pasha пишет: т.е. чтобы открыть эту функцию, надо собрать харбор с макросом HB_GTWIN_USE_UNDOC_WINAPI а без пересборки ни как ? ;) пересобрать под MinGW это шибко долго будет , вчера уже поигрался.

Pasha: Dima пишет: а без пересборки ни как ? ;) Все-таки пересобирать не надо. Хотя в Changelog HB_GTWIN_USE_UNDOC_WINAPI упоминается, в сырцах его уже нет. Можно просто использовать HB_GTI_CLOSABLE

Dima: Pasha Да работает однако.

Sergy: Дабы не плодить темы, спрошу здесь: с удалением "крестика" из текущего окна понятно. Но пытливые умы юзеров не находят лучшего применения, чем напакостить программеру. Нету крестика - вызываем "диспетчер задач" и убиваем приложение. Как с этим бороться ? Есть ли в Harbour какой-нить обработчик наподобие onExit, onClose и тп - чтобы при закрытии приложения корректно выйти из базы ? Спасибо.

PSP: Sergy Посмотри пример для терминала gtwvt: harbour\tests\wvtext.prg

Sergy: PSP пишет: Посмотри пример для терминала gtwvt: harbour\tests\wvtext.prg Спасибо, посмотрю. Не могли-бы Вы еще объяснить - что есть по сути "терминал" в понятиях Harbour ? На Clipper моя программа работает в двух основных режимах: локально на машине с удаленной БД (в офисной сети) и на удаленном сервере, у которого БД локальна (через интернет для иногородних клиентов) через Windows Terminal (удаленный доступ). Нигде специальных танцев с бубнами и "терминальных" библиотек не нужно было... Может я чего-то нужное упускаю ?

Dima: Sergy пишет: Нигде специальных танцев с бубнами и "терминальных" библиотек не нужно было А сейчас понадобились ? Должно и так работать

PSP: Sergy При сборке с помощью hbmk2 можно указать, какой терминал будет использован

Sergy: PSP пишет: При сборке с помощью hbmk2 можно указать, какой терминал будет использован Немного непонятно - нужен ли мне вообще он или нет. Из консольного окна в GUI переходить планов пока нет. Какие удобства/преимущества и тп дают терминальные драйверы для программы ? PS: используется Win2003 как файловый сервер, на нем-же установлен виндовый RDP сервер, т.е. программы, запущенные на нем, видят базу локально. Клиенты - Win XP SP3.

Sergy: Dima пишет: А сейчас понадобились ? Должно и так работать Да просто несколько раз встречался с этим в описаниях Harbour, да и вот отсылка к нему (по поводу возможности убить процесс через диспетчер задач) возникла. Может мне это очень нужно, но я не знаю, зачем...

Pasha: Не могли-бы Вы еще объяснить - что есть по сути "терминал" в понятиях Harbour ? Тоже самое, что в клиппере. Это заменяемая библиотека, которая реализует функции ввода/вывода. Просто в клиппер был сделан только под ms dos, терминалов в нем было мало, и альтернативными терминалами мало кто пользовался. Харбор же используется под множество платформ, и под каждую есть как правило несколько терминалов. Что касается windows, это прежде всего gtwin, который работает через консольные средства windows. Примерно 10 лет назад Peter Rees из Новой Зеландии сделал еще один терминал для windows - gtwvt, которые реализован через стандартные графические средства windows, не использует wincon, и поддерживает 100%-ю функциональность харбора. С ним можно использовать различные шрифты, размеры, есть дополнительная библиотека, позволяющая использовать gui-контролы, что-то вроде псевдо-gui С тех пор можно говорить, что у харбора есть 2 стандартных терминала для windows: gtwin и gtwvt. Чтобы их подключить, достаточно опции скрипта для hbmk2. Можно их оба прилинковать к программе, и использовать при необходимости тот или другой.

PSP: Sergy пишет: Из консольного окна в GUI переходить планов пока нет. Дык, как раз "консольное окно" посредством терминала и создается. По-умолчанию используется gtwin. Мне больше нравится gtwvt, он как-то гибче что ли... Посмотрите тот пример, что я выше указал. Скомпилируйте его. Сразу станет интересней )))



полная версия страницы