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;
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