Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TTabcontrol con OwnerDraw y texto largo (https://www.clubdelphi.com/foros/showthread.php?t=54517)

lag_0 21-03-2008 17:15:24

TTabcontrol con OwnerDraw y texto largo
 
Buenas!!
Teno unas TTabcontrol con un OwnerDraw que modifica el texto que enseñan las tabs, este punto es inevitable y no puedo cambiarlo lo único que necesito es una solución a lo siguiente:
La tab tiene 120 de Width, y si el texto que dibujo es: "Esto es un texto muy largo" la mitad queda por fuera del "botón" tab... me gustaría saber si hay alguna forma de que esto no pase, algo así como poner unos margenes al Rect... la verdad no tengo mucha idea de Draws... pero con paciencia conseguí unas tab como las de la barra de tareas de windows con sus iconitos y todo... muesto codigo para ver que me decis:

Código Delphi [-]
procedure TfPrincipal.TabsDrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  TempI,TempIX:integer;
  IconT:TIcon;
  TempS:string;
begin
  //En el draw evitamos que se vea el fCID
    if TabIndex > -1 then begin
      //busccamos el mdi child correspondiente a la tab y sacamos los datos
        TempI := 0;
        IconT := nil;
        TempIX := strtoint(copy(tabs.tabs[TabIndex],pos('$$',tabs.tabs[TabIndex])+2,10));
        while TempI < Self.MDIChildCount do begin
          if TfChildBase(Self.MDIChildren[TempI]).fCID = TempIX  then begin
             IconT := Self.MDIChildren[TempI].Icon;
             TempS := Self.MDIChildren[TempI].Caption;
             TempI := Self.MDIChildCount;
          end;
          TempI := TempI+1;
        end;
      //Pintamos
        tabs.Canvas.FillRect(Rect);
        tabs.Canvas.Draw(Rect.Left+2,Rect.Top,IconT);
        tabs.Canvas.TextOut(Rect.Left+22,Rect.Top+2,TempS);
    end;
end;

Un saludo y muchas gracias.

dec 21-03-2008 17:57:58

Hola,

No estoy seguro, pero, tal vez podrías darle a la pestaña el ancho del texto en cuestión. Podrías usar el método "TextWidth" de "TCanvas"... :rolleyes:

lag_0 21-03-2008 18:57:48

Si, si no indico tamaño las pestañas se ponen en el tamño del texo más largo pero... lo que quiero es que las pestañas tengan el tamaño que yo especifico y el texto se vea solo dentro de esta, entonces al llegar al final poner unos puntos suspendidos "Titulo de la pe...", o bien cortar en seco, pero que solo se vea el principio pues como digo es como una barra de inicio de windows para ventanas MDI.

Muchas gracias


La franja horaria es GMT +2. Ahora son las 09:46:47.

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