PDA

Ver la Versión Completa : Centrar un form en un panel


choclito1
08-09-2015, 18:18:56
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:


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


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:

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:
http://s29.postimg.org/obya6v8jr/choclito.gif

Saludos :)

choclito1
09-09-2015, 02:35:00
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:

..
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
...


...
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:

http://s28.postimg.org/7mc7qg7vh/choclito1.gif

Saludos :)

Casimiro Notevi
09-09-2015, 10:04:25
Muy bueno, creo que no había visto antes "incrustar" Forms de esa manera.