[BCB6] wczytywanie tekstu do Label

0

Mam taki zamiar:
W komponencie ScrollBox chcę umieścić kilka tekstów Label (albo innych - o tym niżej), które będą miały różną objętość tekstu. ScrollBox jest tutaj w zasadzie wymagany, gdyż może się zdarzyć, że suma linijek tekstu przekroczy wysokość ramki i ScrollBox doda sobie pasek przewijania. Niestety nie wiem jak obliczyć ile linijek zajmie wczytany tekst do Label oraz jak umieścić pod nim następny Label w odstępie np. 14 pikseli. Trzeba to zrobić dynamicznie, funkcją w programie.
To wcale nie musi być Label. Ale Memo też nie jest dobre bo nie da się wyłączyć kursora tekstowego (włącza się po kliknięciu myszą). Jest jeszcze StaticText ale on znowu nie zawija wierszy (trzeba by ręcznie dzielić, może i do przeskoczenia).
Ma ktoś pomysł?

0

To jest sprawa kosmetyki - układania tekstu na ekranie, a nie problem programistyczny.

coś takiego:

label = new TLabel(forma);
///label->SetParent(...)

TSize c = label->Canvas->GetTextExtent(txt);

label->Width = w; // szerokosc
int linii = w/(c.cy+c.cy/4);
label->Height = linii*c.cy;

0

Może i kosmetyka ale to programista musi ją wykonać ;)
Dziękuję za wskazówki.
Jednak okazuje się, że TLabel sam dobierze wysokość, wystarczy tylko włączyć WordWrap i potem ustawić szerokość Tlabel:

    int szer=353, wys, gora=19, lewy=56;

    TLabel* label;
    label = new TLabel(this);
    label->Parent = ScrollBox1;
    label->WordWrap = true;
    label->ParentFont = true;
    label->Left = lewy;
    label->Top = gora + Label7->Height;

    label->Width = szer;
//    TSize c = label->Canvas->TextExtent(Label7->Caption);
//    int linii = Ceil(static_cast<Extended>(c.cx)/w);
//    label->Height = linii*c.cy;
    label->Caption = Label7->Caption;

Label7 to statyczny poprzedni TLabel aby było mi wygodniej testować.

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