Alaska Xbase++

Alaska Xbase++
Programiranje u Xbase++

12. 07. 2014.

1.8 Alaska Xbase++ Fontovi i CodePage 238


CodePage



The following table shows the correlation of Charset name, Charset Value and Codepage number:

Charset Name       Charset Value(hex)  Codepage number
------------------------------------------------------

DEFAULT_CHARSET           1 (x01)
SYMBOL_CHARSET            2 (x02)
OEM_CHARSET             255 (xFF)
ANSI_CHARSET              0 (x00)            1252

RUSSIAN_CHARSET         204 (xCC)            1251  Rusian,Serbian,Bulgarian
                                                   Cyrillic fonts

EE_CHARSET              238 (xEE)            1250  Eastern Europe
                                                   Serbian Latin
GREEK_CHARSET           161 (xA1)            1253
TURKISH_CHARSET         162 (xA2)            1254
BALTIC_CHARSET          186 (xBA)            1257
HEBREW_CHARSET          177 (xB1)            1255
ARABIC _CHARSET         178 (xB2)            1256
SHIFTJIS_CHARSET        128 (x80)             932
HANGEUL_CHARSET         129 (x81)             949
GB2313_CHARSET          134 (x86)             936
CHINESEBIG5_CHARSET     136 (x88)             950










gde je oFont font objekat kreiran kao Xbase part:

  
   oFont := XbpFont():new()              // Create XbpFont object
   oFont:familyName := "Times New Roman" // Describe font
   oFont:height     := 16
   oFont:width      :=  8
   oFont:codePage   :=  238              // Serbian latin
   oFont:create()                        // Create font
   GraSetFont ( , oFont )                // Select font
   GraStringAt( , {10,300}, "Font ŠĐČĆŽ")// Output characters



Font se najčešće ne kreira na ovaj način već kao font koji pripada aplikacionom prozoru u kome će sva slova biti u tom fontu, pa se u tom postupku zadaje i kodna strana, na sledeći način:


 * glavni Prozor aplikacije:

   oDlg               := XbpDialog():new( , , aPos, aSize,, .F. )
   oDlg:title         := "Main menu"
   oDlg:taskList      := .T.
   oDlg:SysMenu       := .F.
   oDlg:create()

 * Font:

 * oDlg:drawingArea:setFontCompoundName( "10.Arial" )  // ili
 * oDlg:setFontCompoundName( "10.Arial" )              // postavi font

   oDlg:setFontCompoundName( "10.Arial" ) // prvo se postavi font       

   oFont := oDlg:setfont()      // dobije se font objekat sa codepage = 0
   oFont:codepage := 238        // promeni se codepage u novu = 238
   oFont:configure()            // aktivira se novi font objekat

   oDlg:show()
   SetAppFocus( oDlg )




Kod Xbase++ font koji se na ovaj način postavi za oDlg aplikacioni prozor biće od strane Xbase++ korišćen na celoj površini aplikacionog prozora (drawingarea) i na svim objektima koji su Parent sa aplikacionim prozorom (oDlg). Jedino kod upotrebe tog fonta u XbpStatic okvirima (groupbox i ostalim) font neće imati postavljenu codePage, što znači da neće biti prikazana i štampana Serbian latin slova: ŠĐČĆŽ šđčćž. U ovim slučajevima treba posebno postaviti isti font samo za takve objekte, na sledeći način:


             oTxt := XbpStatic():new( oDlg, , {5,40}, {200,20} )
      oTxt:type := XBPSTATIC_TYPE_TEXT
      oTxt:Caption := "Serbian ŠĐČĆŽ šđčćž"
      oTxt:create()

      oTxt:setFont(oDlg:setfont())  // preuzmi za oTxt font postavljen za oDlg
      oTxt:setFont():configure()    // konfiguriši preuzeti font za oTxt

      ili korak po korak i jasnije:
      oFont := oDlg:SetFont()
      oText:setFont(oFont)
      oFont:configure() 
     

Ista tehnika promene kodne strane može se koristiti i kod eXpress++


#include "dcdialog.ch"

FUNCTION test_codepage_upotreba_express()
LOCAL  GetList := {},  GetOptions, oDlg
//------------------- 1 -------------------
PRIVATE oButton, oFont, cFont

@ 1,1  DCPUSHBUTTON CAPTION {|| "Test ŠĐČĆŽ šđčćž" } OBJECT oButton ;
       SIZE 20,2           ;
       ACTION {|| font(getlist),; // Promena kodne strane
                  DC_GetRefresh(getlist) } ;
       FONT "10.Arial"
//------------------- 2 -------------------
PRIVATE oFont1, oButton1

   oFont1 := XbpFont():new()              // Create XbpFont object
   oFont1:familyName := "Times New Roman" // Describe font
   oFont1:height     := 16
   oFont1:width      :=  8
   oFont1:codePage   :=  238              // Serbian latin
   oFont1:create()                        // Create font

@ 3,1  DCPUSHBUTTON CAPTION {|| "Test ŠĐČĆŽ šđčćž" } OBJECT oButton1 ;
       SIZE 20,2 ;
       ACTION {|| msgbox(DC_FontCompoundName( oFont1 )),;
                  DC_GetRefresh(getlist) } ;
       FONT DC_FontCompoundName( oFont1 )
//-----------------------------------------
 DCGETOPTIONS NOMINBUTTON NOMAXBUTTON
 DCREAD GUI ;
   TITLE "Test codePage";
   FIT                  ;
   OPTIONS GetOptions   ;
   SETFOCUS @oButton    ;
   PARENT @oDlg         ;
   MODAL                ;     // zbog modalnog sledeceg prozora
   EVAL {|o| SetAppWindow(o)} // zbog modalnog sledeceg prozora
RETURN NIL

FUNCTION font(GetList)

       // postojeće stanje:

       oFont := oButton:SetFont()
       cFont := oButton:setFontcompoundname() // naziv fonta
       cCodePage := oFont:codePage

       msgbox(cFont+" "+var2char(cCodePage),"Postojeće stanje")

       // novo stanje

       oButton:setFontcompoundname("10.Cambria")
       oFont := oButton:SetFont()
       oFont:codePage := 238
       oFont:configure()
       oButton:setFont(oFont)

       oFont := oButton:SetFont()
       cFont := oButton:setFontcompoundname() // naziv fonta
       cCodePage := oFont:codePage

       msgbox(cFont+" "+var2char(cCodePage),"Novo stanje")


RETURN NIL



Primer Programa u eXpress++ u kome se u različitim xbase objektima (XBPStatic, XBPPushbutton) koriste različiti Serbian latin fontovi sa codepage 238


/*
* FONT-AND-EXPRESS.PRG
* (04-08-2014)
* © COBA Systems Software
* BAST® Open Source Project
* Business Account Software Technology
* www.cobasystems.com
*/

#include "appevent.ch"
#INCLUDE "xbp.ch"
#include "common.ch"
#INCLUDE "font.ch"
#INCLUDE "gra.ch"
#INCLUDE "dcdialog.ch"

PROCEDURE APPSYS()
RETURN

