Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
  #2  
Antiguo 22-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
Poder: 21
salvica Va por buen camino
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
Código Delphi [-]
Texto := PageControl1.Pages[TabIndex].Caption
no se corresponde con la realidad

Ejemplo:
Código:
PageIndex   TabIndex   Caption
=========   ========   =======
    0           0      Inicio
    1          -1      Uno
    2          -1      Dos
    3           1      Tres
Pintaría la pestaña cero (PageIndex = 0) con Caption = Inicio
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
Responder Con Cita
  #3  
Antiguo 05-02-2010
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Hola Salvica

Mira a ver si este codigo te puede ayudar

Código Delphi [-]
procedure TMC.PageControl1Change(Sender: TObject);
begin
  BotonBorraRuta.Enabled := False;
  TBotonBorraRuta.Enabled := False;
  MenuBorraRuta.Enabled := False;
  BotonAutoBorrar.Enabled := False;
  TBotonAutoBorrar.Enabled := False;
  MenuAutoBorrar.Enabled := False;
  case PageControl1.ActivePageIndex of
    0: begin
       TabRutasAjustar();
       AjustaRutaBotones();
       BotonBorraRuta.Enabled := True;
       TBotonBorraRuta.Enabled := True;
       MenuBorraRuta.Enabled := True;
    end;
    1: begin
       TabOperacionAjustar();
       AjustaOperacionBotones();
    end;
    2: begin
       TabInformeAjustar();
    end;
    3: begin
       TabAutoAjustar();
       BotonAutoBorrar.Enabled := True;
       TBotonAutoBorrar.Enabled := True;
       MenuAutoBorrar.Enabled := True;
    end;
    4: begin
       TabFtpAjustar();
    end;
    5: begin
    end;
  end;
end;
 
procedure TMC.PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
begin
  case PageControl1.ActivePageIndex of
    0: begin
    end;
    1: begin
    end;
    2: begin
    end;
    3: begin
    end;
    4: begin
       MemorizaSitioFtp();
       GuardaSitiosFtp();
       LeeSitiosFtp();
    end;
    5: begin
    end;
  end;
end;
 
procedure TMC.PageControl1Enter(Sender: TObject);
begin
  PageControl1Change(Nil);
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 22:06:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi