Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   TLabeledEdit y TPageControl (https://www.clubdelphi.com/foros/showthread.php?t=86749)

Angel.Matilla 27-09-2014 11:35:13

TLabeledEdit y TPageControl
 
Estoy trabajando con BCB 6.

Tengo un formulario con un TPageControl que tiene tres TabSheet. Si pongo un TLabeledEdit (o un TLabel, me da lo mismo) en el fomulario y luego lo traslado sobre el TPageControl, el Caption de la etiqueta se oculta debajo del TPageControl.



¿Cómo puedo hacer para que se vea el Caption? Me ocurre lo mismo con un TLabel que con un TLabeledEdit.

Casimiro Noteví 27-09-2014 12:36:38

Hola Angel, por favor, no olvides poner títulos descriptivos, gracias ;)

escafandra 27-09-2014 16:37:41

Angel, esa es una incomodidad propia de delphi y Builder, al menos hasta las versiones que yo he usado. Para poder pasar un control de un contenedor a otro debes editar a mano el archivo dfm trasladando el código del control de un contenedor al otro.

En tu caso quedaría algo así:
Código:

  object PageControl1: TPageControl
    Left = 64
    Top = 40
    Width = 273
    Height = 185
    ActivePage = TabSheet3
    TabIndex = 2
    TabOrder = 0
    OnChange = PageControl1Change
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
      object Label1: TLabel
        Left = 80
        Top = 80
        Width = 32
        Height = 13
        Caption = 'Label1'
      end
    end
    object TabSheet2: TTabSheet
      Caption = 'TabSheet2'
      ImageIndex = 1
    end
    object TabSheet3: TTabSheet
      Caption = 'TabSheet3'
      ImageIndex = 2
    end
  end

Saludos.

Angel.Matilla 29-09-2014 10:22:12

Gracias por la respuesta escafandra. El problema no es ese, y veo que me he explicado mal. Si yo pongo un TLabel o un TLabeledEdit directamente en el TabSheet se ve sin ningún problema.

En esta imagen Label1 está dentro del TabSheet:
Código:

  object PageControl1: TPageControl
    Left = 5
    Top = 5
    Width = 289
    Height = 193
    ActivePage = TabSheet1
    TabIndex = 0
    TabOrder = 0
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
      object Label1: TLabel
        Left = 5
        Top = 15
        Width = 32
        Height = 13
        Caption = 'Label1'
      end
    end
    object TabSheet2: TTabSheet
      Caption = 'TabSheet2'
      ImageIndex = 1
    end
  end

pero Label2 está directamente en el Form1. Si a este Label2 le modifico la porpiedad Top y le pongo, por ejemplo, 35 para que esté encima del TabSheet se queda como en la imagen de mi otro mensaje, por debajo del TPageControl; los controles SendToBack y BringToFront no producen ningún efecto.

Angel.Matilla 29-09-2014 10:22:54

Cita:

Empezado por Casimiro Notevi (Mensaje 482221)
Hola Angel, por favor, no olvides poner títulos descriptivos, gracias ;)

Tienes razón. Disculpa.

ecfisa 29-09-2014 12:46:13

Hola Angel.Matilla

Estando superpuestos en un mismo contenedor, un TGraphicControl siempre se ocultará detrás de un TWinControl.

Si el que se encuentra detrás del TPageControl se trata de un TWinControl, un TEdit por ejemplo , bastaría con hacer:
Código Delphi [-]
  Edit1->BringToFront();
Pero eso no funcionará con un descendiente de TGraphicControl y ese es el caso de TLabel.

Lo que podrías hacer es lo siguiente:
Código PHP:

...
TLabel *LB;

...
void __fastcall TForm1::btnLabelTabSheetClick(TObject *Sender)
{
  if(
LB == NULL){
    
LB Label1;
    
RemoveComponent(LB);
    
TabSheet1->InsertComponent(LB);
    
LB->Parent TabSheet1;
    
LB->Left 10;
    
LB->Top  10;
    
LB->Caption "Soy Label1 y ahora\nestoy visible en TabSheet1";
    ...
  }


Saludos :)

Angel.Matilla 29-09-2014 13:00:30

Comprendido. Ahora entiendo por qué con un TLabeledEdit sí veo el cuadro (parte TEdit) y no el rótulo (parte TLabel). Sólo una pregunta: Esa función btnLabelOnTabSheetClick, ¿está definida port el usuario o es un evento del TabSheet?

ecfisa 29-09-2014 13:03:08

Hola de nuevo.

Es el evento OnClick de un TButton llamado "btnLabelTabSheet" :) (o el evento que prefieras)

Saludos :)

Angel.Matilla 29-09-2014 17:21:27

Perfecto. Muchas gracias.

roman 29-09-2014 17:39:37

No entiendo para qué hacer por código lo que se puede hacer desde el diseño. Se selecciona la componente, se abre el menú contextual, se escoge Cortar y luego se pega dentro del contenedor deseado.

// Saludos

Angel.Matilla 29-09-2014 18:04:12

Cita:

Empezado por roman (Mensaje 482279)
No entiendo para qué hacer por código lo que se puede hacer desde el diseño. Se selecciona la componente, se abre el menú contextual, se escoge Cortar y luego se pega dentro del contenedor deseado.

Se ha ido todo un poco de madre. El problema es este: Tengo tres tablas distintas sin ninguna relación entre sí pero que las tres tienen un campo llamado título. Para ahorrar no sólo diseño sino también para simplificar el código quería poner un TEdit, con su TLabel, o un TLabeledEdit (estoy usando BCB6) único común a tres pestañas de un TPageControl. Usando un TLabeledEdit; si lo pongo dentro del TForm, pero no dentro del TPageControl, como en el Label2 de la imagen:

y luego modifico la propiedad Top de dicho elemento, poniendo por ejemplo 35, en lugar de ver ese Caption Label2 simplemente el TLabel desparece y, en diseño, se ve como en la imagen del primer mensaje

Las sugerencias que me habéis hecho se basan todas en hacer que el TLabel o el TLabeledEdit dependa del TPageControl (Label1->Parent = PageControl1) y no es eso.

Yendo a modificar directamente el dfm a pedal se me ocurrió esta forma:
Código:

  object PageControl1: TPageControl
    Left = 125
    Top = 55
    Width = 516
    Height = 291
    ActivePage = TabSheet1
    TabIndex = 0
    TabOrder = 0
    object Label2: TLabel
      Left = 270
      Top = 60
      Width = 32
      Height = 13
      Caption = 'Label2'
    end
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
      object Label1: TLabel
        Left = 20
        Top = 15
        Width = 32
        Height = 13
        Caption = 'Label1'
      end
    end
  end

poniendo el TLabel ANTES de los TabSheet, pero el resultado es el mismo. Gracias por las respuestas, pero ecfisa me dio la clave y he deducido que lo que pretendo no es posible.

roman 29-09-2014 18:08:46

Usa un TStaticText. Es como un TLabel, pero es un TWinControl en lugar de un TGraphicControl.

// Saludos

roman 29-09-2014 18:13:22

Incluso puedes usar un TFrame con un TLabel y un TEdit dentro. El TFrame lo colocas arriba del PageControl y tienes el efecto deseado.

// Saludos

Angel.Matilla 29-09-2014 18:38:44

Cita:

Empezado por roman (Mensaje 482286)
Usa un TStaticText. Es como un TLabel, pero es un TWinControl en lugar de un TGraphicControl.

¿Ves? Esto no se me había ocurrido y me viene de perlas. Gracias.


La franja horaria es GMT +2. Ahora son las 21:08:53.

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