PDA

Ver la Versión Completa : crear varios form al iniciar la aplicacion


FGarcia
04-10-2008, 04:10:16
Hola!

Al iniciar delphi 7 (no conozco versiones anteriores) se activa la ventana principal que contiene a los componentes, ademas se activan la ventana del inspector de objetos y la ventana del Object TreeView (bueno al menos en el mio) ¿eso como se hace? ¿En el evento OnCreate del form principal se crean los otros forms? Estuve buscando por "Dock", "Acoplable" pero no encontre una respuesta para lo que quiero. Se agradece la ayuda

egostar
04-10-2008, 04:21:00
Hola

Puedes usar Form2.Show en el evento OnShow del Form1

Ademas de indicar como y donde quieres que se vean, por ejemplo Form1.Align = alTop y Form2.Align = alLeft ;)

Salud OS

FGarcia
04-10-2008, 16:38:25
Gracias por la respuesta de hecho asi lo resolvi, ahora me gustaria saber como hacer que si la ventana principal se mueve entonces la ventana secundaria se mueva con ella :o jaja ando medio zafado!!

Editando solo para dejar la constancia:

En el form principal en su evento OnShow:


//"Simulo" hacer click en el item de menu miGrafica
miGrafica.Click ;


En el ActionList se ejecuta esta accion al hacer click en el item de menu miGrafica. Verifico si ya existe el form frmPlot, si existe y esta minimizado
lo regreso a su tamaño normal y lo traigo al frente, en caso de no existir lo creo.


{ActionList1 OpenPlot}
procedure TfrmVistaPrincipal.OpenPlotExecute(Sender: TObject);
begin
if Assigned (frmPlot) then
begin
if frmPlot.WindowState = wsMinimized then
frmPlot.WindowState := wsNormal;
frmPlot.BringToFront;
end
else
frmPlot := TfrmPlot.Create (Application);
frmPlot.Show;
end;

En el form frmPlot en su evento OnClose y OnCreate


procedure TfrmPlot.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
frmPlot := nil;
end;

procedure TfrmPlot.FormCreate(Sender: TObject);
begin
Top := frmVistaPrincipal.Top + frmVistaPrincipal.Height + 1;
Left := frmVistaPrincipal.Left ;
end;

Como siempre quedo abierto a sugerencias para mejorar el codigo.

Saludos!!

Caro
04-10-2008, 20:04:42
ahora me gustaria saber como hacer que si la ventana principal se mueve entonces la ventana secundaria se mueva con ella


Hola FGarcia, para hacer que tu ventana secundaría se mueva cuando se mueve la principal puedes capturar el mensaje y preguntar si es SW_MOVE.


procedure SYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND;
................
................
procedure TForm1.SYSCOMMAND(var Msg: TMessage);
begin
Inherited;
if (Msg.WParam and $FFF0)= SC_MOVE then
begin
Form2.Left := Self.Left;
Form2.Top := Self.Top + Self.Height;
end
end;


Ahí mismo puedes preguntar si la secundaría estaría minimizada, si es así lo restauras

Saluditos

Caro
04-10-2008, 20:34:50
Hola de nuevo, creo que sería mejor capturar directamente el mensaje WM_MOVE, ya que de la forma que puse, tarda un poco en moverse la ventana secundaria, prueba este ejemplo que puso el amigo Roman http://www.clubdelphi.com/foros/showpost.php?p=3475&postcount=2

Saluditos

FGarcia
06-10-2008, 16:11:50
Gracias por la respuesta Caro. No he tenido oportunidad de trabajar en eso pero en la primera oportunidad lo hago y comentare los resultados.