Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2006
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Question Donde estoy¿?

Saludos a todos... Estoy usando un TPanel (bueno.. mas de uno) y uso las sentencias SendToBack y ..ToFront .... pero ¿como puedo saber en un determinado momento si tengo ese panel al frente o no? puesto que la propiedad visible es en ambos casos TRUE ... gracias por su colaboracion.
Responder Con Cita
  #2  
Antiguo 16-12-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola, ¿exactamente para que quieres saberlo?, porque yo nunca me he encontrado en esa situación. Si tengo uno objeto detrás y quiero que se ponga delante le hago un traer al frente y cuando no lo tenga que usar lo vuelvo al fondo.
Nada más.

Todo esto, en tiempo de ejecución. Porque en tiempo de diseño, puedes saberlo. El que está por encima visualmente y el que está por detrás. Hay no hay problema, no? Es que no he entendido muy bien, el porque de tu duda.

Saludos
Responder Con Cita
  #3  
Antiguo 16-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Supongo que existirá una función maravillosa que te devuelva la posición, pero como no la se, puede que esto te sirva

Código Delphi [-]
function Posicion(Control: TControl): Integer;
var
  i: Integer;
begin
  Result:= -1;
  if Control.Parent <> nil then
  begin
    for i:= 0 to Control.Parent.ControlCount - 1 do
      if Control = Control.Parent.Controls[i] then
      begin
        Result:= i;
        break;
      end;
  end;
end;

// Por ejemplo si queremos saber la posicion del Panel1
ShowMessage(IntToStr(Posicion(Panel1)));

Ahora seguro que viene roman y me dice que existe un IndexOf o algo así
Responder Con Cita
  #4  
Antiguo 16-12-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Ya echaba yo de menos al agonioso de Domingo siempre aguandome las respuestas, pero que te he hecho???

Saludos

p.d: tarco35, olvida mi mensaje, seguro que el codigo de seoane es lo ideneo para tí.
Responder Con Cita
  #5  
Antiguo 16-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Bicho
Ya echaba yo de menos al agonioso de Domingo siempre aguandome las respuestas, pero que te he hecho???
La verdad es que no pensaba contestar, pero al ver que lo hacías tu ....

Aprovecho para decir, aunque supongo que es evidente, que para saber si un control es el que esta por encima de todos solo hay que hacer algo como esto:

Código Delphi [-]
function EstoyPorEncima(Control: TControl): Boolean;
begin
  Result:= FALSE;
  if Control.Parent <> nil then
    Result:= Posicion(Control) = Control.Parent.ControlCount - 1;
end;

// Por ejemplo
 ShowMessage(BoolToStr(EstoyPorEncima(Panel1),TRUE));
Responder Con Cita
  #6  
Antiguo 16-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Seoane: ¿Cual es la teoría de ese código?

Se supone que todos los paneles tendrán el parent asignado (el mismo padre), significa que al cambiar su ZOrder, se cambia de sitio en el array Controls??

Según he visto en la VCL, BringtoFront, asigna la propiedad ZOrder a True, por aquí si vería sentido deducir cual está al principio, pero por Controls..... me he perdido.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 16-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
La teoria Lepe es la siguiente:

BringToFront llama a la funcion SetZOrder
Código Delphi [-]
procedure TControl.BringToFront;
begin
  SetZOrder(True);
end;

La función SetZOrder llama a SetZOrderPosition
Código Delphi [-]
procedure TControl.SetZOrder(TopMost: Boolean);
begin
  if FParent <> nil then
    if TopMost then
      SetZOrderPosition(FParent.FControls.Count - 1) else
      SetZOrderPosition(0);
end;

Y SetZOrderPosition cambia la posicion del control dentro de la lista de controles:
Código Delphi [-]
procedure TControl.SetZOrderPosition(Position: Integer);
var
  I, Count: Integer;
  ParentForm: TCustomForm;
begin
  if FParent <> nil then
  begin
    I := FParent.FControls.IndexOf(Self);
    if I >= 0 then
    begin
      Count := FParent.FControls.Count;
      if Position < 0 then Position := 0;
      if Position >= Count then Position := Count - 1;
      if Position <> I then
      begin
        FParent.FControls.Delete(I);
        FParent.FControls.Insert(Position, Self);
        InvalidateControl(Visible, True);
        if not (csLoading in ComponentState) then
        begin
          ParentForm := ValidParentForm(Self);
          if csPalette in ParentForm.ControlState then
            TControl(ParentForm).PaletteChanged(True);
        end;
      end;
    end;
  end;
end;

¿Lo ves ahora?
Responder Con Cita
  #8  
Antiguo 16-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pues sip, el caso es que tuve un problema con el JetEdit (editor rápido que uso para ver un .pas). Solo pude llegar al primer paso de SetZOrder(True), de ahí que me extrañase mucho.

Asias y perdone usted por hacerle perder tiempo

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 17-12-2006
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Thumbs up Gracias...

Gracias por su colaboracion... me ha sido muy util.... reciban un cordial saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber unidad de disco donde estoy marceloalegre Varios 4 12-07-2005 16:47:27
estoy desconcertada.... Alejandra Internet 2 21-10-2003 05:08:19
Saber donde estoy en un Rich Tonio Varios 2 16-09-2003 10:06:36


La franja horaria es GMT +2. Ahora son las 22:11:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi