Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como puedo bloquear/inabilitar el boton cerrar y maximizar de una ventana (https://www.clubdelphi.com/foros/showthread.php?t=66944)

antonio302050 20-03-2010 16:45:11

Como puedo bloquear/inabilitar el boton cerrar y maximizar de una ventana
 
bueno mi problema es este

estoy programando un juego en delphi y necesito q el juego se cierre mediante otro boton 'salir' q yo programe y no por el boton cerrar de la ventana.
necesito bloquear/inabilitar el boton cerrar y el boton maximizar de una ventana
y necesito bloquear el boton maximizar porque el formulario del juego solo tiene q tener un tamaño especifico.
les agradezco la ayuda de antemano

roman 20-03-2010 17:19:32

Podrías ponerle borde bsNone para que no aparezca ningún icono no borde qué arrastrar.

// Saludos

antonio302050 20-03-2010 17:32:38

si es una buena idea
pero yo quiero que formulario tenga borde depende del Sistema Operativo,ademas necesito el boton minimizar.
tambien quisiera aprender como bloquear/inabilitar los botones de cerrar y maximizar para conocimiento

roman 20-03-2010 18:01:44

Ahí va:

Código Delphi [-]
procedure EnableSysCloseItem(Handle: HWND; Enable: Boolean);
const
  Flags : array[Boolean] of Integer = (MF_GRAYED, MF_ENABLED);

var
  SysMenu : HMENU;

begin
  SysMenu := GetSystemMenu(Handle, false);
  EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or Flags[Enable]);
end;

Te sirve para habilitar (true) o inhabilitar (false) el icono de cerrar de la ventana cuyo identificador (handle) le pases.

// Saludos

BrunoBsso 20-03-2010 21:24:44

Roman, por enésima vez te digo... ¿por qué no supe eso antes?
Yo siempre usaba el CloseQuery de los form para inhabilitar el cierre dependiendo de alguna condición.
Me voy a copiar tu código :D

PD: pregunto, ¿no sería bueno liberar el handle después?

antonio302050 22-03-2010 20:00:20

gracias roman.
muy bueno tu procedimiento,
una pregunta como puedo bloquear/inabilitar el boton maximizar ?
porque tu procedimiento solo bloquea el boton cerrar

antonio302050 22-03-2010 20:04:53

BrunoBsso sabes, nunca se me habia pasadopor la cabeza q hacia el evento CloseQuery,
es bueno aprender cosas nuevas , gracias

BrunoBsso 22-03-2010 20:13:30

Cita:

Empezado por antonio302050 (Mensaje 357790)
gracias roman.
muy bueno tu procedimiento,
una pregunta como puedo bloquear/inabilitar el boton maximizar ?
porque tu procedimiento solo bloquea el boton cerrar

Código Delphi [-]
procedure HabilitarSysMaximizeItem(Form:TForm; Habilitar:Boolean);
begin
  case Habilitar of
    TRUE:  Form.BorderIcons:=Form.BorderIcons+[biMaximize];
    FALSE: Form.BorderIcons:=Form.BorderIcons-[biMaximize];
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  HabilitarSysMaximizeItem(Self,TRUE);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  HabilitarSysMaximizeItem(Self,FALSE);
end;
Ahí tenés cómo habilitar e inhabilitar el botón Maximizar.
Saludos!!

BrunoBsso 22-03-2010 20:21:00

Cita:

Empezado por antonio302050 (Mensaje 357791)
BrunoBsso sabes, nunca se me habia pasadopor la cabeza q hacia el evento CloseQuery,
es bueno aprender cosas nuevas , gracias

Por si todavía te queda alguna duda, el OnCloseQuery (significa CuandoPidenCerrarlo más o menos) lo que hace es dispararse cuando alguien intenta cerrarlo y si está asignado ejecuta lo que pidas, luego verifica si vos permitís cerrarlo (el pparámetro CanClose) y si es TRUE lo cierra, sino simplemente no se cierra.
Ejemplo:
Un formulario con un TRadioGroup con 2 items. Cerrar (índice 0) permite cerrarlo y No Cerrar (índice 1) obviamente no lo permite. El evento OnCloseQuery lo verificará todo.
Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  case RadioGroup1.ItemIndex of
    0: CanClose:=True; //Le permito cerrar
    1: CanClose:=False; //No le permito cerrar
  end;
end;
Saludos!

antonio302050 27-03-2010 15:58:03

Cita:

Empezado por BrunoBsso (Mensaje 357794)
Código Delphi [-]procedure HabilitarSysMaximizeItem(Form:TForm; Habilitar:Boolean);
begin
case Habilitar of
TRUE: Form.BorderIcons:=Form.BorderIcons+[biMaximize];
FALSE: Form.BorderIcons:=Form.BorderIcons-[biMaximize];
end;end;
procedure TForm1.Button1Click(Sender: TObject);
begin
HabilitarSysMaximizeItem(Self,TRUE);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
HabilitarSysMaximizeItem(Self,FALSE);
end;
Ahí tenés cómo habilitar e inhabilitar el botón Maximizar.
Saludos!!

Gracias, me parece muy bueno tu procedimiento es exactamente lo q necesitaba, para bloquear el boton maximizar.
sabes me va aservir de mucho para el juego q estoy programando
ya que yo queria q el juego solo tenga las dimensiones de 800x600.
Saludos.

antonio302050 27-03-2010 16:09:10

Cita:

Empezado por BrunoBsso (Mensaje 357799)
Por si todavía te queda alguna duda, el OnCloseQuery (significa CuandoPidenCerrarlo más o menos) lo que hace es dispararse cuando alguien intenta cerrarlo y si está asignado ejecuta lo que pidas, luego verifica si vos permitís cerrarlo (el pparámetro CanClose) y si es TRUE lo cierra, sino simplemente no se cierra.
Ejemplo:
Un formulario con un TRadioGroup con 2 items. Cerrar (índice 0) permite cerrarlo y No Cerrar (índice 1) obviamente no lo permite. El evento OnCloseQuery lo verificará todo.

Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
case RadioGroup1.ItemIndex of
0: CanClose:=True; //Le permito cerrar
1: CanClose:=False; //No le permito cerrar
end;
end;




Saludos!

Como ya lo dije antes es bueno aprender algo nuevo todos los dias, y saber manejar los eventos de los formularios es algo importante ,algo q aprendi ayer fue usar el evento OnShow.. Tu ejemplo de como usar el evento OnCloseQuery es muy bueno de seguro me va ser muy ùtil, gracias.
Saludos .

BrunoBsso 27-03-2010 17:58:18

Pero no hay por qué!
Mirá mi firma y vas a entender mi ideología :)
Saludos!


La franja horaria es GMT +2. Ahora son las 23:26:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi