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 10-06-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Deshabilitar un TabSheet de un PageControl

Hola,

Estoy intentando deshabilitar un TabSheet de un PageControl.

Deberia ser simplemente haciendo TabSheet.enabled := false ó PageControl.Pages[index].enabled:= false.

Pero con ninguno se me deshabilita. Vaya que ni cambiando la propiedad enabled del Object Inspector.

Entonces, ¿Como se deshabilita?.

Muchas Gracias
Responder Con Cita
  #2  
Antiguo 10-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
O bien puedes poner visible a false de ese TabSheet, o bien colocar todos los componentes que tenga dentro de un Panel inhabilitado.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 10-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Pero con ninguno se me deshabilita. Vaya que ni cambiando la propiedad enabled del Object Inspector.


Bueno. Lo que ocurre es que cuando deshabilitas de ese modo una "pestaña" (un objeto "TTabSheet") no significa que no puedas acceder a ella, sino que todo su contenido se encontrará deshabilitado. Esto es, si tienes un "Memo" y un botón dentro de una pestaña y la deshabilitas, aunque podrás acceder a dicha pestaña, no podrás escribir en el "Memo" ni utilizar el botón.

Si lo que quieres es ocultar la pestaña, esto es, para que no pueda ser seleccionada, tienes la propiedad "TabVisible". De otro modo acaso puedas valerte de los eventos "OnShow" y "OnHide" de los objetos "TTabSheet"... o bueno, tal vez exista algún otro modo que a mí se me escapa ahora mismo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 10-06-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Antetodo gracias a los dos,

Pero eso ya lo sabía. Creo que no me explique bien, perdon.
Lo que quiero es que el titulo de la pestaña sea visible (a modo boton deshabilitado) pero que si está deshabilitada no se pueda acceder al contenido de la pestaña, esto es, que si pulso en la pestaña X no haga nada.
¿esto como se hace?

Espero haberme explicado mejor.

Un Saludo!
Responder Con Cita
  #5  
Antiguo 10-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé si has leído lo que te he respondido anteriormente. Lo que te he tratado de explicar es lo que ocurre cuando deshabilitas una pestaña. Es decir, que lo que tú quieres conseguir no se consigue deshabilitando la pestaña, vamos.

Ahora bien, ¿existe algún modo de conseguir lo que quieres? Mejor aún, ¿existe algún modo de conseguir el efecto que quieres, puesto que parece que como "debería" funcionar no funciona? Pues esto es lo que también creo haber dicho que no sé.

Seguramente, buscándole las vueltas... qué sé yo, jugando con los eventos anteriormente mencionados, con la posibilidad de cambiar el color del "Caption" de una pestaña,... tal vez sea posible, pero, desde luego, ahora mismo, no se me ocurre por dónde empezar.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 10-06-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Thumbs up Respuesta a mi mismo

Gracias Dec,

Al final lo he conseguido, lo explico y pongo aquí el código por si alguien le ha surgido el mismo problema.

Lo que he hecho es crear una variable que guarda el indice del ultimo TabSheet seleccinado y cuando cambio de TabSheet compruebo si es el que no quiero que se visualize, si es ese vuelvo al TabSheet anterior.
Código Delphi [-]
TabAnterior:Integer;

procedure TFormX.PageControlChange(Sender: TObject);
begin
   if (PageControlVisitas.ActivePageIndex = 6) then
   begin
     If TabAnterior=6 then
       TabAnterior:=0;
     PageControl.ActivePageIndex := TabAnterior
   end
   else
      TabAnterior := PageControlVisitas.ActivePageIndex;
end;

Un saludo!
Responder Con Cita
  #7  
Antiguo 10-06-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Se me olvidada...

Una ultima cosa , que estoy probando y no se hacerlo. ¿Como cambio el color de una pestaña en concreto? Se cambiar el color de todas, obiamente, y el color de la pestaña activa. Pero lo quiero es cambiar el color de una pestaña cualquiera , este activa o no.

Hasta luegoooo
Responder Con Cita
  #8  
Antiguo 10-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Me alegro. Yo tambiéne estaba investigando y creo que entre los dos y Román puedes lograr más o menos lo que querías en un principio. El método que has puesto quedaría así:

Código Delphi [-]
procedure TForm1.PageControl1Change(Sender: TObject);
begin
  if not (PageControl1.ActivePage.Enabled) then
  begin
    PageControl1.ActivePageIndex := TabAnterior
  end
  else
    TabAnterior := PageControl1.ActivePageIndex;
