Disable Close Button

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Disable Close Button

Сообщение morkovin »

Как запретить кнопку "крестик" в правом верхнем углу окна (формы)?
WBR, morkovin
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Disable Close Button

Сообщение Yufil »

Вроде бы в описании структуры окна отключить флажок System ( System Menu ) .
А если ещё и Icon убрать, то крестика просто не будет
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Disable Close Button

Сообщение morkovin »

Попробовал. Не прокатило почему-то.
Yufil писал(а): 14 Июнь 2020, 9:44 Вроде бы в описании структуры окна отключить флажок System ( System Menu ) .
А если ещё и Icon убрать, то крестика просто не будет
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Disable Close Button

Сообщение Дед Пахом »

Вы не с тем боретесь - уберёте крестик, юзер нажмёт ESC, запретите ESC - юзер нажмёт Alt-F4.
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Disable Close Button

Сообщение morkovin »

часть информации внизу формы бывает не видна на небольшом мониторе, и неопытный юзер вместо того, чтобы прокрутить окно, тупо жмет на крестик. Вот и хочется их "проучить".
Дед Пахом писал(а): 14 Июнь 2020, 11:09 Вы не с тем боретесь - уберёте крестик, юзер нажмёт ESC, запретите ESC - юзер нажмёт Alt-F4.
WBR, morkovin
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Disable Close Button

Сообщение Yufil »

Так это другая вещь - надо блокировать ненужные Event:closeWindow и кнопку Esc.
Esc проще всего гасится командой Alert( EscKey ) , а Event:closeWindow - проверить, что было нажато
.... OF Event:CloseWindow
IF Field(){ Prop:Type } = Create:Button
Cycle
End
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Disable Close Button

Сообщение Yufil »

morkovin писал(а): 14 Июнь 2020, 10:15 Попробовал. Не прокатило почему-то.
Yufil писал(а): 14 Июнь 2020, 9:44 Вроде бы в описании структуры окна отключить флажок System ( System Menu ) .
А если ещё и Icon убрать, то крестика просто не будет
А попробуй ещё и рамку убрать ( No Frame ). И заголовок окна ... У меня полно таких окон.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Disable Close Button

Сообщение gopstop2007 »

Не для формы, а для App, может поможет :)
Пользуюсь этим - отключить крестик - закрытия приложения
в самом APP - Open Windows

Код: Выделить всё

   l_hWnd = 0{PROP:Handle}
   !Obtain the handle to the form's system menu
   l_hMenu = GetSystemMenu(l_hwnd, 0)
  
   If l_hMenu Then          
     l_menuItemCount = GetMenuItemCount(l_hMenu)  !Obtain the number of items in the menu    
     !Remove the system menu Close menu item.
     !The menu item is 0-based, so the last
     !item on the menu is menuItemCount - 1
     i# = RemoveMenu(l_hMenu, l_menuItemCount - 1,BOR(MF_REMOVE,MF_BYPOSITION))
   
     !Remove the system menu separator line
     i# = RemoveMenu(l_hMenu, l_menuItemCount - 2,BOR(MF_REMOVE,MF_BYPOSITION))
    
     !Force a redraw of the menu. This
     !refreshes the titlebar, dimming the X
     i# = DrawMenuBar(l_hwnd)
   End
Global emmbeds -> Global data (4000)

Код: Выделить всё

! 1-2 Hide Menubar AppFrame и Отключить крестик - закрытия приложения (Global Data)
MF_BYPOSITION       equate(0400H)
MF_REMOVE           equate(01000H)
Global emmbeds -> Inside the global map (2916)

Код: Выделить всё

 module('windows')
! 2-2 Hide Menubar AppFrame и Отключить крестик WIN API (Inside the Global Map)
    GetMenu(long hWnd),long,pascal,raw,name('GetMenu')
    RemoveMenu(long hMenu,long uPosition,long uFlags),long,pascal,raw,name('RemoveMenu')
    DrawMenuBar(long hWnd),long,pascal,raw,name('DrawMenuBar')
    GetMenuItemCount(long hWnd),long,pascal,raw,name('GetMenuItemCount')
   ! DrawMenuBar(Long),Long,Pascal
   ! GetMenuItemCount(Long),Long,Pascal
   GetSystemMenu(Long,Long),Long,Pascal
   ! RemoveMenu(Long,Long,Long),Long,Pascal

 end
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Disable Close Button

Сообщение RaFaeL »

morkovin писал(а): 14 Июнь 2020, 11:28 часть информации внизу формы бывает не видна на небольшом мониторе, и неопытный юзер вместо того, чтобы прокрутить окно, тупо жмет на крестик. Вот и хочется их "проучить".
Так поправьте форму, чтобы было все видно на небольшом мониторе и не кошмарьте юзеров
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Disable Close Button

Сообщение morkovin »

RaFaeL писал(а): 14 Июнь 2020, 20:58 Так поправьте форму, чтобы было все видно на небольшом мониторе и не кошмарьте юзеров
Я вообще против поправок! :)
Можно было бы и разрешение экрана изменить. Но работа на 14" мониторах - это кошмар. А у начальства мониторы от 19" и выше - им же видеопланёрки проводить.
WBR, morkovin
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Disable Close Button

Сообщение morkovin »

gopstop2007 писал(а): 14 Июнь 2020, 19:55 Пользуюсь этим - отключить крестик - закрытия приложения
в самом APP - Open Windows
Ни фига се!Сложно как! Надо подумать в каких случаях без этого не обойтись.
WBR, morkovin
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Disable Close Button

Сообщение gopstop2007 »

9 строки при открытии окна - сложно? :) :idied:
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Disable Close Button

Сообщение morkovin »

gopstop2007 писал(а): 15 Июнь 2020, 6:00 9 строки при открытии окна - сложно? :) :idied:
Внести строчки не сложно. Но что за ними стоит - я в жизни бы не додумался. :) И всё ради крестика!
WBR, morkovin
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Disable Close Button

Сообщение RaFaeL »

morkovin писал(а): 15 Июнь 2020, 5:30 Но работа на 14" мониторах - это кошмар
Я работаю на планшете 10" и все убирается
Аватара пользователя
porutchik
Активист
Сообщения: 150
Зарегистрирован: 01 Февраль 2009, 5:35

Disable Close Button

Сообщение porutchik »

global map:
Module('win32')
EnableMenuItem(signed hMenu, signed uIDEnableItem, signed uEnable),bool,pascal,PROC
DrawMenuBar(signed hWnd),bool,pascal,PROC
GetSystemMenu(signed hWnd, bool act),signed,pascal
End

Before file declaration:^
SC_CLOSE equate(0f060h)
MF_GRAYED equate(1)

Procedure data
hMenu LONG

Init.Open window:
hMenu = GetSystemMenu(ThisWindow{prop:handle}, false)
EnableMenuItem(hMenu, sc_close, MF_GRAYED)
DrawMenuBar(ThisWindow{prop:handle})
Ответить