Quise agregar el siguiente snippet o trozo de código, para los puristas del leungaje, con el fin de que le sirva a alguién pero en la sección de trucos, al presionar el enlace correspondiente no aparece nada, por lo que lo dejo aquí a ver si algún mod puede echarnos la mano para que salga bien.
El código que pongo es harto simple y hasta trivial pero bastante útil. Sirve para crear o abrir una ventana hija centrada correctamente en el área de escritorio de la ventana padre.
Código Delphi
[-]
Procedure CreateMDIChildNormal(Owner:TForm; BaseClass:TFormClass; FormVar:TForm);
var
found:Boolean;
i:integer;
r:TRect;
Placement: TWindowPlacement;
ClWidth, ClHeight: Integer;
begin
found := FAlse;
GetWindowPlacement(Owner.ClientHandle, @Placement);
ClWidth := Placement.rcNormalPosition.Right - Placement.rcNormalPosition.Left;
ClHeight := Placement.rcNormalPosition.Bottom - Placement.rcNormalPosition.Top;
For i:= 0 To Owner.MDIChildCount-1 Do
If Owner.MDIChildren[i] is BaseClass Then
Begin
Owner.MDIChildren[i].Show;
found := True;
End;
if not found then
Begin
FormVar := BaseClass.Create(Owner);
FormVar.Left := (ClWidth - FormVar.Width) div 2;
FormVar.Top := (ClHeight - FormVar.Height) div 2;
End;
end;
end.
Ejemplo de llamada desde el form principal:
Código Delphi
[-]
CreateMDIChildNormal(Self, TMiForm, FMiForm);
Se aprovecha el hecho de que por default Delphi crea una variable para instanaciar la clase que corresponda a nuestra form, pero nada impide que se use cualquier otra variable del mismo tipo. La función busca si ya esta instanciada la ventana hija y de ser así simplemente la muestra en primer plano en caso contrario la crea y la muestra. Partes del código son aportaciones de Román para que la ventana se centre en el área cliente de nuestra ventana padre.