FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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; 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 |
|
|
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 |
|