FUNCTION MAIN()
LOCAL GetList := {} ,getoptions ,oDlg, MAG1_ := SPACE(12)
LOCAL aCUR := {"USER32.DLL",114}
SET DATE FORMAT TO "dd.mm.yyyy"   // formatiraj ispis datuma
SET CHARSET TO ANSI
SET DATE GERMAN
SET CENTURY ON

   @ 0.6,0 DCSTATIC TYPE XBPSTATIC_TYPE_GROUPBOX OBJECT oo SIZE 53,11 ;
         CAPTION {|| "SERBIAN LATIN ŠĐČĆŽ šđčćž" }  COLOR GRA_CLR_DARKRED ;
         FONT font238(16,"Cambria Bold") // prihvata samo font objekat //*** FONT
         ************************************************************************
   @ 3,1  DCSAY 'Objekat čiji je dnevni pazar..............................'
   @ 3,35 DCGET MAG1_

   @ 4,1  DCSAY 'Broj specifikacije dnevnog pazara.........................'
   @ 4,35 DCGET MAG1_

   @ 5,1  DCSAY 'Datum specifikacije dnevnog pazara.........................'
   @ 5,35 DCGET MAG1_

   @ 7,1  DCSAY 'Objekat čiji je interni račun.............................'
   @ 7,35 DCGET  MAG1_

   @ 8,1  DCSAY 'Broj internog računa ŠĐČĆŽ.................................'
   @ 8,35 DCGET MAG1_

   @ 9,1  DCSAY 'Datum internog računa šđčćž................................'
   @ 9,35 DCGET MAG1_
 //------------------------ TOOLBAR -----------------------------------------------
   @ 12,0 DCTOOLBAR oToolBar SIZE 53,1.4 ;
          BUTTONSIZE 53/5,1.4 // FONT font238(8,"Arial Bold")

   DCADDBUTTON CAPTION "Napravi ŠĐČĆŽ šđčćž"  ACCELKEY xbeK_F2 ;
   TOOLTIP "" ;
   CURSOR aCUR PARENT oToolBar SIZE 53/5*3;
   ACTION {||pomoc() } ;
   FONT font_238(12,"Cambria") // prihvata samo string FontCompoundName  //*** FONT
   ********************************************************************************

   DCADDBUTTON CAPTION "Help čć"  ACCELKEY xbeK_F1 ;
   TOOLTIP "" ;
   CURSOR aCUR PARENT oToolBar ;
   ACTION {||pomoc() } ;
   FONT font_238(12,"Impact")

   DCADDBUTTON CAPTION "Exit" ACCELKEY xbeK_ESC ;
   TOOLTIP "" ;
   CURSOR aCUR PARENT oToolBar ;
   ACTION {|| DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
   FONT font_238(12,"Impact")

  DCGETOPTIONS ;
      NOESCAPEKEY;
      SAYWIDTH 240 ;
      NOMAXBUTTON NOMINBUTTON ;
      BORDER XBPDLG_RECESSEDBORDERTHICK_FIXED ; // EDITPROTECT bEdit_Kljuc ;
      GETFONT "10.Courier Bold";
  COLORGETS { { GRA_CLR_DARKRED, GRA_CLR_WHITE },{ GRA_CLR_DARKRED, GRA_CLR_PALEGRAY } };
      SAYFONT font238(10,"Cambria Bold") // prihvata samo objekat //*** FONT
      ************************************************************************
  DCREAD GUI FIT;
      TITLE "SERBIAN LATIN FONTS :: ŠĐČĆŽ šđčćž" ;
      OPTIONS GetOptions PARENT @oDlgx EVAL {|o|SetAppWindow(o) } MODAL
CLEAR TYPEAHEAD
RETURN .T.
******************************
FUNCTION font238(fv,fn)
******************************
* DCSTATIC TYPE XBPSTATIC_TYPE_GROUPBOX CAPTION "ŠĐČĆŽšđčćž" ;
*                              FONT font238(16,"Cambria Bold")
LOCAL oFont
   oFont := XbpFont():new()        // Create XbpFont object
   oFont:nominalPointSize := fv    // 13             // veličina
   oFont:familyName       := fn    // "Verdana Bold" // Describe font
   oFont:codePage         :=  238  // Serbian latin
   oFont:create()                  // Create font
*  oFont:configure()               // Configure font - samo ako već postoji font
RETURN oFont                       // vraća XbpFont object

******************************
FUNCTION font_238(fv,fn)
******************************
* DCADDBUTTON CAPTION "ŠĐČĆŽšđčćž" FONT font_238(12,"Cambria")
LOCAL oFont
   oFont := XbpFont():new()         // Create XbpFont object
   oFont:nominalPointSize := fv     // 13             // veličina
   oFont:familyName       := fn     // "Verdana Bold" // Describe font
*  oFont:compoundName     := fn     // "Verdana Bold" // Describe font
   oFont:codePage         :=  238   // Serbian latin
   oFont:create()                   // Create font
*  oFont:configure()                // Configure font - samo ako već postoji font
*  msgbox(var2char(oFont:nominalPointSize)+"."+var2char(oFont:compoundName))
RETURN (var2char(oFont:nominalPointSize)+"."+var2char(oFont:compoundName))
// vraća string za font compound name

******************************
FUNCTION font__238(oo)
******************************
* DCSTATIC TYPE XBPSTATIC_TYPE_GROUPBOX OBJECT oo // postavlja font objekta oo
* DCREAD GUI EVAL {|o|SetAppWindow(o),font__238(oo) }
LOCAL oFont
   oFont := XbpFont():new()           // Create XbpFont object
   oFont:familyName := "Verdana Bold" // Describe font
   oFont:nominalPointSize := 13       // veličina
   oFont:codePage   :=  238           // Serbian latin
   oFont:create()                     // Create font
*  oFont:configure()                  // Configure font - samo ako već postoji font
   oo:setFont(oFont)                  // dodeli font xbase objektu oo
*  msgbox( oo:setFontcompoundname()+" "+var2char(oFont:codePage),"Novi Font")
RETURN NIL


FUNCTION POMOC()
LOCAL ch := chr(13)
msgbox(;
"Kako u eXpress postaviti kodnu stranu 1250/238 latinica i 1251/204 ćirilica"  + ch+;
" "                                                                            + ch+;
"Kada se radi sa Alaska Xbase++ alatom: eXpress++ (Roger Donnay) tada"         + ch+;
"se upotreba Serbian latin fontova uključuje sa SET CHARSET TO ANSI"           + ch+;
"i sa podešavanjem windowsa u regional and language na Serbian latin"          + ch+;
"Time se dobija Charset:"                                                      + ch+;
"   charset name: EE_CHARSET"                                                  + ch+;
"   charset value: 238 ili (xEE)"                                              + ch+;
"   codepage number: 1250 Eastern Europe Serbian Latin"                        + ch+;
" "                                                                            + ch+;
"i sa na primer: DCPUSHBUTTON CAPTION 'ŠĐČĆŽ' FONT '14.Helv Bold'"             + ch+;
"vide se na ekranu i štampaju se na printeru Serbian latin slova"              + ch+;
" "                                                                            + ch+;
"Međutim fontovi Verdana, Arial, Times New Roman i drugi,"                     + ch+;
"neće kroz komandu: FONT '14.Verdana Bold' "                                   + ch+;
"prihvatiti slova ŠĐČĆŽšđčćž odnosno kodnu stranu 238"                         + ch+;
" "                                                                            + ch+;
"Iz tog razloga mora se kodna strana 238 dodati ovim fontovima"                + ch+;
"preko posebne funkcije. U ovom primeru prikazan je način dodavanja"           + ch+;
"kodne strane putem tri različite funkcije kojim se kreira font objekat"       + ch+;
"sa željenom, kodnom stranom a zatim se taj font objekat dodaje xbase"         + ch+;
"objektu čime taj xbase objekat dobija font sa kodnom stranom 238"             + ch+;
"koji prikazuje ŠĐČĆŽ"                                                         + ch+;
" "                                                                            + ch+;
"Isto važi i za ćirilicu. SET CHARSET TO ANSI i podešavanje Windowsa"          + ch+;
"u regional and language na Serbian cyrillic, daju Charset:"                   + ch+;
"  charset name: RUSSIAN_CHARSET"                                              + ch+;
"  charset value: 204 ili (xCC)"                                               + ch+;
"  codepage number: 1251 Rusian, Serbian, Bulgarian Cyrillic fonts"            + ch+;
"  "                                                                             ,;
"Serbian latin kodna strana 1250/238 i Serbian cyrillic kodna strana 1251/204")
RETURN NIL



Nema komentara: