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...