Cumartesi, Şubat 13, 2010

Allegro ile Ekrana Yazı Yazdırma

Uzun metinsel ifadeleri ekrana yazdırmada textout_ex() fonksiyonu kullanılır.
void textout_ex(BITMAP *bmp, const FONT *f, const char *s, int x, int y, int color, int bg);

Parametreleri

BITMAP *bmp = Yazının yazılacağı yer
const FONT *f = Font tipi
const char *s = Ekrana basmak istediğimiz metin
int x, int y = Yazının ekranda görünmesini istediğimiz koordinatlar
int color = Yazı rengi
int bg = Arka plan rengi. Eğer -1 değeri verilirse arka plan transparan olur


İki Yana Yaslı Yazma

İki yana yaslı yazı yazdırmak için textout_justify_ex() fonksiyonu kullanılır.
void textout_justify_ex(BITMAP *bmp, const FONT *f, const char *s, int x1, int x2, int y, int diff, int color, int bg);

Parametreleri

int x2 = Yazının x ekseninde ne kadar genişlikte olacağı
int diff = Yazının toplam genişliği ile "x2" değeri arasındaki fark "diff" ile belirtilen değerden küçük ise yaslama işlemi yapılır.


Sayısal İfadeleri Yazdırma

Yukarıda verdiğim fonksiyonlar ile metinsel ifadeleri ekrana yazdırırız. Duruma göre değişiklik gösteren sayısal ifadeleri yazdırmak içinse textprintf_ex() fonksiyonu kullanılır. Kullanımı C'deki printf() fonksiyonuna benziyor.

void textprintf_ex(BITMAP *bmp, const FONT *f, int x, int y, int color, int bg, const char *fmt, ...);

Parametreleri

const char *fmt = Yazı formatı. C'deki printf() fonksiyonunun kullanımına bakmanızı tavsiye ederim.


2 Adet Faydalı Fonksiyon: text_length() ve text_height()

text_length() ile parametre olarak girilen dizge nin uzunluğunu text_height() ile de kullanılan fontun yüksekliğini pixel cinsiden buluruz.

int text_length(const FONT *f, const char *str);
int text_height(const FONT *f)


Örnek:

#include <iostream>
#include <allegro.h>

int main()
{
allegro_init();
install_keyboard();
set_gfx_mode(GFX_AUTODETECT,640,480,0,0);

char *isim="Esat";
int uzunluk=text_length(font,isim);

//"font" değişkeni allegro.h ile extern ediliyor.
//Bizim ayrı yeten oluşturmamıza gerek yok.
textout_ex(screen, font, "Merhaba Dünya", 10, 10,
makecol(0, 0, 255), -1);
textprintf_ex(screen,font,10,25,makecol(255,0,0),makecol(0,0,255),
"İsim: %s -- Uzunluk: %d",isim,uzunluk);

int yukseklik = 50;
char *metin[] = {"Şimdide textout_justify_ex()",
"fonksiyonunun nasıl çalıştığını",
"anlamak için bir örnek",
"program yazalım",'\0'};

//Hizalandığını göermek için bir dik çizgi çizelim
vline(screen, 275, 0, SCREEN_H-1, makecol(200,200,0));
for (int i=0;metin[i];i++)
{
textout_justify_ex(screen,font,metin[i],10,275,yukseklik,80,
makecol(255,0,0),makecol(0,255,0));
yukseklik +=text_height(font);
}

readkey();
return 0;
}
END_OF_MAIN();

Hiç yorum yok: