Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Limitar un form o aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=62601)

cmm07 04-01-2009 03:30:23

Limitar un form o aplicacion
 
Hola, necesito de vuestra ayuda, ¿como puedo limitar la pocicion de un form o de mi aplicacion con respecto a la pantalla?, osea como puedo hacer para que en un form al pinchar con el mouse en la barra del título y mover dicha form no sobrepase la pantalla ejemplo:

si tenemos una pantalla con una resolución 800x600 el limite de movimiento con el mouse sería Left Máximo 800 y el Top Máximo 600, creo que sería algo así, la verdad no se si ¿me explico bien?

Gracias. Espero sus respuestas..

54LU2;)

Lepe 04-01-2009 08:20:45

Este código solo controla cuando mueves la ventana a la izquierda y derecha:
Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Moviendo(var message:TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Moviendo(var message: TWMWindowPosChanging);
begin
  if message.WindowPos.x + self.Width >= screen.Width then
    message.WindowPos.x := screen.Width - self.Width
  else if message.WindowPos.x <= 0 then
    message.WindowPos.x := 0;
end;

Lo que hace es capturar el mensaje que windows le pasa a una ventana cuando ésta se está moviendo (o cambiando su tamaño) WM_WINDOWPOSCHANGING y en la rutina lo que hago es ver la posición actual message.windowPos.x y cuando se salga de la pantalla, le asigno un valor fijo.

Faltaría por comprobar el límite de arriba y de abajo, pero te dejo que trastees un poco ;).

Saludos

cmm07 04-01-2009 13:06:11

Gracias, amigo eso es exactamente lo quequería hacer , ahora solo me falta arriba y abajo, haber si se me ocurre algo o si se les ocurre algo a ustedes, creo que "x" es derecha/izquierda e "y" es Arriba/abajo, gracias.

Voy a jugar con el código....

Gracias.
XAO

cmm07 04-01-2009 13:10:04

Hola, ya descubrí el código(que rapido soy :) ) para arriba y abajo, aqui está:

Código Delphi [-]
  public
    procedure Moviendo(var message:TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Moviendo(var message: TWMWindowPosChanging);
begin
  if message.WindowPos.x + self.Width >= screen.Width then
    message.WindowPos.x := screen.Width - self.Width
  else if message.WindowPos.x <= 0 then
    message.WindowPos.x := 0;


   if message.WindowPos.y + self.Height >= screen.Height then
    message.WindowPos.y := screen.Height - self.Height
  else if message.WindowPos.y <= 0 then
    message.WindowPos.y := 0;
end;

Por si se dan cuenta llega hasta el final de la pantalla pasando por debajo del Menú Inicio o Barras de tareas, ¿existe algo que el limite sea hasta el menú inicio?

dec 04-01-2009 13:24:51

Hola,

Parece que el asunto se puede complicar algo. Puedes intentar conocer el alto de la barra de tareas y actuar en consecuencia, restándolo cuando sea menester. Pero la barra de tareas puede estar en cualquier lugar... arriba, abajo, a izquiera y derecha. Por lo tanto, igual te interesa saber dónde está la barra de tareas, realmente. Claro que no sé si bastaría con intentar obtener el "area de trabajo actual", que obvia la barra de tareas, y a partir de ahí trabajar. A ver si puedes llegar a algo en claro. ;)

cmm07 04-01-2009 13:29:00

tienes razón, se complica mucho, pero no se preocupen, ya resolví mi problema y ya no necesito hacer eso del menu inicio, pero muchas gracias dec por intentar ayudarme, y gracias a [Lepe] por haberme dicho la respuesta, y yo la complemente, gracias a ambos muchas gracias...
54LU2

Lepe 04-01-2009 19:59:23

Bueno, para completar el hilo y que alguien más le sirva:

En lugar de acceder a Screen.width, puedes acceder a Screen.monitors[0].WorkAreaRect que efectivamente te da el área de trabajo sin barras de tareas o barras de herramientas adosadas a la pantalla (recordemos esa posibilidad ;)).

Es sólo un ejemplo, El objeto screen tiene una propiedad Desktop que te dá el area completo del escritorio, aún usando varios monitores al mismo tiempo, por lo que no tienes que preocuparte mucho de esos casos especiales, sólo tienes que acceder a la propiedad adecuada.

Saludos


La franja horaria es GMT +2. Ahora son las 02:08:39.

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