Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Ventana principal o contenedora de forms? (https://www.clubdelphi.com/foros/showthread.php?t=80082)

mightydragonlor 05-09-2012 02:30:57

Lo puedes hacer perfectamente con Frames y paneles, así que cuando requieras creas el frame en el panel deseado.

sebamawa 05-09-2012 08:58:54

Hola a todos.
Creo que encontré una muy buena alternativa a los que buscan formularios contenidos en uno principal al estilo MDI.
Usando un panel sobre el Form principal, se cargan los restantes Forms sobre el Panel y así se obtiene el resultado buscado. El video lo muestra en Delphi, pero ya está probado en Lazarus por mi.
Pueden verlo aquí http://www.youtube.com/watch?v=0VnPR4HHGTU
Saludos.

daragor 05-09-2012 14:56:23

En definitiva creo q frames, paneles.. cumplen con el objetivo. Igual a lazarus le falta esto.. una ventana contenedora. Gracias por el interes sebamawa

sebamawa 05-09-2012 19:18:43

Cita:

Empezado por daragor (Mensaje 441906)
En definitiva creo q frames, paneles.. cumplen con el objetivo. Igual a lazarus le falta esto.. una ventana contenedora. Gracias por el interes sebamawa

Es así, ya no hay mucho que hacer, inclusive la última alternativa que publiqué, si bien visualmente está bien, el comportamiento de los Forms contenidos no es el ideal al maximizarlos o minimizarlos.
Habrá que adaptarse a no usar ventanas MDI.
Ahora, una pregunta al compañero daragor. ¿Puedes explicarme el órden en que usas los componentes para lograr el efecto que muestras en la imagen anterior que publicaste (Artículos, Compras, Ventas...)?. Pues distingo paneles, frames y menús, pero no logro obtener el efecto de que cuando se elige un item (por ejemplo artículos) se muestre el panel - frame correspondiente.
Saludos.

daragor 05-09-2012 22:18:23

Compañero seba, como no... primero no uso paneles, por lo mismo que dijiste vos, es mas complicado con el tema forms en cuanto al diseño. Asi que solo estoy usando TPageControl, con las paginas necesarias (articulos, compras,ventas,etc.) dentro de cada pagina pongo un frame, ese frame esta creado aparte, con todos los objetos y procedimientos necesarios para por ejemplo un ABM de articulos. Incluso con los valores SQL, conexion, transicion, y datasource y querys que vaya a usarse. Cuando ejecutas ves el form principal voy navegando por las paginas. Pense en un menu para otras cosas, que si podrian ser forms volando por ahi.. un login, un manejo de mysql, etc. Espero me entiendas...



Saludos

sebamawa 06-09-2012 02:35:33

Gracias daragor por la información, hasta cualquier momento.
Saludos.

mightydragonlor 06-09-2012 04:40:06

Yo uso TFrames, sólo que los creo en tiempo de ejecución con el TPanel como padre, y todo el código lo manejo en el TFrame.

sebamawa 06-09-2012 07:08:32

Cita:

Empezado por mightydragonlor (Mensaje 442019)
Yo uso TFrames, sólo que los creo en tiempo de ejecución con el TPanel como padre, y todo el código lo manejo en el TFrame.

Hola mightydragonlor.
Pero cómo haces para manejar los paneles, por ejemplo maximizar o minimizar ventanas con ellos, usar menús, etc?
Puedes plantear un ejemplo?
Saludos.

mightydragonlor 06-09-2012 15:48:41

Nunca hago nada de eso, si necesito una ventana, pues uso una ventana, todo depende del look que le quiera dar a mi aplicación, pero en definitiva, nunca he usado formularios MDI, me parece que son horribles, ademas, para eso están las ventanas modales, Tabs, Notebook, paneles y demás, ahora si lo que quieres es que un panel pueda cambiar de tamaño y pocisión, no es muy dificil.
Código Delphi [-]
procedure TPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  inherited MouseDown(Button, Shift, X, Y);
  lastPos := ClientToScreen(point(X,Y));
  isMouseDown := true;
end;

procedure TPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
var
  diff,newPos:TPoint;
  newRect:TRect;
begin
  inherited MouseMove(Shift, X, Y);
  newPos := clientToScreen(point(X,Y));
  if isMouseDown then begin
    diff.x := newpos.x-LastPos.x;
    diff.y := newpos.y-LastPos.y;
    if panelMode in [pmMoveSelf] then
    begin
      newRect := BoundsRect;
      OffsetRect(newRect, diff.x, diff.y);
      BoundsRect := newRect;
    end else begin
      newRect := parent.BoundsRect;
      case panelmode of
        pmMoveSelf: OffsetRect(newRect, diff.x, diff.y);
        pmMoveParent: OffsetRect(newRect, diff.x, diff.y);
        pmResizeParent:
        begin
          inc(newRect.right,diff.x);
          inc(newRect.bottom,diff.y);
        end;
        pmResizeParentLeft:   inc(newRect.left,diff.x);
        pmResizeParentRight:  inc(newRect.right,diff.x);
        pmResizeParentTop:    inc(newRect.top,diff.y);
        pmResizeParentBottom: inc(newRect.bottom,diff.y);
      end;
      parent.BoundsRect := newRect;
    end;
  end;
  LastPos := newPos;
end;

procedure TPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  inherited MouseUp(Button, Shift, X, Y);
  IsMouseDown := false;
end;

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormDblClick(Sender: TObject);
begin
  application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  wLeft.PanelMode := pmResizeParentLeft;
  wright.PanelMode := pmResizeParentRight;
  wTop.PanelMode := pmResizeParentTop;
  wBottom.PanelMode := pmResizeParentBottom;

  panel1.PanelMode := pmMoveSelf;
  panel2.PanelMode := pmResizeParent;
  panel3.PanelMode := pmMoveParent;
  Self.DoubleBuffered:=True;
end;
Esto debería servirte.

sebamawa 06-09-2012 18:13:33

Gracias mightydragonlor, hace poco que uso Lazarus y todo tipo de idea nueva es bienvenida.
Saludos.

pedrolazarus 05-10-2012 18:41:10

Me intera mucho este tema, yo lo que hago es crear los formularios y los oculto y cuando los necesito los vuelvo a mostrar

form.hide

form.show

Pero esto no se si es lo correcto.

mightydragonlor 05-10-2012 19:41:36

Cita:

Empezado por pedrolazarus (Mensaje 446451)
Me intera mucho este tema, yo lo que hago es crear los formularios y los oculto y cuando los necesito los vuelvo a mostrar

form.hide

form.show

Pero esto no se si es lo correcto.

Sin importar si es lo correcto o no, lo que importa es que te sirva, si es cuestión de mejorar el rendimiento y consumir menos recursos, lo mejor es crear y destruir los formularios conforme los vas necesitando.

Saludos.

pedrolazarus 15-06-2013 23:24:45

1 Archivos Adjunto(s)
Pues yo en ves de Utilizar el panel como el ejemplo del Compañero sebamawa Pues decidi utilzar el mismo Form1 y de hecho se abre el form2 dentro del form1 pero cuando el form2 o hijo se maximiza (en el caso de ser mas pequeño q el form padre) queda como una imagen mezclada (no se si es a mi que me pasa o que)


Dejo el codigo, y para que quede el form hijo centrado en la propiedad position colocar poMainFormCenter

Ahora si el form hijo se inicia maximizado no hay problema


La franja horaria es GMT +2. Ahora son las 01:23:42.

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