On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 12
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 04.06.07 21:07. Заголовок: Как запретить закрытие терминального окна "крестом"?


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

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


администратор




Пост N: 708
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.06.07 21:48. Заголовок: Re:


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 13
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 07.06.07 20:56. Заголовок: Re:


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

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




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 14
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.06.07 20:33. Заголовок: Re:


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 15
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.06.07 12:29. Заголовок: Re:


Пришлось добавить такой цикл:

WHILE ( hWnd:= FindWindow( "Window Title" ) ) == 0
END // WHILE

Почему-то иногда hWnd оказывается == 0 и, естественно DeleteCloseButton( hWnd ) ничего не делает.

И еще: русские имена окон не прокатывают.

Спасибо еще раз!


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




Пост 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


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





Пост 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. ) // Блокирую крестик


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




Пост 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


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




Пост N: 2886
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.03.13 14:58. Заголовок: Pasha пишет: т.е. ч..


Pasha пишет:

 цитата:
т.е. чтобы открыть эту функцию, надо собрать харбор с макросом HB_GTWIN_USE_UNDOC_WINAPI


а без пересборки ни как ? ;)
пересобрать под MinGW это шибко долго будет , вчера уже поигрался.

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




Пост N: 2797
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.03.13 15:00. Заголовок: Dima пишет: а без п..


Dima пишет:

 цитата:
а без пересборки ни как ? ;)



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

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




Пост N: 2887
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.03.13 15:07. Заголовок: Pasha Да работает о..


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

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





Пост N: 99
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 12.08.13 12:03. Заголовок: Дабы не плодить темы..


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

Есть ли в Harbour какой-нить обработчик наподобие onExit, onClose и тп - чтобы при закрытии приложения корректно выйти из базы ?

Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 892
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 12.08.13 13:30. Заголовок: Sergy Посмотри прим..


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

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





Пост N: 103
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 12.08.13 13:43. Заголовок: PSP пишет: Посмотри..


PSP пишет:

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


Спасибо, посмотрю.

Не могли-бы Вы еще объяснить - что есть по сути "терминал" в понятиях Harbour ?

На Clipper моя программа работает в двух основных режимах: локально на машине с удаленной БД (в офисной сети) и на удаленном сервере, у которого БД локальна (через интернет для иногородних клиентов) через Windows Terminal (удаленный доступ).

Нигде специальных танцев с бубнами и "терминальных" библиотек не нужно было... Может я чего-то нужное упускаю ?

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




Пост N: 3365
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.08.13 13:51. Заголовок: Sergy пишет: Нигде ..


Sergy пишет:

 цитата:
Нигде специальных танцев с бубнами и "терминальных" библиотек не нужно было


А сейчас понадобились ? Должно и так работать

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 893
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 12.08.13 14:12. Заголовок: Sergy При сборке с ..


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


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





Пост N: 104
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 12.08.13 15:15. Заголовок: PSP пишет: При сбор..


PSP пишет:

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



Немного непонятно - нужен ли мне вообще он или нет. Из консольного окна в GUI переходить планов пока нет. Какие удобства/преимущества и тп дают терминальные драйверы для программы ?

PS: используется Win2003 как файловый сервер, на нем-же установлен виндовый RDP сервер, т.е. программы, запущенные на нем, видят базу локально. Клиенты - Win XP SP3.

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





Пост N: 105
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 12.08.13 15:17. Заголовок: Dima пишет: А сейча..


Dima пишет:

 цитата:
А сейчас понадобились ? Должно и так работать



Да просто несколько раз встречался с этим в описаниях Harbour, да и вот отсылка к нему (по поводу возможности убить процесс через диспетчер задач) возникла.

Может мне это очень нужно, но я не знаю, зачем...

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




Пост 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. Можно их оба прилинковать к программе, и использовать при необходимости тот или другой.


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник


Пост N: 894
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 12.08.13 15:41. Заголовок: Sergy пишет: Из кон..


Sergy пишет:

 цитата:
Из консольного окна в GUI переходить планов пока нет.


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

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





Пост N: 107
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 12.08.13 15:51. Заголовок: Pasha, PSP - спасибо..


Pasha, PSP - спасибо, понял.

Запущу проект, потом обязательно займусь "красивостями" второго терминала.

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





Пост N: 108
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 12.08.13 16:38. Заголовок: PSP пишет: Посмотри..


PSP пишет:

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



Посмотрел. Офигенно.

НО: диспетчер задач срубает программу без единого звука.

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





Пост N: 248
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 30.08.13 17:30. Заголовок: Вопрос. Вроде все о..


Вопрос.

Вроде все отладил, но кое-где шаловливые руки юзеров "срубают" задачу несмотря на выключенный крестик. Я вижу это по увеличивающемуся значению переменной err_count.
Прихожу, спрашиваю - что да как: в ответ невнятное блеяние что "все зависло, ничего не работало, я вызвал диспетчер задач, снял ее, запустил и снова все заработало".

Как-бы грамотно запротоколировать процесс ? Что они там делают - то-ли винду вырубают не выйдя из программы, то-ли диспетчером срубают, то-ли терминальный сеанс завершают, то-ли вообще обходят какие-то программыне ограничения, введенные для младших сотрудников - х.е.з., но хотелось-бы разобраться...

EXIT PROCEDURE в таком случае точно не срабатывает. Очень помог-бы снимок экрана или хотя-бы стек вызовов процедур на крайний случай...

С какой стороны лучше подступиться и возможно ли это на Harbour ?

Как первый вариант: маленькая программа-обертка(запускатель) для главной программы. Если выход из главной программы произошел без установки кода завершения, допустим, 55 - значит программа завершилась неудачно и нужно сохранить снимок экрана для разбора полетов. Может есть способ элегантнее? И я сомневаюсь, что он отработает в случае завершения работы винды или сеанса.

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




Пост N: 3495
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.08.13 17:55. Заголовок: Снимок экрана наверн..


Снимок экрана наверное не поможет а вот стек процедур да.

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



Пост 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



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





Пост N: 249
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 30.08.13 17:57. Заголовок: petr707 пишет: HB_G..


petr707 пишет:

 цитата:
HB_GTINFO( HB_GTI_CLOSABLE , .t. )



Это ведь с GTWIN не будет работать ? Нужно под GTWIN. Пока проблем от GTWVT для меня больше, чем преимуществ от его красивостей.

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



Пост N: 30
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 30.08.13 18:08. Заголовок: завершение сеанса - предыдущий сеанс некорректно завершен


Можно сделать как в самом Windows
При запуске следующего сеанса проверяется неудаленный семафор
предыдущего сеанса, определяется что завершение было нерегламентным,
поднимаются логи и прочее.
Если сеанс свалился по ошибке из ERRORSYS - должен быть файл этого лога.
Если по внутренней ошибке - есть hb_out.log
Можно завести служебную таблицу статистики сеансов
регистировать в нее все сеансы - дата, время -входа, user, комп и дата+время завершения и тд.
и смтреть сколько свалов в каком месте.
Можно - по настройке - включить лог выполнения функций программы.
Можете даже писать это не свои логи, а в журнал приложений Windows(на любителя)


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




Пост 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

Проехали , придумал как.

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

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