Ver Mensaje Individual
  #1  
Antiguo 21-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Reputación: 21
salvica Va por buen camino
Unhappy OwnerDraw en TPageControl

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
Responder Con Cita