Pisania na Canvasie

0

Mam problem z różnymi czcionkami - nie wiem jak pisać żeby tekst był w jednej linii, kolejne fonty skaczą mi to do góry, to w dół. Np jak napisać taki tekst:

Coś tam <font size="4">Coś tam</span>

with Canvas do
begin
     Font.Name:='Arial';
     Font.Size:=10;
     TextOut(x,y,'Coś tam');
     
     Font.Name:='Times New Roman';
     Font.Size:=20;
     jak obliczyć y ???
end;
0

Nie wiem o co Ci dokładnie chodzi, ale szerokość i wysokość tekstu możesz sprawdzić tymi funkcjami:

TextHeight('Teskt');
TextWidth('Tekst');

0

To wiem, tylko nie wiem jak znaleźć jakąś linię bazową??? Próbowałem różnie i nic...
TextWidth świetnie się sprawdza dla ustalenia współrzędnej x kolejnych fontów ale wyrównać tego w pionie nie mogę

0

o to chodziło?

var wys1,wys2, roznica, y:integer;
begin
with Canvas do
begin
y := 25;
     Font.name:='Arial';
     Font.Size:=10;
     wys1:=textHeight('Coś tam');
     TextOut(10,y,'Coś tam');

     Font.name:='Times New Roman';
     Font.Size:=30;
     wys2:=textHeight('Coś tam');
     roznica := y - Floor((wys2 - wys1)/2);
     TextOut(80,roznica,'Coś tam');
end;

ps. zadeklaruj sobie w sekcji uses math

0

Nie o to mi chodzi. To co napisałeć wyśrodkowuje fonty w pionie (mniej więcej) ale cała zabawa zaczyna się wtedy gdy chcemy aby wszystkie fonty dotykały dolnymi krawędziami jednej linii...

0

to jeszcze łatwiej! pomyśl...

var wys1,wys2, roznica, y:integer;
begin
with Canvas do
begin
y := 25;
     Font.name:='Arial';
     Font.Size:=50;
     wys1:=textHeight('Coś tam');
     TextOut(10,y,'Coś tam');

     Font.name:='Times New Roman';
     Font.Size:=25;
     wys2:=textHeight('Coś tam');
     roznica := y+(wys1 - wys2) - 5; // 5 to granica bledu
     TextOut(300,roznica,'Coś tam');
end;
0

Nic z tego, gdyby to było takie oczywiste to nie zawracał bym głowy. W Twoim przykładzie daleś duży Size fontów ale weź chociażby najpierw 16 a później 10...
I nie wiem co do za poprawka te 5 i tak nie wiadomo w którą stronę zaokrąglać

0

Zobacz poniższy przykład i może zrozumiesz o co tutaj chodzi! Teoretycznie wszystko się zgadza, ale zostaje jeszcze ten odstęp, więc stąd ta "moja granica"... Jeżeli rozumiesz, to zrobienie tego idealnie jest wręcz niemożliwe, bądź bardzo kłopotliwe, bo musiałbyś znać ten dolny odstęp przy każdej czcionce.
Chociaż istnieje łatwiejszy sposób, ale też kłopotliwy, bo musiałbyś napisać to na bitmapie i dochodzić Y sprawdzaniem pikseli po kolorze...
Nie wiem do czego Ci to jest potrzebne i nie wiem po co Ci taka precyzja...

var wys1,wys2, roznica, y:integer;
begin
with Canvas do
begin
brush.color:=clwhite;
Rectangle(Rect(0,0,width,height));
brush.color:=clgreen;
y := 25;
     Font.name:='Arial';
     Font.Size:=46;
     wys1:=textHeight('AaBbYy');
     TextOut(10,y,'AaBbYy');
      brush.color:=clblue;
     Font.name:='Times New Roman';
     Font.Size:=10;
     wys2:=textHeight('AaBbYy');
     roznica := y+(wys1 - wys2);
     TextOut(50,roznica,'AaBbYy');
end;
0

Hej, trochę chyba przesadziłeś a tymi uwagami typu "jeżeli umiesz myśleć..."

Jeżeli, ktoś wie jak to zrobić, to bardzo proszę o pomoc

0

czcionka 20 jest logicznie 2 x większa niż 10. takwięc 16 jest 16/10 razy większa od 10 itd. Ale tyczy się to tylko tych samych czcionek.
Gdyby ci co robią czcionki bardziej się przykładali do pracy i dziesiątka Arialem równa by była dziesiątce np Times'em to było by to bzrdzo proste. [???]

0

Jak by to się komuś przydało - pomysł zaproponowany przez szczotexa ze zliczaniem pikseli na bitmapie jest dosyć prosty i zdaje egzamin
Dzięki !!!

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