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 |
#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ínea no 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 19:57:48 |
TPageControl | Neiro | SQL | 4 | 06-10-2006 23:25:57 |
Fondo en TPageControl | fabianmk | OOP | 4 | 02-10-2006 14:23:46 |
Deshabilitar una solapa de TPageControl | reina | Varios | 5 | 23-08-2005 02:16:39 |
TpageControl | agora18 | Varios | 6 | 17-10-2003 02:04:43 |
|