PDA

Ver la Versión Completa : Cambiar la pestaña del PageControl


Frank
27-02-2007, 11:24:04
Hola !!
He estado mirando por el foro, pero no he encontrado , lo que necesito. Quisiera saber, como puedo cambiar, el color del fondo y de la fuente, de las pestañas de un pagecontrol, sin que sea una de las pestañas activas.
Alguien tiene una idea ? gracias

Bicho
27-02-2007, 11:47:04
Hola,

yo uso lo siguiente:


procedure Tform1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
begin
with PageControl1.canvas do begin
fillrect(rect);
brush.style := bsClear;
font.Color := clWhite;
textout(rect.left+3,rect.top+3,PageControl1.Pages[TabIndex].Caption);
font.Color := clBlack;
textout(rect.left+2,rect.top+2,PageControl1.Pages[TabIndex].Caption);
end;
end;

Saludos

Frank
27-02-2007, 12:43:25
Es eso mas o menos lo que estoy buscando, pero lo que me gustaria, es poder cambiar, la apaciencia de la pestaña, en tiempo de ejecucion, de una de todas las pestañas, por ejemplo, que una de todas tenga el fondo en rojo y la fuente en blanco, tienes alguna idea de como puede hacerse ?

Gracias, por todo.

dec
27-02-2007, 12:53:18
Hola,

Cuestión de condiciones, ¿no? Puedes jugar con el "Caption" de la pestaña, o su "Index".

El caso es que al cabo quedaría en el evento "OnDrawTab" algo similar a lo siguiente:


begin
if TabIndex = 0 then
begin
// Aquí pintamos la pestaña "0" de una forma...
end;
// Y aquí podríamos pintar el resto de otra forma...
end;

Bicho
27-02-2007, 12:54:16
Hola,

procedure Tform1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);

El último parámetro del procedimiento te indica si la pestaña a dibujar es la activa.

Probando con algo así me funciona (el efecto no es muy bueno a la vista pero sirve, habría que retocarlo)

procedure Tform1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
begin
with PageControl1.canvas do begin
fillrect(rect);
brush.style := bsClear;
if Active then font.Color := clRed
else font.Color := clwhite;
textout(rect.left+3,rect.top+3,PageControl1.Pages[TabIndex].Caption);
if Active then font.Color := clGreen
else font.Color := clBlack;
textout(rect.left+2,rect.top+2,PageControl1.Pages[TabIndex].Caption);
end;
end;

Saludos

P.d: y se me olvidaba, gracias por el apunte dec. tambien puedes usar el TabIndex para usar la pestaña que quieras

gaunmanuel
29-09-2015, 20:57:09
Hola que tal,
Por mas que hago este ejemplo no me funciona, el evento onDrawTab nunca se dispara y nunca cambia el color ni nada.
alguna idea?

ecfisa
29-09-2015, 21:05:46
Hola gaunmanuel.

Para que se dispare el evento OnDrawTabt la propiedad OwnerDraw del TPageControl debe tener el valor True.

Saludos :)

gaunmanuel
29-09-2015, 21:09:06
hola ecfisa.
Si, esa propiedad ya se la especifique en TRUE, pero nada, lo único que hace al ponerla en TRUE simplemente desaparece el caption y nunca mas se visualiza.

ecfisa
29-09-2015, 21:19:59
Hola gaunmanuel.

Probé el código publicado por Bicho y funciona correctamente en Windows 32 bits.

Si estas usando Windows 64 bits, revisa este enlace: TPageControl OnDrawTab and Win64 (http://codeverge.com/embarcadero.delphi.vcl.using/tpagecontrol-ondrawtab-and-win64/1068914).

Saludos :)

gaunmanuel
29-09-2015, 21:28:14
muy bien, voy a realizar lo que dice el link, ya que si estoy usando windows 8.1 de 64 bits

gracias.

dec
29-09-2015, 22:35:32
Hola,

También podría interesarte usar algún componente de terceros, por ejemplo, los componentes Cindy (http://sourceforge.net/projects/tcycomponents/) incluyen, entre otros, un componente "PageControl" con muchas posibilidades estéticas.