Страница 1 из 1

Disable Close Button

Добавлено: 14 Июнь 2020, 8:51
morkovin
Как запретить кнопку "крестик" в правом верхнем углу окна (формы)?

Disable Close Button

Добавлено: 14 Июнь 2020, 9:44
Yufil
Вроде бы в описании структуры окна отключить флажок System ( System Menu ) .
А если ещё и Icon убрать, то крестика просто не будет

Disable Close Button

Добавлено: 14 Июнь 2020, 10:15
morkovin
Попробовал. Не прокатило почему-то.
Yufil писал(а): 14 Июнь 2020, 9:44 Вроде бы в описании структуры окна отключить флажок System ( System Menu ) .
А если ещё и Icon убрать, то крестика просто не будет

Disable Close Button

Добавлено: 14 Июнь 2020, 11:09
Дед Пахом
Вы не с тем боретесь - уберёте крестик, юзер нажмёт ESC, запретите ESC - юзер нажмёт Alt-F4.

Disable Close Button

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

Disable Close Button

Добавлено: 14 Июнь 2020, 12:12
Yufil
Так это другая вещь - надо блокировать ненужные Event:closeWindow и кнопку Esc.
Esc проще всего гасится командой Alert( EscKey ) , а Event:closeWindow - проверить, что было нажато
.... OF Event:CloseWindow
IF Field(){ Prop:Type } = Create:Button
Cycle
End

Disable Close Button

Добавлено: 14 Июнь 2020, 12:15
Yufil
morkovin писал(а): 14 Июнь 2020, 10:15 Попробовал. Не прокатило почему-то.
Yufil писал(а): 14 Июнь 2020, 9:44 Вроде бы в описании структуры окна отключить флажок System ( System Menu ) .
А если ещё и Icon убрать, то крестика просто не будет
А попробуй ещё и рамку убрать ( No Frame ). И заголовок окна ... У меня полно таких окон.

Disable Close Button

Добавлено: 14 Июнь 2020, 19:55
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

Disable Close Button

Добавлено: 14 Июнь 2020, 20:58
RaFaeL
morkovin писал(а): 14 Июнь 2020, 11:28 часть информации внизу формы бывает не видна на небольшом мониторе, и неопытный юзер вместо того, чтобы прокрутить окно, тупо жмет на крестик. Вот и хочется их "проучить".
Так поправьте форму, чтобы было все видно на небольшом мониторе и не кошмарьте юзеров

Disable Close Button

Добавлено: 15 Июнь 2020, 5:30
morkovin
RaFaeL писал(а): 14 Июнь 2020, 20:58 Так поправьте форму, чтобы было все видно на небольшом мониторе и не кошмарьте юзеров
Я вообще против поправок! :)
Можно было бы и разрешение экрана изменить. Но работа на 14" мониторах - это кошмар. А у начальства мониторы от 19" и выше - им же видеопланёрки проводить.

Disable Close Button

Добавлено: 15 Июнь 2020, 5:36
morkovin
gopstop2007 писал(а): 14 Июнь 2020, 19:55 Пользуюсь этим - отключить крестик - закрытия приложения
в самом APP - Open Windows
Ни фига се!Сложно как! Надо подумать в каких случаях без этого не обойтись.

Disable Close Button

Добавлено: 15 Июнь 2020, 6:00
gopstop2007
9 строки при открытии окна - сложно? :) :idied:

Disable Close Button

Добавлено: 15 Июнь 2020, 6:29
morkovin
gopstop2007 писал(а): 15 Июнь 2020, 6:00 9 строки при открытии окна - сложно? :) :idied:
Внести строчки не сложно. Но что за ними стоит - я в жизни бы не додумался. :) И всё ради крестика!

Disable Close Button

Добавлено: 15 Июнь 2020, 11:01
RaFaeL
morkovin писал(а): 15 Июнь 2020, 5:30 Но работа на 14" мониторах - это кошмар
Я работаю на планшете 10" и все убирается

Disable Close Button

Добавлено: 26 Июнь 2020, 14:26
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})