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?
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...
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.