![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
Hola a tod@s, de nuevo con los problemas
![]() Estoy diseñando una aplicación que tiene un TPageControl2 dentro de una pestaña de otro TPageControl1. Algunas de las pestañas del TPageControl2 deben mostrarse u ocultarse dependiendo del estado de unos botones TCheckBox que actualizo desde una Base de datos. Las pestañas y los botones los nombro, (para mi comodidad), con el nombre de la clase y otro en mayúsculas separados por el guión bajo (_), por ejemplo si hay un botón llamado CheckBox_PEPE hay una pestaña llamada TabSheet_PEPE. Para dar "realce" a las pestañas, utilizo el evento OnDrawTab (las pone con el texto en rojo y negrita). Bien, depués de todo este "rollo", el problema es que muestra las pestañas que quiere (o no se hacerlo, que será lo más probable) ![]() Si desactivo la propiedad OwnerDraw, todo funciona correctamente. ![]() El código de los botones para ocultar las pestañas es el siguiente: Código:
procedure TForm_Configuracion.CheckBox_ACTIVAR_PESTANAS_OnClick(Sender: TObject);
var
TabSheet : TTabSheet;
Alias : string;
begin
{ calcular el alias del botón utilizado }
Alias := TCheckBox(Sender).Name;
while( Pos('_', Alias)>0 ) do
Delete( Alias, 1, Pos('_', Alias) );
{ buscar la pestaña correspondiente al botón }
TabSheet := FindComponent('TabSheet_'+Alias) as TTabSheet;
if( TabSheet<>nil ) then begin
{ pestaña encontrada, ocultarla o mostrarla }
TabSheet.TabVisible := TCheckBox(Sender).Checked;
end;
end;
![]() Código:
procedure TForm_Configuracion.PageControl2_OnDrawTab(
Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
Active: Boolean);
var
TabSheet : TTabSheet;
TabAlias : string;
Margen : integer;
begin
{ al dibujar las pestañas }
TabSheet := PageControl2.Pages[TabIndex];
//if not TabSheet.TabVisible then exit; { no vale, deja las pestañas en blanco }
TabAlias := TabSheet.Caption;
with PageControl2.Canvas do begin
if Active then begin
{ texto en negrita }
Font.Color := clRed;
Font.Style := [fsBold];
end else begin
{ texto normal }
Font.Color := clBlack;
Font.Style := [];
end;
FillRect(Rect);
Margen := (Rect.Right-Rect.Left- TextWidth(TabAlias)) div 2;
TextOut( Rect.Left+Margen, Rect.Top+4, TabAlias );
end;
end;
salvica |
|
#2
|
||||
|
||||
|
Haber si ahora podeis ayudarme
![]() En el ejemplo que pone Román aquí me ocurre lo mismo , entonces he optado por meter algunos controles en una de las pestañas que debe estar oculta, (hasta ahora estaban vacías y pensaba que lo que estaba viendo era correcto).Craso error ![]() ![]() , la variable TabIndex del procedimiento OnDrawTab del TPageControl recibe el número de órden de las pestañas visibles por lo que la líneano se corresponde con la realidad Ejemplo: Código:
PageIndex TabIndex Caption
========= ======== =======
0 0 Inicio
1 -1 Uno
2 -1 Dos
3 1 Tres
no pintaría pas pestañas uno y dos (TabIndex = -1), o sea TabVisible = false Al pintar la pestaña tres (TabIndex = 1) PageControl1.Pages[TabIndex].Caption = Uno ¿Como puedo resolver el problema? (Saber el PageIndex de la pestaña a dibujar) Gracias Salvica |
|
#3
|
||||
|
||||
|
Hola Salvica
Mira a ver si este codigo te puede ayudar
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| TTabcontrol con OwnerDraw y texto largo | lag_0 | OOP | 2 | 21-03-2008 18:57:48 |
| TPageControl | Neiro | SQL | 4 | 06-10-2006 22:25:57 |
| Fondo en TPageControl | fabianmk | OOP | 4 | 02-10-2006 13:23:46 |
| Deshabilitar una solapa de TPageControl | reina | Varios | 5 | 23-08-2005 01:16:39 |
| TpageControl | agora18 | Varios | 6 | 17-10-2003 01:04:43 |
|