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",
![Big Grin](http://www.clubdelphi.com/foros/images/smilies/biggrin.gif)
el problema es que muestra las pestañas que quiere (o no se hacerlo, que será lo más probable)
![Mad](http://www.clubdelphi.com/foros/images/smilies/mad.gif)
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;
El código para dar forma a las pestañas es el siguiente (sacado de aquí mismo):
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;
Gracias adelantadas por la ayuda
salvica