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)
-   -   MDI Lazarus en Windows (https://www.clubdelphi.com/foros/showthread.php?t=84609)

F3niX 11-11-2013 21:49:52

MDI Lazarus en Windows
 
Buenas soy nuevo por acá, un placer estar con ustedes, tengo una duda y es que estoy creando una pequeña aplicación de facturación en Lazarus bajo plataforma linux, y hasta aca todo perfecto pero al momento de Compilar y ejecutar en windows los mdi no me funcionan. Espero que no sea una burrada de mi parte, jaja.

PD : Soy novato en FPC/Lazarus/Delphi, programe en Turbo Pascal ya hace rato y sobre todo cosas sencillas. Mas que todo me muevo en Python + QT, pero me gusta cambiar de lenguaje entre proyectos para no encadenarme a ningunos, razon por la cual decidi probar el RAD lazarus.

Saludos y de ante mano muchas gracias por su ayuda.

ecfisa 12-11-2013 17:56:56

Hola F3niX y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Según tengo entendido, la interface MDI aún no está implementada en Lazarus, pero podes usar el componente MultiDoc para simular el comportamiento.

Saludos :)

pacopenin 12-11-2013 19:52:39

Hola F3nix.

Como bien dice ecfisa, hasta donde yo conozco no existe MDI en lazarus ya que no es algo multiplataforma.

F3niX 13-11-2013 04:19:26

Buenas.
 
2 Archivos Adjunto(s)
Buenas amigo, gracias por la bienvenida enseguida leo la guía de estilos. Aparte no es por decir lo contrario pero si tenemos MDI en lazarus, mas me parece que no esta implementada para windows les anexo imagenes que lo comprueban.

En la primera imagen adjunta podemos observar el formulario MDI, y en la segunda la propiedad la propiedad "Form Style" en fsMdiChild también por supuesto nos da la opción fsMdiForm. En Linux funciona perfectamente, pero en windows no.

Saludos y gracias por sus respuestas.

ecfisa 13-11-2013 16:46:10

Hola F3niX.

Si, dese el inspector de objectos en la propiedad FormStyle figuran las opciónes, pero en Windows no funcionan. Lo leí en varios artículos y foros, te adjunto dos de ejemplo:Pero no quería quedarme sólo con lo leído, así que descargué la última versión de Lazarus y personalmente pude comprobar que no funciona sobre Windows.

Por hacer una burda analogía, en Delphi encontramos algo similar con la propiedad Font.Color de un TButton, la propiedad se visualiza en el inspector de objetos pero no aplica.

Saludos :)

F3niX 14-11-2013 05:03:26

Gracias.
 
Gracias amigo ya lo había leido,solo quize informar que por lo menos para linux si esta disponible, pero en windows probe compilando con WinApi, Qt, Gtk, y nada dicen que todavía no se ha implementado Qt completamente en windows.

Saludos.

pelecho 29-11-2013 17:22:58

MDI Lazarus en Windows
 
Hola a todos.
No se si les servira, pero de todos modos lo quiero compartir con Ustedes.

Existe una forma de disimular MDI, colocando por ejemplo en el formulario principal un TPageControl, añadiendo las siguientes rutinas en el formulario:
Código Delphi [-]
function TfrmPrincipal.AbaExiste(NomeAba: string): Boolean;
var
  i: Integer;
  Aba: TTabSheet;
begin
  Result := False;
  for i := 0 to PageControl1.PageCount - 1 do begin
    if PageControl1.Pages[i].Caption = NomeAba then begin
      Aba := PageControl1.Pages[i];
      PageControl1.ActivePage := Aba;
      Result := True;
      break;
    end;
  end;
end;

procedure TfrmPrincipal.CriarAba(clsForm: TForm; Index: Integer);
var
  TabSheet: TTabSheet;
  Form: TForm;
begin
  TabSheet := TTabSheet.Create(Self);
  Form := clsForm;
  if AbaExiste(Form.Caption) then
    Exit;
  with TabSheet do begin
    PageControl := PageControl1;
    Caption := Form.Caption;
    ImageIndex := Index;
  end;
  with Form do begin
    Align := alClient;
    BorderStyle := bsNone;
    Parent := TabSheet;
    Show;
  end;
  PageControl1.ActivePage := TabSheet;
  PageControl1.Visible := True;
end;

procedure TfrmPrincipal.FecharAba(NomeAba: string);
var
  i: integer;
  Aba: TTabSheet;
begin
  for i := 0 to PageControl1.PageCount - 1 do
  begin
    if PageControl1.Pages[i].Caption = NomeAba then
    begin
      Aba := PageControl1.Pages[i];
      Aba.Destroy;
      PageControl1.ActivePageIndex := 0;
//      PageControl1.Pages[i].Destroy;
      break;
    end;
  end;
end;

Para abrir la ventana dentro del TPagecontrol, solo deben colocar la siguiente sentencia:
Código Delphi [-]
CriarAba(frmClientes, 1);

Y para cerrar la ventana, en el boton con el que cierran la ventana:
Código Delphi [-]
    frmPrincipal.FecharAba(frmClientes.Caption);

Para que no se confundan con los X en la parte superior derecha de la ventana, deben agregar alguito mas de codigo. Sino, cierran la ventana principal y con eso salen del sistema.

En el formulario principal (en el OnCloseQuery):
Obs: los parametros de PChar() los declare en constantes, igual que ultimo parametro del mensaje. Aqui los puse para que no les confunda.
Código Delphi [-]
   CanClose := Application.MessageBox(PChar('¿Realmente desea salir del  programa?'), PChar(), MB_YESNO + MB_ICONWARNING +  MB_DEFBUTTON2)=ID_YES;

  if(CanClose)then
    Application.Terminate
  else
    Exit;

En la ventana que se abre dentro del TPageControl deben colocar siguiente codigo:
Código Delphi [-]
procedure frmClientes.FormClose(Sender: TObject; var CloseAction: TCloseAction
  );
var
  b: Boolean;
begin
  b := True;
  frmPrincipal.OnCloseQuery(frmPrincipal, b);

  CloseAction := caFree;
end;

Y eso es todo. Funciona bajo Windows y tambien lo probe bajo Linux Mint 15 y funciona de maravilla.

Espero que les sirve.

Saludos

F3niX 04-03-2014 20:52:27

Probare esto, saludos.


La franja horaria es GMT +2. Ahora son las 13:08:30.

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