pixel i dlugość

0

Postanowilem zmierzyć się z playerem do filmu i pojawił się problem.
Otóż chciałem dodać wyświetlanie napisów a tu okazało się że długość napisu która można uzyskać z canvas nie zgadza się z długością panelu na którym jest wyswietlany tekst. Chodzi oto że jak napis jest narysowany tak aby był tak długi jak panel to długość w pixelach jest inna niż długość panelu.
Chce aby napisy byly wyswietlane na środku panelu a nie z boku. Zauważyłem że aby poprawić wynik wystarczy pomnożyć przez 4/3 no ale wraz jest cos nie tak. Wczym jest błąd?

0

Jeśli to BCB (a ponieważ napisałeś o Canvas, to raczej tak), to na Panelu umieść komponent TImage, ustaw jego Align = alClient;

String text = "Ala ma zielonego kota";
int width = Image1->Canvas->TextWidth(text);
int X = (Image1->Width/2)-(width/2);
Image1->Canvas->TextOutA(X,10,text);

PS> Wybitnie prawdopodobne, że czegoś nie zrozumiałem, bo twój post był delikatnie mówiąc mętny...

0

Faktycznie że mało zrozumiany ale pisałem go na kolanie :) Oto troszke więcej. Wklaejam całą procedurkę.

void TForm1::piszTekst(AnsiString tekst,int x, int y)
{
static HFONT hFont;
HDC hdc;
// PAINTSTRUCT ps;
// RECT rc;
hdc=GetDC(mp->Handle);

// hFont=CreateFont(14,0,0,0,0,0,0,0,0,0,0,0,0,"Courier");
// HGDIOBJ Fonty = SelectObject(hdc, hFont);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(255,255,255));
TextOut(hdc,x,y,tekst.c_str(),tekst.Length());

// DeleteObject(hFont);
// DeleteObject(Fonty);
ReleaseDC(mp->Handle,hdc);

}

zaś wywołąnie tej procedurki to:
AnsiString tekst="ala ma kota i psa";
rozmTekstu=Canvas->TextExtent(tekst);
piszTekst(tekst,mp->Width/2-(rozmTekstu.cx),mp->Height-rozmTekstu.cy-50);

rozmTekstu to typ TSize.

moim zdaniem powinno dobrze wyświetlać a tu niestety. Może dadam jeszcze tyle że mp to nie Panel a kontrolka MediaPlayera (ocx).

Chyba teraz wszystko jasne.

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