end;

El evento "OnDrawTab" del "PageControl" quedaría así:

Código Delphi [-]
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  R: TRect;
  Texto: String;

begin
  if not (PageControl1.Pages[TabIndex].Enabled) then
    Control.Canvas.Font.Color := clGrayText;

  Texto := PageControl1.Pages[TabIndex].Caption;

  R := Rect;
  Control.Canvas.FillRect(R);

  if not Active then
    InflateRect(R, 0, -3);

  DrawText(Control.Canvas.Handle, PChar(Texto), -1,
    R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;

La propiedad "OwnerDraw" del "PageControl" ha de valer "True", para el anterior código haga su trabajo.

Por último, ya podrías habilitar/deshabilitar pestañas mediante su propiedad "Enabled":

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  TabSheet2.Enabled := false;
  TabSheet4.Enabled := false;
  PageControl1.Repaint;
end;

El problema que he visto (de momento) es que al utilizar el evento "OnDrawTab", si utilizas también la unidad "XpMan", para lograr la apariencia del tema de Windows XP, ya sabes, pues resulta que la cosa no parece funcionar correctamente...

Es decir, el tema de Windows XP se aplicará (tendrá efecto) sobre otros controles, pero, no sobre el "PageControl", no sé si me explico.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 10-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Como puede verse, me limité a copiar el código que Román escribió en su momento en cierto Hilo de estos Foros. Entonces, parece que las siguientes instrucciones:

Código Delphi [-]
  if not Active then
    InflateRect(R, 0, -3);

No son necesarias en el código anterior, o, en todo caso, llevan a cabo algo que ahora mismo se me escapa. Que conste.

Actualización: Adjunto una especie de ejemplo de esto que estamos tratando.
Archivos Adjuntos
Tipo de Archivo: zip pruebas.zip (2,6 KB, 58 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 10-06-2006 a las 22:10:02.
Responder Con Cita
  #10  
Antiguo 10-06-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 19
Colgueit Va por buen camino
Muchisimas Gracias Dec!!!!!!!!!!!

Ya lo tengo en perfecto funcionamiento, y aparte he hecho que ademas de mostrar en gris el Tab deshabilitado, tambien hago que se muestre en otro color el Tab activo. Solo es una pequeña modificacion del codigo que me has pasado.
Código Delphi [-]
procedure TFormVisitas.PageControl1DrawTab(
  Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect;
  Active: Boolean);
var
  R,R2: TRect;
  Texto,Texto2: String;
begin

  if not (PageControl1.Pages[TabIndex].Enabled) then
    Control.Canvas.Font.Color := clGrayText;
  Texto2 := PageControl1.Pages[TabIndex].Caption;
  R2 := Rect;
  Control.Canvas.FillRect(R2);
  if not Active then
    InflateRect(R2, 0, -3);
 
  if Active then
    Control.Canvas.Font.Color := clBlue;
  Texto := PageControlVisitas.Pages[TabIndex].Caption;
  R := Rect;
  Control.Canvas.FillRect(R);
  if not Active then
    InflateRect(R, 0, -3);
 
  DrawText(Control.Canvas.Handle, PChar(Texto2), -1, R,
  DT_SINGLELINE or DT_CENTER or DT_VCENTER);
  DrawText(Control.Canvas.Handle, PChar(Texto), -1, R2,
  DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;


Muchas gracias otra vez!!!!!!! Agradezco mucho tu tiempo!!!!
Responder Con Cita
  #11  
Antiguo 10-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno, pues las gracias son mutuas entonces, porque de no haber sido por ti no hubiera yo sabido continuar. Justamente, si no llegas a escribir la implementación del método "OnChange" para el "PageControl" me parece a mí que me hubiera quedado encallado, así que gracias a ti. Y no se olvide a Román, puesto que el código del evento "OnDrawTab" lo escribió él originalmente.
__________________
David Esperalta
www.decsoftutils.com
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
Ayuda con PageControl y TabSheet rruffino Varios 15 21-10-2015 22:06:18
Como colocar una imagen en PageControl.Tabsheet ilichhernandez OOP 5 15-11-2005 19:35:26
tabsheet chechu Varios 1 15-11-2005 16:48:33
TabSheet REHome OOP 4 03-12-2004 05:33:23
TabSheet ramonibk Varios 3 23-09-2004 12:47:07


La franja horaria es GMT +2. Ahora son las 20:46:36.


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