![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
![]() 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", ![]() ![]() 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 ![]() Craso error ![]() ![]() ![]() 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
|
![]() |
|
|
![]() |
||||
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 |
![]() |
|