Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Formularios MDI (https://www.clubdelphi.com/foros/showthread.php?t=38699)

CoCaInE 24-12-2006 06:34:38

Formularios MDI
 
Me gustaria que me ayudaran con los formularios Mdichild , Puesto que quiero que ellos no puedan salirse del mdiform osea que no puedan moverse dentro mas del tamaño del mdi, cuando el usuario logra moverlos aparecen Scrollbars a los laterales del form hay alguna manera de delimitar el area?:cool:

roman 24-12-2006 07:41:12

Extraño requerimiento pero puedes intentarlo interceptando el mensaje WM_MOVING del formulario hijo:

Código Delphi [-]
type
  TForm2 = class(TForm)
  private
    procedure WMMoving(var Msg: TWMMoving); message WM_MOVING;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.WMMoving(var Msg: TWMMoving);
var
  DragWidth: Integer;
  DragHeight: Integer;

begin
  inherited;

  DragWidth := Msg.DragRect.Right - Msg.DragRect.Left;
  DragHeight := Msg.DragRect.Bottom - Msg.DragRect.Top;

  with Msg, Application.MainForm do
  begin
    if DragRect.Left - 2 <= ClientOrigin.X then
    begin
      DragRect.Left := ClientOrigin.X + 2;
      DragRect.Right := ClientOrigin.X + DragWidth + 2;
    end;

    if DragRect.Right + 2 > ClientOrigin.X + ClientWidth then
    begin
      DragRect.Left := ClientOrigin.X + ClientWidth - DragWidth - 2;
      DragRect.Right := ClientOrigin.X + ClientWidth - 2;
    end;

    if DragRect.Top - 2 <= ClientOrigin.Y then
    begin
      DragRect.Top := ClientOrigin.Y + 2;
      DragRect.Bottom := ClientOrigin.Y + DragHeight + 2;
    end;

    if DragRect.Bottom + 2 > ClientOrigin.Y + ClientHeight then
    begin
      DragRect.Top := ClientOrigin.Y + ClientHeight - DragHeight - 2;
      DragRect.Bottom := ClientOrigin.Y + ClientHeight - 2;
    end;
  end;
end;

Claro que tendrías que hacer lo mismo para cada formulario hijo, o bien hacerlo para un formulario hijo base y heredar todos los demás de ése.

// Saludos

CoCaInE 24-12-2006 13:56:14

Gracias Roman
 
Gracias por contestarme lo que realmente sucede es que cuando abro un formulario mdichild y lo cierro, al volverlo abrir me aparece mas abajo de la posicion que tenia antes.....y alli es el problema por cada vez que lo cierran y lo abren va bajando mas para abajo y se va saliendo del form principal.

aledieb 24-12-2006 16:54:48

Pone en el Oncreate del form hijo:

Código Delphi [-]
Top:=10;
Left:=10;

y siempre aparecera a 10 y 10 pixels de la esquina superior izquierda

Zeta 24-12-2006 17:26:35

¿Y si lo abres maximizado siempre?

CoCaInE 24-12-2006 20:21:47

Gracias Aliendb
 
eh podido resolver la aparacion del mdichild, pero no comprendo donde eh de poner el codigo establecido por roman osea en que evento o lugar

Lepe 25-12-2006 13:25:34

El código de roman se haría en cada ventana mdiChild

Edito: Aquí si tiraría de herencia visual (como ya dijo roman), es decir, creas una ventana con ese código llamada FrmBaseChild, y cada vez que necesites una nueva ventana mdichild, vas a File -> New -> Project, eliges FrmBasechild, con esto, la nueva ventana ya tiene implementada ese código.

Saludos


La franja horaria es GMT +2. Ahora son las 15:56:15.

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