Canvas i text oto jest pytanie ???

0

Witam

Mam wielką nadzieję że ktoś z was będzie wstanie mi pomóc ...
Chce na kanwasie wypisać tekst o określonej czcionce to nie problem ale problem gdy bardzo chce się sprecyzować width tego tekstu zanim trafi na kanwas wziąć width i height to żaden problem ale ustalić ze dany napis ma mieć width nie np 200 ale 100 i taki wydrukować... jak to osiągnąć?

Inaczej... potrzebuje zagęścić czcionkę np Arial 8 to np 200px przy powiedzmy 10 znakach a ja bym bardzo chciał ustawić ze wydrukuje się z width = powiedzmy 150 .

Pozdrawiam [cya] Net Dx

0

proste :

  1. Rysujesz tekst w buforze (powiedzmy tekst : TBitmap, który ma <font color="violet">100x200 </span>pix, - wymiary uzależnione od tekstu)
  2. Rysujesz bufor na obrazku : obrazek.canvas.StrechDraw(rect(0,0,<font color="violet">100,100</span>), tekst);
  3. Gotowe.
0

Witam Dzięki Dzięki
Ale to to ja wiem tyle tylko czy wiesz ile pójdzie na drukarkę jeżeli przy stronie A4 zastosuje bitmapę buforującą pełną tekstu ?? a poza tym przy wydrukach robionych w ten sposób musisz rozciągać bitmapę do rozmiarów drukarkowych a to jak zapewne wiesz może bardzo zniekształcić obraz i spada jakość wydruku.

Pozrawiam
Net Dx [cygaro]

0

Może rysuj literkę po literce w jakimś odstępie, np. 1 px? Jak będzie za duża odległość, to zawsze możesz zmniejszyć do 0 px, albo -1 px żeby na siebie nachodziły, itd.

0

Takie coś nazywa się kerning. Funkcja SetTextCharacterExtra ustwia odległość (pomiędzy wszystkimi). Jeszcze można pomiędzy dwoma dowolnymi znakami, ale jeszcze nie doszedłem jak...

0

Tak tą też sprawdzałem i jest bardzo dobra ale niestety jak daje (-1) to tak mi zagęszcza literki ze wszystko staje mi się nie czytelne a co za tym idzie do bani ... mi chodzi o to , tak jak to biorą z canvasa textwidth(str):integer tylko w druga stronę z poziomu api to jest funkcja GetTextExtentPoint32 ale przeciwstawnej do niej która by setowała te parametry nie znalazłem może ktoś cos wie o NEWTEXTMETRIC cos tam widziałem ale nie wiem jak to ustawić.

Pozdrawiam
Net Dx [cygaro]

0

Może coś takiego:

  1. Ustaw odstępy na normalne
  2. Sprawdź jaka jest szerokość tekstu
    a) jeśli mniejsza lub równa od zadanej to idź do 5
    b) jeśli nie, idź do 3
  3. Zmniejsz odstęp o 1
  4. Idź do 2
  5. Rysuj tekst
0

Dobry Pomysł .... tyle tylko że skoki na Canvas.Font.size sa duze tzn jeżeli dany tekst przy size=8 ma np 100 px to przy 9 width ma juz znacznie wiekszy co uniemozliwia stosowanie tego algotymu ... wiadomo dlaczego...
przykład : - rzeczywiste wyniki jakie dostaje (Arial)
string:="aaaaa";
font.size:=12 canvas.textwidth 45,
font.size:=13 canvas.textwidth 45,
font.size:=14 canvas.textwidth 50,

Pozdrawiam
Net Dx [cygaro]

0

Nie wiem tylko, czemu ty ustawiasz wielkość czcionki, a nie odstępy między znakami...

0

No tak Odstępy odstępami, tyle tylko że przy czcionce Arial 7 z odstępami na -1 ( twoja w/w metoda ) tekst staje sie ładnie mówiac .. nieczytelny na ekranie... a np w danym miejscu wydruku nie można zastosować większej bo nie będzie to w zgodzie z orginałem za to mogą być węższe czcionki.

Po drugie jeżeli mam string "aaaaa" i czcionke 14 Arial a width jest 50 to jak ustawić aby tekst mial width 41 i byl nadal czytelny??

Net Dx [cygaro]

0

A bawiles sie z PixelsPerInch? to jest stała która określa jak punkty są przeliczane na pixele. wszystko sie to dzieje w odniesieniu do cala logicznego. Jak dobrze pamietam to w jednym calu mieści się 62 punkty. Zatem przeliczasz rozmiar czcionki na cale logiczne i potem korzystasz z wlasciwosci PixelsPerInch dla formy aby policzyc ile to zajmie na ekranie. a w druga strone masz dwie mozliwosci, albo zmieniac rozmiar czcionki (liczba punktow na cal) albo zmienic PixelsPerInch dla czcionki a to powinno zmienic proporcjonalnie "dlugość" całego tekstu.

Powodzenia [browar]

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