Форум » [x]Harbour » Terminal WVT & EXIT PROCEDURE » Ответить

Terminal WVT & EXIT PROCEDURE

sashaBG: Привет всем на форуме ! Перекомпилировал один из своих проектов HARBOUR'ом используя терминал WVT Все работает нормально за изключением то что не срабатывает EXIT PROCEDURE при нажатии крестика для закрытия окна . Придется както убирать его или заставить работать EXIT PROCEDURE при нажатии крестика но как . Может у когото приходилось ето делать , Напишите пожалуста ! сборка харбура взята от сюда : http://cch4clipper.blogspot.com/2009/05/latest-developments-in-harbourby-viktor.html с применением новой утилитой HBMK2 Виктора . По моему очень удобная вещь . В начале программы стоит REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT hb_gtInfo(HB_GTI_FONTSIZE, 28) hb_gtInfo(HB_GTI_FONTWIDTH, 14) компилирую так : --------------------------------------------- c:\harbour\bin\HBMK2 CCH.HBP -comp=bcc а CCH.HBP содержит: -------------------------- -oCCH -gtWVT K.PRG K11.PRG K12.PRG ASSI.PRG CALC87.PRG LOCKS.PRG TEXTBROW.PRG INSTOGLE.PRG SHADOW.PRG fttext.c ------------------------------------------------

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

Петр: Проще всего запретить этот самый крестик hb_GtInfo( HB_GTI_CLOSABLE, .f. )

alkresin: hb_gtinfo( HB_GTI_NOTIFIERBLOCK, bCodeBlock ) устанавливает кодоблок bCodeBlock, выполняющийся при нажатии крестика. Если блок возвращает 0, приложение завершается, если другое число - продолжает работу.

sashaBG: Спасибо за ответ Петр и вам Александр ! а где можно почитать об етих функциях , неужели только копаясь в изходниках Харбура Еще раз спасибо !


alkresin: Увы ... Именно так я это сейчас и нашел ... Можно еще, конечно, порыться в архивах майл-листов или comp.lang.xharbour

Лукашевский: alkresin пишет: hb_gtinfo( HB_GTI_NOTIFIERBLOCK, bCodeBlock ) Жаль, что нельзя запретить закрытие программы по кресту в оконном режиме терминала GTWIN...

Dima: Лукашевский пишет: Жаль, что нельзя запретить закрытие программы по кресту в оконном режиме терминала GTWIN Ня ;) SetConsoleTitle("TEST") do WHILE ( hWnd:= FindWindow( "TEST" ) ) == 0 ENDdo DeleteCloseButton( hWnd)

Лукашевский: Dima пишет: SetConsoleTitle() FindWindow() DeleteCloseButton() На все функции - Unresolved external при линковке. Откуда брал?

Dima: Лукашевский [pre] #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 [/pre]

Лукашевский: Dima, спасибо огромное!!! А может быть, ты ещё знаешь, как в полноэкранном режиме GTWIN убрать курсор мыши (хотя бы сделать его невидимым)? Это одна из последних нерешённых проблем, которая у меня осталась в xHarbour'е...

Dima: Лукашевский request HB_NOMOUSE

Лукашевский: Dima пишет: request HB_NOMOUSE Сказка! Фантастика! Удалось!

Лукашевский: Dima пишет: SetConsoleTitle() FindWindow() DeleteCloseButton() Рано я обрадовался... Началась как раз фантастика: 1. Использование SetConsoleTitle() каким-то образом отменяет SetConsoleDisplayMode(1). Причём не важно, где они стоят по отношению друг к другу - до или после. Просто вот если используем SetConsoleTitle(), то SetConsoleDisplayMode(1) - переход в полноэкранный режим выполнения - уже не срабатывает, по крайней мере при установленном в ярлыке запуска режиме совместимости с Win'95. 2. После SetConsoleTitle('ООО "Привет+"') не срабатывает FindWindow('ООО "Привет+"'). Для латиницы FindWindow() работает, для кириллицы - увы, нет... Больше всего, конечно, напрягает пункт 1...

Dima: Лукашевский пишет: Для латиницы FindWindow() работает, для кириллицы - увы, нет Так и есть.

Dima: Лукашевский Бумс... а так ? local nStdOut := Hb_GetStdOut() nResult := SetConsoleDisplayMode(nStdOut, CONSOLE_FULLSCREEN)

Лукашевский: Dima пишет: CONSOLE_FULLSCREEN Откуда берём? В папке INCLUDE ни в одном файле такого нет, в BCC55 - тоже нет, и в скачанных SOURCE'ах - тоже... Ну да ладно, заменил на 1. Ничего не изменилось - как запускается свёрнутым, так и остаётся, пока мышью не тыкнешь. Но когда тыкнешь мышью - да, запускается в полном экране. Может, проблема немного в другом - окно программы при запуске мало того что свёрнуто, так ещё и неактивно. Какую функцию можно использовать для активизации терминального окна? Хотя, с другой стороны - без SetConsoleTitle() окно прекрасно активизируется и разворачивается во весь экран функцией SetConsoleDisplayMode(1), вот в чём фокус.

Dima: Лукашевский пишет: Откуда берём? #define CONSOLE_WINDOWMODE 0 #define CONSOLE_FULLSCREEN 1

Лукашевский: Dima пишет: #define CONSOLE_FULLSCREEN 1 Понятно. Я так и написал - SetConsoleDisplayMode(nStdOut, 1). Видимый эффект отсутствует.

Dima: Лукашевский пишет: Видимый эффект отсутствует. У меня ведь работает. Значит ты не там где нужно вставил эту строку. Пробни так nResult := SetConsoleDisplayMode(nStdOut, CONSOLE_FULLSCREEN) SetMode(25,80) Пример тут http://clipper.borda.ru/?1-4-0-00000354-000-0-0-1223578034

Лукашевский: Dima пишет: Пробни так Всё то же: nStdOut = 1 nResult = 1 Dima пишет: Значит ты не там где нужно вставил эту строку. Что значит "не там где нужно"? А где её нужно вставлять?

Dima: Лукашевский пишет: Что значит "не там где нужно"? А где её нужно вставлять? Кусок текста покажи.

Лукашевский: Dima пишет: Кусок текста покажи. #ifdef __HARBOUR__ sw_harbour = .T. REQUEST HB_GT_WIN REQUEST HB_GT_WVT REQUEST HB_NOMOUSE REQUEST HB_LANG_RU866 HB_LangSelect( "RU866" ) REQUEST HB_CODEPAGE_RU866 HB_SetCodepage( "RU866" ) HB_GtInfo(GTI_CODEPAGE, 255) if HB_GTVERSION() == "WVT" HB_GtInfo(HB_GTI_CLOSABLE, .F.) wint = HB_GtInfo(GTI_DESKTOPWIDTH) v_all = HB_GtInfo(GTI_DESKTOPHEIGHT) HB_GtInfo(GTI_FONTNAME, "Lucida Console") HB_GtInfo(GTI_FONTSIZE, IIF(v_all > 800, 34, IIF(v_all > 640, 18, 16))) HB_GtInfo(GTI_FONTWIDTH, ; IIF(wint > 1024, IIF(RIGHT(winstack, 4) == "0035", 15, 16), ; IIF(wint > 800, 12, 9))) else SetConsoleTitle("TEST") last_time = SECONDS() do while ( hWnd:= FindWindow( "TEST" ) ) == 0 .AND. SECONDS()-last_time < 5 enddo if hWnd > 0 DeleteCloseButton( hWnd) && Удаляем крестик endif nStdOut := Hb_GetStdOut() nResult := SetConsoleDisplayMode(nStdOut, CONSOLE_FULLSCREEN_MODE) MYMSG("nStdOut = " + NTRIM(nStdOut), "nresult = " + NTRIM(nresult)) SetMode(25, 80) endif SET EVENTMASK TO INKEY_LDOWN+INKEY_KEYBOARD SetFileApis() sw_NT = OS_IsWINNT() #endif

Dima: С ярлыка запускаешь ? Если так то смотри его свойства , закладка ярлык - окно - возможно тут у тебя и стоит запускать свернутое в значок

Лукашевский: Dima пишет: стоит запускать свернутое в значок Нет, стояло - "Обычный размер окна". Поставил "Развёрнутое на весь экран" - и заработало! Нет, ну это же догадаться нужно было!!! В связи с этим неплохо было бы иметь возможность программно изменять свойства ярлыка, - ничего об этом не слышал?

Dima: Лукашевский Просто интересно , ты все время вновь собранные программы запускаешь с ярлыка , ведь не удобно же ? :) я например редактирую исходники в Far (+ плагин для Clipper ), в нем же собираю и запускаю. Зачем тебе эти ярлыки для работы ? Ярлык нужен в моем понимании для конечного пользователя.

Лукашевский: Dima пишет: Ярлык нужен в моем понимании для конечного пользователя А я и смотрю всё это с точки зрения конечного пользователя! Юзверь-то однозначно ярлыком будет запускаться! И когда отсылаешь новый вариант проги по электронке, а тебе в ответ - что-то не работает или работает не так - это неприятно: во-первых, потому что очень трудно добиться внятного и подробного ответа, что именно не так, а во-вторых, сам ты со всем этим можешь поковыряться и всё отладить когда тебе удобно, а когда тебе сообщают об ошибке, приходится исправлять её в авральном порядке, и это обычно гораздо менее удобно!

Лукашевский: Лукашевский пишет: Поставил "Развёрнутое на весь экран" - и заработало! Я рано обрадовался - один раз почему-то запустилось нормально, а потом всё так же - свёрнутым...

PSP: Лукашевский, а если запустить напрямую (без ярлыка)?

Dima: Лукашевский Не пробовал ярлык заново создать ? Подозреваю что он у тебя 100 летней давности и создавался для Сlipper приложения.

Лукашевский: PSP пишет: а если запустить напрямую (без ярлыка)? А это смотря откуда... Из "Моего компьютера" и "Проводника" - запускается свёрнутым! А из Нортона или там ДОСовским ярлыком - разворачивается на полный экран, но там какие-то свои вариации, потому что nResult = 1 и в этих случаях, т.е. функция SetConsoleDisplayMode() не отрабатывает!

Лукашевский: Dima пишет: 100 летней давности и создавался для Сlipper приложения Я рассматриваю ВСЕ варианты, поэтому у меня оба ярлыка - и ДОСовский, при запуске которым программа нормально разворачивается, но присутствует второе пустое окно (юзвери категорически против ), и обычный виндовый (с тремя закладками в Свойствах), при запуске которым программа не разворачивается.

Dima: Лукашевский Брось куда нить EXE (+минимум баз если надо), пробну у себя запустить

PSP: Попробуй в папке windows\prefetch удалить все файлы с именем "ИмяТвоегоФайла-*.pf"

Лукашевский: PSP пишет: Попробуй в папке windows\prefetch удалить Вроде бы помогло , но: nResult всё равно 1, что странно... И ещё такая песня - если поставить в свойствах ярлыка "Запускать свёрнутым в значок" - запускается свёрнутым в значок, НО nResult = 0, т.е. функция SetConsoleDisplayMode() рапортует, что она нормально отработала, переключила терминал в полный экран! А программа в это время свёрнута в неактивный значок! Так может быть, дело всё-таки в том, чтобы значок запущенной программы как-то активировать?

PSP: Имхо, понятия "Полный экран" и "Развернутое окно" - суть разные. Может в этом путаница?

Лукашевский: PSP пишет: понятия "Полный экран" и "Развернутое окно" - суть разные. Так и я об этом! Но как развернуть свёрнутое окно терминала, никто пока не ответил...

PSP: Раз уж пользуешься ярлыком, может это поможет?

Лукашевский: PSP пишет: Раз уж пользуешься ярлыком Ярлыком пользуюсь не я, а юзвери (общим числом немножко более 300), это во-первых. Во-вторых, DOS-овский ярлык, который ты отобразил, отпадает - программа с GTWIN по нему открывается в двух окнах - одно пустое, а второе собственно окно программы, и это пустое сильно окно мешается в панели выполнения программ, но если его закрыть, автоматически закрывается и окно программы! И в-третьих, хоть и в Win-ярлыке эта настройка тоже есть, меня ломает настраивать 300 ярлыков вручную, а как это сделать программно - неизвестно, я уже задавал здесь этот вопрос...

PSP: Лукашевский пишет: Во-вторых, DOS-овский ярлык, который ты отобразил, Ярлык не DOS-овский. Far - консольное виндовое приложение.

Лукашевский: PSP пишет: Ярлык не DOS-овский. Ну, "старого формата"... как-то его обозвать нужно было. Сделай в Win'XP ярлык на xHarbour'ную программу, и ты увидишь отличия.



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