Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BCB Spisak YU fontova

[es] :: C/C++ programiranje :: BCB Spisak YU fontova

[ Pregleda: 3489 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Duke Nukem
Miroslav Mitic
dipl.mas.ing - tehnolog za hidrauliku/
REL, MAG panciranje i zavarivanje bla
bla...
Lazarevac

Član broj: 38933
Poruke: 143
*.absolutok.net.



+1 Profil

icon BCB Spisak YU fontova09.09.2005. u 22:08 - pre 226 meseci
Trebala mi je ad hok procedura koja ce da prikaze nase fontove sa korisnickovog sistema
evo kako sam ja to obavio (ako neko ima primedbu ili bolju ideju neka nastavi...)


Code:

/* izdvaja sve srpske fontove i prikazuje ih
   u Memo kontroli
   predpostavka je da ti fontovi pocinju sa YU ili C_ ili Cir...
   a ima nekih koji se zavrsavaju sa _L
*/
AnsiString imeFonta;
AnsiString CET[]={"Beograd","Nis","Aleksinac","Novi Sad"}; //CET ovi fontovi
TStringList * fonts= new TStringList();
fonts->Assign(  Screen->Fonts);
for(int i= 0; i< fonts->Count; i++)
 {
   imeFonta= fonts->Strings[i];
   if ((imeFonta.Pos("YU")> 0) ||
       (imeFonta.Pos("C_")>0) ||
       (imeFonta.Pos("C ")>0 ) ||
       (imeFonta.Pos("Cir")>0 ) ||
        (imeFonta.Pos("_L")>0) )
        {   Memo2->Lines->Add(imeFonta);continue; }
        int k= (int) (sizeof(CET)/sizeof(AnsiString));
     for(int j=0;j<k;j++)
      if(CET[j]==imeFonta) { Memo2->Lines->Add(imeFonta); continue;}
 }
delete fonts;

Tape loading error
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB Spisak YU fontova10.09.2005. u 08:17 - pre 226 meseci
Kod je generalno OK, ali treba da razmotris par situacija:

Povratne vrednosti i velika i mala slova:

Pos() je case-sensitive, dakle yu nije isto sto i YU
== je case-sensitive, dakle beograd nise isto sto i Beograd

Na primer, imas funkcije UpperCase() / LowerCase(), pa mozes da ih izjednacis:

Code:

if ( UpperCase( NESTO ) == UpperCase( NESTO_DRUGO ) )
{
   // ...
}

umesto:
Code:

if ( NESTO == NESTO_DRUGO )
{
   // ...
}


Dalje, postoje jos neki YU fontovi koje nisi pomenuo, na primer "Mirosavljevo".

Takodje, postoji realna verovatnoca da se pojavi neki font koji u sebi ima na
primer "Cir" a da ne bude Ćirilica.

Koliko se sećam "Cir" fontovi su počinjali sa YuCir ili Cir ili CirYu, pa preispitaj
algoritam.

Dalje, ako bas hoces da kod bude 'zategnut' razmotri jos par stvarcica:

Code:

    // Nije sigurno:
    void foo()
    {
      TNekaKlasa * obj = new TNekaKlasa;
      process(obj);
      delete obj;
    }

    // Exception-safe način (sigurno):
    void foo()
    {
      std::auto_ptr<TNekaKlasa> obj(new TNekaKlasa);
      process(obj.get());
    }

dakle:
Code:

// ...
#include <Memory>
// ...
std::auto_ptr<TStringList> fonts(new TStringList);
// ... sada delete ne treba ...

ili alternativno:
Code:

TStringList *fonts = NULL;
try
{
   try
   {
      fonts = new TStringList;
   }
   catch ( const Exception &e )
   {
      // ...
   }
}
__finally
{
   if ( fonts )
      delete fonts;
}


Dalje, ako ima PUNO YU fontova, moze se desiti da vidis ruzan vizelni efekat
kod osvezavanja TMemo komponente i dodavanja novih elemenata, pri cemu ce
se osvezavanje desavati za svaki element pojedinacno. Ponekad je bolje da se
to uradi samo jednom, nakon dodavanja svih elemenata.

O tome nesto mozes odavde da vidis: http://tinyurl.com/7km4h
... pa ako treba nesto dodatno, javi se.

Ja koristim ovaj kod za slicnu stvar kod osvezavanja TRichEdit komponente, to jest
kod serijskog dodavanja nekih stavki, pri cemu ne zelim osvezavanje za svaku
stavku pojedinacno, nego kad se sve zavrsi...

Kod je 100% moj pa mozda ima i nekih gresaka, mada smunjam:

Code:

class RAII_RichEditLock
{
private:
   TRichEdit *RE;
   int evmask;
public:
   RAII_RichEditLock( TRichEdit *re ) : RE( re )
   {
      if ( RE )
      {
         evmask = RE->Perform( EM_GETEVENTMASK, 0, 0 );
         RE->Perform( EM_SETEVENTMASK, 0, evmask & ~ENM_REQUESTRESIZE );
         RE->Lines->BeginUpdate();
      }
   }
   ~RAII_RichEditLock()
   {
      if ( RE )
      {
         RE->Perform( EM_SETEVENTMASK, 0, evmask );
         RE->Lines->EndUpdate();
      }
   }
};


... evo kako se koristi:

Code:

void NekoDodavanje()
{
   RAII_RichEditLock Lock( RichEdit1 );
   
    for (  int i=0; ...itd...
       RichEdit1->Lines->Add( ... )
}


Destrukcija objekta je AUTOMATSKA nakon izlaska objekta iz oblasti vidljivosti,
sto je i glavna odlika takozvanog RAII projektnog sablona...

 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB Spisak YU fontova

[ Pregleda: 3489 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.