Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

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
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
  #2  
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
  #3  
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
  #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
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
  #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,

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
  #6  
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
  #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
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
  #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,

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 16:26:13.


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