Neden bir buton rengini kod içinden okumak isteyesiniz
TROIA Client'ta kullanıcılar arayüz temasını (Blue Flat, CherryFlat, Flat Yellow gibi hazır temalardan biri, ya da SYST13'te tanımlanmış özel bir tema) kendileri seçebiliyor. Bu esneklik, statik olarak sabitlenmiş bir rengi kodda hardcode etmenin neden kötü bir fikir olduğunu da açıklıyor: kullanıcı temayı değiştirdiğinde, sabit renk kodunuz yeni temayla uyumsuz kalabilir (örneğin koyu bir tema üzerinde okunmaz hale gelen açık renkli bir metin). Bunun çözümü tema değişkenlerini dinamik olarak okumak.
Statik ve standart değişken ayrımı
Tema değişkenleri iki gruba ayrılıyor:
- Statik tema değişkenleri: Temalar arası değişmeyen değerler — çoğunlukla veri satırı renklendirmesi için (
BACKCOLOR1...BACKCOLOR22,BACKCOLORERROR,BACKCOLOROK,BACKCOLORWARNINGgibi). Özel bir temada tanımlanmasalar bile otomatik olarak dahil edilirler. - Standart tema değişkenleri: Temadan temaya değişen ve geçerli bir tema için zorunlu olan değerler (buton, tablo, toolbar, header, groupbox gibi kontrol kategorilerine göre onlarca değişken:
BBACKCOLOR,TFONT,TOOLBARBCK,HEADERBCK...). Belgelerde altı çizilen önemli bir kural var: bir temada zorunlu standart değişkenlerden biri eksikse, o tema geçersiz sayılır.
Değişkeni kod içinden okumak: GETTHEMEVARIABLE
LOCAL:
STRING RENK;
STRING DEGISKENADI;
RENK = GETTHEMEVARIABLE('HEADERBCK');
DEGISKENADI = 'HEADERBCK';
RENK = GETTHEMEVARIABLE(DEGISKENADI);
SETSTYLE BACKCOLOR RENK TO BUTTON1;
GETTHEMEVARIABLE(), tek parametre olarak bir tema değişkeni adı alır ve o anki aktif temada bu değişkene karşılık gelen değeri döner. İkinci örnekte gördüğünüz gibi, değişken adı da bir string değişkende tutulup dinamik olarak sorgulanabilir — bu, örneğin bir durum koduna göre farklı bir "backcolor" değişkeni seçmek istediğinizde işe yarar.
Gerçek bir örnek: duruma göre satır rengi seçmek
/* Bir onay durumuna göre uygun tema rengini seçip tabloya uygular. */
PARAMETERS:
STRING DURUM;
LOCAL:
STRING RENK;
IF DURUM = 'ONAYLANDI' THEN
RENK = GETTHEMEVARIABLE('BACKCOLOROK');
ELSE
IF DURUM = 'REDDEDILDI' THEN
RENK = GETTHEMEVARIABLE('BACKCOLORERROR');
ELSE
RENK = GETTHEMEVARIABLE('BACKCOLORWARNING');
ENDIF;
ENDIF;
SETSTYLE BACKCOLOR RENK TO TABLE1;
Bu, BACKCOLOROK/BACKCOLORERROR/BACKCOLORWARNING gibi statik değişkenleri kullandığı için, kullanıcı hangi temayı seçerse seçsin "onaylandı" satırının hep tutarlı bir şekilde "olumlu" bir renk taşımasını garanti eder — sabit bir RGB değeri yazmış olsaydınız bu tutarlılık temaya bağlı olarak bozulabilirdi.
Sık yapılan hatalar
- Var olmayan ya da yanlış yazılmış bir değişken adı vermek —
GETTHEMEVARIABLEfonksiyonu, belgelenmemiş bir isim için tutarlı bir hata fırlatmayabilir; sonuç genelde beklenmedik/boş bir değer olur. Yeni bir tema değişkeni kullanmadan önce SYST13'teki tema tanımında ya da SYST99 üzerinden değişkenin gerçekten var olduğunu doğrulamak zaman kazandırır. - Font-cross ile karıştırmak —
GETTHEMEVARIABLErenk/stil değişkenleri içindir; yazı tipi eşlemeleri (bir fontun PDF üretiminde başka bir fontla değiştirilmesi gibi)SYSFONTREF/SYSUSERFONTREFtabloları üzerinden ayrı bir mekanizmayla yönetilir — ikisini aynı yerde çözmeye çalışmak karışıklığa yol açar. - Değeri her seferinde yeniden okumak — bir dialog'un
OnShowgibi bir olayında tek seferlik okunması yeterliyken, değeri döngü içinde tekrar tekrarGETTHEMEVARIABLEile sorgulamak gereksiz sunucu çağrısı yaratır; bir kez okuyupMEMBER/LOCALbir değişkende saklamak daha performanslıdır.
Sıradaki adım
Tema değişkenlerinin SETSTYLE ile birlikte kullanımını gördük; dialog yaşam döngüsü (OnShow, Before, After olayları) konusunu bir sonraki yazıda ele alacağım — tema ayarlarının genelde tam olarak bu olaylardan birinde uygulandığını göreceksiniz.
Yorumlar (0)
Yorum Yaz