Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 4.551 pregleda

Najnovija ↓

upisivanje karakteristika (kodova) (borland) 02.06.2005. u 16:24 · pre 260 meseci #1
kompjuter za svaku boju ima odredjeni kod...
kako bih mogao upisati u neki txt fajl npr boju koja se trenutno koristi u aplikaciji?
npr. imam richedit komponentu, i hocu da mi se u neki txt fajl upise odredjena vrijednost kojom kompjuter prepoznaje koja je boja u pitanju...
fora je u tome sto bih htio napraviti da mi kasnije, pri ucitavanju, aplikacija procita vrijednost iz toga fajla i dodjeli aplikaciji onu boju koja ima istu vrijednost kao kod u txt fajlu...isto bih htio napraviti i za font (vrsta fonta, velicina fonta, boja fonta)...
pa ako bi me ko znao usmjeriti kad su ovih par stvari u pitanju, bio bih jako zahvalan...
Potpis
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
Re: upisivanje karakteristika (kodova) (borland) 02.06.2005. u 16:31 · pre 260 meseci #2
Svaka boja ti je, zapravo, RGB kombinacija (cesto se korisiti i TColor za reprezentaciju). Znaci, da bi u datoteku upisao neku boju trebao bi znati tu RGB kombinaciju. Medjutim, Ti mozes reci da ti u datoteku snimi npr.

// napamet pisem clan za boju...
(double)this->Color;

Ti ces tada zapisati samo jedan broj u datoteku koji ce predstavljati sva tri dijela R G i B. Isto tako i kad citas. Procitas taj jedan broj i odjednom imas cijelu RGB kombinaciju (koju ces upotrijebiti kako hoces).
Re: upisivanje karakteristika (kodova) (borland) 02.06.2005. u 17:35 · pre 260 meseci
izmenjeno 1 put, poslednji put X Files 02.06.2005. u 17:46
  1. X Files02.06.2005. u 17:46zapis iz teksta poruke
#3
Predlazem ti da za snimanje/ucitavanje poslednje koriscenih osobina
koristis TIniFile klasu. Pogledaj Help, sve je lepo objasnjeno. Dakle radi se
o INI datotekama, koje imaju sekciju, kljuc i vrednost:

[SEKCIJA]
KLJUC=VREDNOST

C++Builder / VCL poseduje vec gotove funkcije:

ColorToString()
StringToColor()

...za takve manipulacije. Prednost ovih funkcija je sto ce raditi i za vrednosti
koje su upisane u nekom HEX formatu RGB (u C++ Buildersu su zapravo
0x00BBGGRR), ali i za opisne tipa 'clMoneyGreen'.
Re: upisivanje karakteristika (kodova) (borland) 02.06.2005. u 17:45 · pre 260 meseci #4
Da bi probao ovo sto sam gore napisao probaj recimo ovo:

Stavi dve TLabel komponente (Label1 i Label2)

Svati dve TEdit komponente (Edit1 i Edit2), i u prvu (kao default tekst) upisi
0x000000FF a u drugu clRed

Zatim stai jedan TButton (Button1) i u njega kod:

Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Label1->Font->Color = StringToColor( Edit1->Text ); // Edit1: 0x000000FF
   Label2->Font->Color = StringToColor( Edit2->Text ); // Edit2: clRed
}

Re: upisivanje karakteristika (kodova) (borland) 03.06.2005. u 19:04 · pre 260 meseci #5
X Files je u pravu, najlakse ti je da koristis TIniFile. Boje moze snimati/ucitavati i na sledeci nacin:

TIniFile *ini=new TIniFile("colors.ini");
ini->WriteInteger("Section","Key",Memo1->Color);//pisanje u ini file
Memo1->Color=ini->ReadInteger("Section","Key",0);//citanje boje
delete ini;

U ovom slucaju ti boju pamti kao integer,ali radi bez problema.
Potpis
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
Re: upisivanje karakteristika (kodova) (borland) 04.06.2005. u 15:22 · pre 260 meseci #6
hvala vam puno!!
ovo je ono sto mi je trebalo!!

sve sam napravio sta mi je trebalo, ali evo sada jdno pitanje oko kojeg glavu razbijam vec nekoliko sati:

zasto ovo nece da radi:

napravio sam RichEdit komponentu i dugme koje zove FontDialog, na ovaj nacin:
--------------
if(FontDialog1->Execute());
{
RichEdit1->Font=FontDialog1->Font;
}
--------------
i pri izlazu, u INI fajl se upisuje sljedece:

------------------------------------------------------------------------
TIniFile *ini=new TIniFile("IME_FAJLA.ini");
ini->WriteInteger("font","boja",RichEdit1->DefAttributes->Color);
ini->WriteInteger("slova","visina",RichEdit1->DefAttributes->Height);
ini->WriteString("karakteri","ime",RichEdit1->DefAttributes->Name);
delete ini;
--------------
a pokusavao sam i sa:

--------------
TIniFile *ini=new TIniFile("IME_FAJLA.ini");
ini->WriteInteger("font","boja",FontDialog1->Font->Color);
ini->WriteInteger("slova","visina",FontDialog1->Font->Height);
ini->WriteString("karakteri","ime",FontDialog1->Font->Name);
delete ini;
----------------------------------------------------------------------
a pri podizanju se ucitava na sljedeci nacin:

----------------------------------------------------------------------
TIniFile *ini=new TIniFile("IME_FAJLA.ini");
RichEdit1->DefAttributes->Color=ini->ReadInteger("font","boja",0);
RichEdit1->DefAttributes->Height=ini->ReadInteger("slova","visina",0); //ili ("slova","visina",10)
RichEdit1->DefAttributes->Name=ini->ReadString("karakteri","ime",0); //ili ("karakteri","ime",Verdana)
delete ini;
---------------

tj. pokusavao sam i sa:

---------------
TIniFile *ini=new TIniFile("IME_FAJLA.ini");
RichEdit1->Font->Color=ini->ReadInteger("font","boja",0);
RichEdit1->Font->Height=ini->ReadInteger("slova","visina",0);
RichEdit1->Font->Name=ini->ReadString("karakteri","ime",0);
delete ini;
--------------------------------------------------------------------
ali ovo , jednostavno , nece da radi!!!!!
tj. radi ponekad...
prvo...u ini fajl aplikacija ZAPISE, cini mi se svaki put, ime fonta koji koristim...
dobro...boja fonta je neki broj...(cesto veoma velik- u stotinama hiljada, pa cak i veoma cesto, tj skoro uvijek i u milionima) (zapitam se: kakav je to integer??? :-) to i ne moze biti integer,on je puno manji...)
a visina fonta je takodje neki broj (nikad se ne podudara sa onom velicinom fonta koju sam odabrao, a cesto je i sa predznakom MINUS)

e sad se ja pitam...GDJE sam pogrijesio??? ako neko uoci gresku, molio bih ga da mi to javi, kako bih je mogao otkloniti...


Potpis
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
Re: upisivanje karakteristika (kodova) (borland) 05.06.2005. u 20:48 · pre 260 meseci #7
Citat:

if ( FontDialog1->Execute() );
{
RichEdit1->Font=FontDialog1->Font;
}

Ovo je OK. U principu se cela struktura Font objekta prenosi u RichEdit.

Citat:

TIniFile *ini=new TIniFile("IME_FAJLA.ini");

Dve zamerke:

1) Kada je u pitanju otvaranje nekih datoteka u Windows-ima *uvek*
koristi pune putanje. Dakle, ispred "IME_FAJLA.ini" treba da dodaš kod
koji će osigurati *tačnu putanju*. U kodu koji sam dole ostavio možeš da vidiš
kako se to može uraditi.

2) Kada je u pitanju otvaranje nekih datoteka u Windows-ima *uvek*
treba da imaš neki sigurnosni kod, jer ukoliko je tvoja datoteka pri učitavanju
ekskluzivno zauzeta od nekog drugog programa, ili je "read only" dolazi do
sistemske greške i program može da prestane da se ponaša kako si zamislio, ako
to nisi predvideo. Takođe pogledaj moj kod.

Ne bi bilo zgorega da pogledaš šta je to RAII u smilsu sigurnosti C++ koda.

Citat:

ini->WriteInteger("font","boja",RichEdit1->DefAttributes->Color);


Dakle, kao što rekoh koristi StringToColor() i ColorToString(). Pametno je držati
se rešenja koja su *standardna* u nekoj biblioteci klasa. Sve to može i sa Integer
ali...

Evo nešto koda...

Code:

// ...
#include <IniFiles.hpp>
// ...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if( FontDialog1->Execute() );
   {
      RichEdit1->Font = FontDialog1->Font;
   }
}

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   TIniFile *pIni = NULL;
   try
   {
      try
      {
         pIni = new TIniFile( ExtractFilePath( ParamStr(0) ) + "konfiguracija.ini" );

         RichEdit1->Font->Name = pIni->ReadString( "RichEdit", "Name", "Arial" );
         RichEdit1->Font->Color = StringToColor( pIni->ReadString( "RichEdit", "Color", "clBlack" ) );
         RichEdit1->Font->Height =  pIni->ReadInteger( "RichEdit", "Height", -11 );
      }
      catch ( const Exception &e )
      {
         // Moze neka poruka o gresci...
      }

   }
   __finally
   {
      if ( pIni )
         delete pIni;
   }
}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   TIniFile *pIni = NULL;
   try
   {
      try
      {
         pIni = new TIniFile( ExtractFilePath( ParamStr(0) ) + "konfiguracija.ini" );

         pIni->WriteString( "RichEdit", "Name", RichEdit1->Font->Name );
         pIni->WriteString( "RichEdit", "Color", ColorToString( RichEdit1->Font->Color ) );
         pIni->WriteInteger( "RichEdit", "Height", RichEdit1->Font->Height );
      }
      catch ( const Exception &e )
      {
         // Moze neka poruka o gresci...
      }

   }
   __finally
   {
      if ( pIni )
         delete pIni;
   }
}

Re: upisivanje karakteristika (kodova) (borland) 07.06.2005. u 15:43 · pre 260 meseci #9
Kada ucitavas iz INI datoteke i to pridjeljujes RichEdit komponenti izbaci onaj 'DefAttributes'. Adresiraj se direktno na Font clan RichEdit objekta.
Re: upisivanje karakteristika (kodova) (borland) 07.06.2005. u 18:18 · pre 260 meseci #10
hvala vam puno na odgovorima!!!!
pa i jesam izbacio defattributes, i uradio kako ti predlazes...

samo jedna napomena:
i nije bas mozda dobra kombinacija:

if(FontDialog1->Execute())
{
RichEdit1->Font->FontDialog1->Font;
}

jer se desava sljedece...Kada se pritisne "ok", normalno font dobija izgled kakav smo i stavili da bude (boja, velicina, ime fonta...) ALI problem nastaje kada stisnemo "cancel"!! Tada font dobija takodje novi izgled, i to u zavisnosti gdje je bilo potamljeno na raznim sekcijama font dialoga, umjesto da se samo vratimo nazad...Normalno oni koji se vec dugo bave Borland builder-om to znaju, ali ja sam to tek nedavno primjetio...
Ako bi ko od iskusnijih zelio objasniti kako to da se rijesi, bio bih jako zahvalan...
za apply znam rijesiti, ali ne znam za Cancel....
Potpis
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
Re: upisivanje karakteristika (kodova) (borland) 07.06.2005. u 19:28 · pre 260 meseci #11
Stavi:

Code:

FontDialog1->Font = RichEdit1->Font;


ispred
if ( FontDialog1->Execute() );

dakle:

Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{

   FontDialog1->Font = RichEdit1->Font;
   if( FontDialog1->Execute() );
   {
      RichEdit1->Font = FontDialog1->Font;
   }
}

Re: upisivanje karakteristika (kodova) (borland) 07.06.2005. u 21:25 · pre 260 meseci #12
Našao sam grešku :) Da puknem od muke...

U tvom PRVOM kodu, koji sam kopirao od tebe, stavio si TAČKA ZAREZ tamo gde
ne treba:

Code:

if(FontDialog1->Execute()); < --- UKLONI TAČKA ZAREZ
{
RichEdit1->Font=FontDialog1->Font;
}


... i sve će raditi kako treba!
Re: upisivanje karakteristika (kodova) (borland) 08.06.2005. u 12:54 · pre 260 meseci #13
da, da... to je to!!!!!
sada je sve u redu!!!!ne mogu da vjerujem sta nas je sve uspjelo, bar na trenutak, zeznuti...
hvala puno!!!!!
Potpis
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme