Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemas PageControl en Builder (https://www.clubdelphi.com/foros/showthread.php?t=53577)

franfl 24-02-2008 14:17:55

Problemas PageControl en Builder
 
Buenas
Es la primera vez q entro en el foro, y es pq estoy muy bloqueado con una tonteria en un pagecontrol q tengo dentro de un form. No soi capaz de cambiar de color de las pestañas, y a veces no me cambia ninguna propiedad del formato.
Si alguien me puede ayudar se lo agradezco muchisimo
Gracias y felicidades por este foro tan bueno

ucanneo 25-02-2008 06:27:00

A mi tambien me pasaba que no podia cambiar la fuente, pero revisando la ayuda de vbuilder dice que tienes que cambiar la propiedad de ParentFont a true o false dependiendo de quien quieres que controle las propiedades de fuente, es decir si la tienes a false pues la podrás cambiar pero si está a true sólo cambiará desde un objeto padre


saludos

pd.- No se me habia ocurrido eso de cambiarle de color a las pestañas lo voy a intentar, pero pues no he visto donde

franfl 25-02-2008 10:09:01

Gracias pero eso ya lo se, así modifico la fuente, negrita, etc, pero el color no soi capaz, y en un libro q lei dice q se puede modificar. No es una cosa muy necesaria pero mejoraría la estetica bastante, ya que tengo bastantes pestañas.
Gracias

Red_Leon 28-05-2008 12:57:54

Tienes que poner la propiedad ownerdraw a true y en el evento ondrawTab un codigo como este

Código Delphi [-]
{Evento 'OnDrawTab' del PageControl, el cual se encarga de colorear las pestáñas}
procedure TForm.PageControlDrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  AText: string;
  APoint: TPoint;
begin
  with (Control as TPageControl).Canvas do
  begin
    {Color con el cual lo coloreara}
    if(active) then
    begin
      Brush.Color := rojo;
    end
    else
    begin
      Brush.Color := verde;
    end;
    FillRect(Rect);
    {Texto que se insertara en la pestaña}
    AText := TPageControl(Control).Pages[TabIndex].Caption;
    {Se colorea la pestana}
    with Control.Canvas do
    begin
      APoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(AText) div 2;
      APoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(AText) div 2;
      TextRect(Rect, Rect.Left + APoint.x, Rect.Top + APoint.y, AText);
    end;
  end;
end;

Elite237 19-09-2008 15:36:04

colorear tpagecontrol de acuerdo a valor
 
hola, necesito de tu ayuda,he implementado el codigo que le diste a otro usuario del club, solo que mi duda es como hacer que al momento de colorear las pestañas solamente sea la que cumpla determinada condicion. En mi aplicacion se van creando consecutivamente las pestañas de acuerdo al numero de vendedoras que tengo, lo que quiero que haga es que si por ejemplo, una vendedora vendio 10,000 pesos(mexicanos)se pinte la pestaña de color verde, y en caso de que venda menos de 10,000 se pinte de color rojo.

Espero haberme dado a entender.

M@R!N@ 01-10-2008 05:14:47

Hola espero que no sea muy tarde, pero lo pongo por si te sirve...

Para poder cambiar el color de tus pestañas tienes que hacer la propiedad OwnerDraw=true y en el evento OnDrawTab esto:

Código:


TPageControl *pageControl = dinamic_cast<TPageControl*>Control); //Puntero al TPageControl que recibe el evento
pageControl->Canvas->Brush->Color = clRed; //Color que quieres ponerle a las pestañas
 pageControl->Canvas->FillRect(Rect); //Para pintarlas
DrawText(pageControl->Canvas->Handle,pageControl->Pages[TabIndex]->Caption.c_str(),pageControl->Pages[TabIndex]->Caption.Length(), const_cast<TRect*>(&Rect), DT_CENTER | DT_VCENTER | DT_SINGLELINE); //Para que se vea tu texto después de pintarlas

Por cierto, si quieres pintar de diferente color cada pestaña. basta con que evalues el valor de TabIndex que te regresa el evento para saber en que pestaña estás y en base a esto puedes cambiar el color según la pestaña en el brush, por ejemplo:


Código:


TPageControl *pageControl = dinamic_cast<TPageControl*>Control);
if(TabIndex==0)
  {
  pageControl->Canvas->Brush->Color = clRed;
  }
else if(TabIndex==1)
  {
  pageControl->Canvas->Brush->Color = clBlue;
  }

pageControl->Canvas->FillRect(Rect);
DrawText(pageControl->Canvas->Handle,pageControl->Pages[TabIndex]->Caption.c_str(),pageControl->Pages[TabIndex]->Caption.Length(), const_cast<TRect*>(&Rect), DT_CENTER | DT_VCENTER | DT_SINGLELINE);

Esto hace que la primera pestaña se pinta roja, y la segunda en azul, pruébalo y espero que te sirva. Hasta luego!


La franja horaria es GMT +2. Ahora son las 17:38:57.

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