Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Centrar un form en un panel (https://www.clubdelphi.com/foros/showthread.php?t=88988)

choclito1 08-09-2015 18:18:56

Centrar un form en un panel
 
Buenas tardes amigos del foro, viendo los post pude insertar un form dentro de un panel, luego quisiera que el form en el panel este en el centro con la ayuda del foro puse el siguiente codigo:
Código Delphi [-]

f_modalidad:=Tf_modalidad.Create(Self);
f_modalidad.Parent:=Panel1;

 f_modalidad.Top := (panel1.Height  div 2) - (f_modalidad.Height div 2) ;
  f_modalidad.Left :=(panel1.Width div 2) -  (f_modalidad.Width div 2);
f_modalidad.ClientWidth:=panel1.Width div 2;
f_modalidad.ClientHeight:=panel1.Height div 2;
f_modalidad.Show;
f_modalidad.SetFocus;
pero no me coloca en el centro que puedo estar haciendo mal, estare agradecido a la ayuda que me puedan brindar
Tambien utilice este codigo
Código Delphi [-]

f_modalidad.ManualDock(Panel1, nil, alcustom);
 f_modalidad.show;
estare muy agradecido amigos del foro por la ayuda que me brinden

ecfisa 09-09-2015 01:09:28

Hola choclito1.

Fijate si este ejemplo se asemeja a lo que buscas:
Código Delphi [-]
procedure TForm1.Panel1Click(Sender: TObject);
var
  F: TForm;
begin
  F:= TForm.Create(Self);
  F.Parent:= Panel1;
  F.Color := clMoneyGreen;
  F.ManualDock(Panel1, nil, alNone);
  F.Width := Panel1.Width - 30;
  F.Height:= Panel1.Height - 30;
  F.Left  := (Panel1.Width - F.Width) div 2;
  F.Top   := (Panel1.Height - F.Height) div 2;
  F.Show;
end;

Salida:


Saludos :)

choclito1 09-09-2015 02:35:00

Gracias por tu respuesta
 
Muchas gracias por responder ecfisa lo probare y estare comentando los resultados, comentarles que trabajo con delphi xe2.
Para explicarles mejor mi problema que en el form principal tengo un menu a la izquiera donde al hacer clic en cada opcion me muestre los forms contenidos en el panel que este a la derecha
Ahora comentarles que con el codigo que mostre coloco los forms dentro del panel, pero ahora tengo el problema que cuando hago clic en la opcion 1 me muestra el form2 y si hago clic en la opcion 2 me sobre pone el form2 sobre el form1 en el panel
Cual seria el codigo para que al hacer clic en cualquier opcion del menu me muestre el form de esa opcion y si ya se tiene otro form en el panel se destruya o se elimine y solo me muestre un solo form
Comentarles que busque en el foro y no encontre problemas similares al que solicito su ayuda, espero me hayan entendido , muchas gracias amigos del foro

ecfisa 09-09-2015 07:58:36

Hola de nuevo.

No sé si capté claramente la idea... Pero te pongo un ejemplo que realiza lo que entendí que consultas debajo:
Cita:

Empezado por choclito1 (Mensaje 496427)
..
Cual seria el codigo para que al hacer clic en cualquier opcion del menu me muestre el form de esa opcion y si ya se tiene otro form en el panel se destruya o se elimine y solo me muestre un solo form
...

Código Delphi [-]
...
implementation

// Los forms que uses. ( ¡¡ Quitados de Auto-create forms !! )
uses Unit2, Unit3, Unit4, Unit5;

var
  vForms: array of TForm;
  ixForm: Integer = -1;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // Tag como índice
  for i:= 0 to ToolBar1.ButtonCount-1 do
    ToolBar1.Buttons[i].Tag := i;
 // forms a arreglo
  SetLength(vForms, ToolBar1.ButtonCount);
  vForms[0] := Form2;
  vForms[1] := Form3;
  vForms[2] := Form4;
  vForms[3] := Form5;
end;

// Motrar form (evento asignado a todos los ToolButtons)
procedure TForm1.ToolButtonsClick(Sender: TObject);
var
  F: TForm;
begin
  if ixForm > -1 then
    vForms[ixForm].Free;
  ixForm := TToolButton(Sender).Tag;
  F := vForms[ixForm];
  case ixForm of
    0: F := TForm2.Create(Self);
    1: F := TForm3.Create(Self);
    2: F := TForm4.Create(Self);
    3: F := TForm5.Create(Self);
  end;
  F.ManualDock(Panel1, nil, alNone);
  F.Width   := Panel1.Width - 30;
  F.Height  := Panel1.Height - 30;
  F.Left    := (Panel1.Width - F.Width) div 2;
  F.Top     := (Panel1.Height - F.Height) div 2;
  F.Parent  := Panel1;
  F.Show;
end;
Con este resultado:



Saludos :)

Casimiro Notevi 09-09-2015 10:04:25

Muy bueno, creo que no había visto antes "incrustar" Forms de esa manera.


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

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