Caption w kilku liniach w PageControl

0

Witam wszystkich forumowiczów.
Mam problem z wyświetleniem tekstu zakładek TTabSheet w TPageControl w kilku liniach (UWAGA!!! Nie chcę wyświetalać klika rzędów zakładek - mie interesuje mnie MultiLine)

Próbowałem następujący kod
PageControl1.Pages[0].Caption:='Pierwsza linia'+#13#10+'druga linia';

ale nic nie pomogło
Wyświetla się tekst 'Pierwsza linia || druga linia'

Co robić [???]

Dzięki wszystkim za pomoc

0

Ok. Pokusiłem się żeby coś napisać. Nie wiem czy jest to najlepsze i najbardziej optymalne rozwiązanie ale jakoś to działa. W PageControl ustawiasz OwnerDraw na True, następnie tworzysz sobie taką procedurkę:

procedure TForm1.RefreshTabSize;
var
 TabI, CapI: Integer;
 S: TStringList;
begin

 PageControl.TabHeight := 10;// poczatkowe rozmiary Tabó'w - koniecznie male
 PageControl.TabWidth  := 10;

 S := TStringList.Create;

 try

 for TabI := 0 to PageCOntrol.PageCount -1 do
     begin
     S.Text := PageControl.Pages[TabI].Caption;
     for CapI := 0 to S.Count -1 do
         if PageControl.TabWidth < Canvas.TextWidth(S[CapI]) then
            PageControl.TabWidth := Canvas.TextWidth(S[CapI]) + 10;

     if PageControl.TabHeight < S.Count * 15 + 5 then
        PageControl.TabHeight := S.Count * 15 + 5;
     end;

 finally
  S.Free;
 end;

end;

A zdarzenie OnDrawTab powinno wyglądać tak:

procedure TForm1.PageControlDrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
 S: TStringList;
 I: Integer;
begin

 S := TStringList.Create;

 try
  PageControl.Canvas.FillRect(Rect);
  ExtractStrings([#13], [], PChar(PageControl.Pages[TabIndex].Caption), S);
  for I := 0 to S.Count -1 do
      PageControl.Canvas.TextOut(Rect.Left +3+Integer(Active)*2, Rect.Top +4 + 15*I, S[I]);

 finally
  S.Free;
 end;

end;

Teraz po każdej zmianie etykiety jakiegos Tab'a wywołujesz RefreshTabSize np.:

begin

  PageControl.Pages[0].Caption := 'linijka nr1' #13 'to linijka nr2';
  RefreshTabSize;
 {...}

Wszystkie współrzędne dobrane zostały eksperymentalnie, także różnie to może z nimi być :-P
Mam nadzieję, że będzie działać ;-)

0

Masz rację MatroX, optymalne to to może i nie jest, ale rzeczywiście działa. Na początku nic nie pomogło, ale tak to jest jak się przelatuje tekst pisany bardzo szybko, po to żeby zobaczyć tylko kod. Tak to udało mi się najpierw pominąć wzmiankę o OwnerDraw:=True

Teraz sam spróbuję sobie to zoptymalizować, ale i tak już jest OK.
Wielkie dzięki
:-D

1 użytkowników online, w tym zalogowanych: 0, gości: 1