Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-01-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Ayuda dinámica

Tengo este formulario

El cuadro gris que se ve abajo a la derecha es un TListBox que sea crea de forma dinámica al pulsar el BitBtn que se ve a la izquierda. Par ello uso este código:
Código:
void __fastcall TfTablas::BotAyu(TObject *Sender)
{
     TBitBtn *Boton = dynamic_cast<TBitBtn *>(Sender);
    TComponent *Source;
     POINT P1, P2;

    for (nItem = 0; nItem < this->ComponentCount; nItem ++)
     {
          Source = this->FindComponent("AyuLis");
          if (Source != NULL)
               return;
     }

    for (nItem = 0; nItem < this->ComponentCount; nItem ++)
     {
          Source = this->FindComponent(Boton->Name.SubString(2, Boton->Name.Length()));
          if (Source != NULL)
               if (Source->ClassNameIs("TEdit") || Source->ClassNameIs("TLabeledEdit"))
               {
                    AyuEdit = static_cast<TCustomEdit *>(Source);
                    break;
               }
     }

     if (Source == NULL)
          return;

     P1.x = AyuEdit->Parent->Left + AyuEdit->Left;
     P1.y = AyuEdit->Parent->Top + AyuEdit->Top + AyuEdit->Height;
     P2   = ClientToScreen(P1);

     AyuLis              = new TListBox(this);
     AyuLis->Name        = "AyuLis";
     AyuLis->Parent      = this;
     AyuLis->BevelInner  = bvNone;
     AyuLis->BevelKind   = bkFlat;
     AyuLis->BevelOuter  = bvLowered;
     AyuLis->BorderStyle = bsNone;
     AyuLis->Color       = clSilver;
     AyuLis->Height      = 10 * AyuLis->ItemHeight;
     AyuLis->Left        = P2.x;
     AyuLis->Top         = P2.y;
     AyuLis->Width       = AyuEdit->Width + Boton->Width;
     AyuLis->OnClick     = AyuLisClick;
}
La idea, lógicamente, es que dicha ayuda aparezca justo debajo del TEdit correspondiente pero no sé como convertir esas coordenadas obtenidas con ClientToScreen de forma que se muestre como deseo.
Responder Con Cita
  #2  
Antiguo 13-01-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Thumbs up ¡Encontré la solución!

La he tenido todo el tiempo delante y no me había dado cuenta ops:

El código ha quedado así:
Código:
void __fastcall TfTablas::BotAyu(TObject *Sender)
{
     TBitBtn *Boton = dynamic_cast<TBitBtn>(Sender);
     TComponent *Source;
     POINT P1, P2;

    for (nItem = 0; nItem <this>ComponentCount; nItem ++)
     {
          Source = this->FindComponent("AyuLis");
          if (Source != NULL)
               return;
     }

    for (nItem = 0; nItem <this>ComponentCount; nItem ++)
     {
          Source = this->FindComponent(Boton->Name.SubString(2, Boton->Name.Length()));
          if (Source != NULL)
               if (Source->ClassNameIs("TEdit") || Source->ClassNameIs("TLabeledEdit"))
               {
                    AyuEdit = static_cast<TCustomEdit>(Source);
                    break;
               }
     }

     if (Source == NULL)
          return;

     P1.x = AyuEdit->Left;
     P1.y = AyuEdit->Top;
     P2 = this->ScreenToClient(AyuEdit->Parent->ClientToScreen(P1));

     AyuLis              = new TListBox(this);
     AyuLis->Name        = "AyuLis";
     AyuLis->Parent      = this;
     AyuLis->BevelInner  = bvNone;
     AyuLis->BevelKind   = bkFlat;
     AyuLis->BevelOuter  = bvLowered;
     AyuLis->BorderStyle = bsNone;
     AyuLis->Height      = 10 * AyuLis->ItemHeight;
     AyuLis->Left        = P2.x;
     AyuLis->Top         = P2.y + AyuEdit->Height;
     AyuLis->Width       = AyuEdit->Width + Boton->Width;
     AyuLis->OnClick     = AyuLisClick;
}
Hay que usar ClientToScreen para sacar la posición absoluta en píxeles del objeto y convertirla luego a posición relativa referida al formulario con ScreenToClient.
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
clave dinámica cmfab Varios 2 26-03-2012 16:02:57
Pagina Web Dinamica Rabata Varios 8 31-10-2005 18:00:08
Grilla dinamica zugazua2001 OOP 1 04-10-2004 18:52:02
Construcción de SQL dinámica Aprendiz SQL 2 10-10-2003 14:39:35


La franja horaria es GMT +2. Ahora son las 16:29:53.


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