Realmente estaba empeñado, en que el ordn de construccion era distinto, pero.
Realmente solo pense en el formulario inicial, y no en otros secundarios, pero
Creo que esto funciona en todos los casos, por lo menos en los que he probado.
Código Delphi
[-]
Tcustompanelcentrado=class(tcustompanel)
private
foncanresizedelform:controls.tcanresizeevent;
finiciado:boolean;
procedure centrar;
protected
public
constructor create(aowner:tcomponent); override;
procedure paint; override;
procedure canresizecompo(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
end;
tpanelcentrado=class(tcustompanelcentrado);
implementation
constructor tcustompanelcentrado.create(aowner:tcomponent);
begin
inherited create(aowner);
finiciado:=false;
end;
procedure tcustompanelcentrado.paint;
var misterx:tcontrol;
begin
if not finiciado then
begin
if not (csDesigning in ComponentState) then
begin
misterx:=self.Parent;
while not(misterx is tform) do
misterx:=misterx.Parent;
if assigned(tform(misterx).OncanResize) then
begin
foncanresizedelform:=tform(misterx).oncanresize;
end;
tform(misterx).OnCanResize:=canresizecompo;
centrar;
finiciado:=true;
end;
end;
inherited;
end;
procedure tcustompanelcentrado.centrar;
begin
top:=(self.Parent.ClientHeight-height) div 2;
left:=(self.Parent.ClientWidth-width) div 2;
end;
procedure tcustompanelcentrado.CanResizecompo(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
if assigned(foncanresizedelform) then
foncanresizedelform(sender,newwidth,newheight,resize);
centrar;
end;
perdon por no tenerlo puesto en una undiad independiente, es que hay otros compos.
Saludos.
Nove




