Ver Mensaje Individual
  #24  
Antiguo 12-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Reputación: 20
cesarsoftware Va por buen camino
Me parece que vamos a tener que alquilar un apartamento entre los dos y tomarnos las birras en el bar del barrio, mi mujer tambien me quiere echar de casa, menos mal que nos quedan las niñas...y el portatil.

Bueno, visto, lo que has hecho es mover las ventanas hijas cuando mueves el padre con
Código Delphi [-]
procedure TFPrincipal.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
  MoveFW();
  inherited;
end;
procedure TFPrincipal.MoveFW;
var
  X: Integer;
begin
  if Length(f2) > 0 then

    for X := 0 to Length(f2) - 1 do
    begin
      if (TForm2(f2[X]).Visible) then
      begin

        TForm2(f2[X]).moviendo := true;
        TForm2(f2[X]).Top := Self.Top + TForm2(f2[X]).difY;
        TForm2(f2[X]).Left := Self.Left + TForm2(f2[X]).difx;
        TForm2(f2[X]).moviendo := False;
      end;
    end;
end;

y en el hijo para apuntar la posicion actual
Código Delphi [-]
procedure tform2.WMWindowPosChanged(var Message: TWMWindowPosChanged);
begin
if moviendo=false then
begin
difx:=left-fprincipal.Left;
difY:=top-fprincipal.Top;
end;
inherited;
end;
para controlar los limites
Código Delphi [-]
procedure TForm2.WMMove(var Message: TWMMove);
begin
// Aqui habría que descontar la anchura de los bordes y el caption del form padre para mejorar el efecto.
   if leftthen left:=FPrincipal.Left;
   if (left+ width)>(fprincipal.Left+fprincipal.Width)  then
   left:=(fprincipal.Left+fprincipal.Width)-width;
   if (top + Height)>(fprincipal.top+fprincipal.Height)  then
   top:=(fprincipal.top+fprincipal.Height)-Height;

   if topthen top:=FPrincipal.Top;
end;

lo que me resulta curioso es el uso de esta funcion, le engañas a la cola de mensajes, quizas es que yo lo hubiera hecho con onmousemove,down y up, vamos la costumbre de cada uno, supongo
(editado: supongo que con un mensaje del sistema te ahorras asignar los eventos move,down,up a cada control, so burro)
Código Delphi [-]
procedure TForm2.WMNCHitTest(var Msg: TWMNCHitTest) ;
begin
inherited;
if Msg.Result = htClient then // Esta parte hace referencia a la parte donde se ha hecho click
Msg.Result := htCaption; // Aquí hace creer que donde se hizo click es el Caption Bar
end;

Desde luego el efecto es justo el deseado, me voy a poner a trabajar en esta tecnica que creo que va a ser la buena.

Cuando quieras las birras (o cafe)

PD: ¿porque se usa inherited, y cuando o porque se pone al principio o final de funciones? Thanks.

Última edición por cesarsoftware fecha: 12-03-2013 a las 19:13:24.
Responder Con Cita