[ IDE @ 01.07.2005. 16:45 ] @
imam jedan jako cudan problem!!pomalo i smijesan!!
da bi shvatili sta se desava, napravimo nesto sto lici na obican digitron...
imacemo jednu edit komponentu, i dugmad od 0 do 1...
u svako dugme, da bi dopisivao nov broj na vec postojeci u Edit-u stavimo kod:

u heder fajlu:
------------
String a,b;
-----------


u .cpp-u:
------------
za dugme 1:

#include<string.h>
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
a=Edit1->Text;
b=strcat(a.c_str(),"1");
Edit1->Clear();
Edit1->Text=b;
}
za dugme 2:

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

a=Edit1->Text;
b=strcat(a.c_str(),"2");
Edit1->Clear();
Edit1->Text=b;
}
i tako do kraja...

tu se desava jedna jako cudna stvar:
kad kliknemo npr dugme "2", onda ce sva ostala dugmad normalno raditi, tj dopisivati npr. 4,7,9,5 i SAMO NECE RADITI 3!!!!!tj. koje god dugme da kliknemo, nikad nece raditi ono za 1 vece od njega!!!!!!!!!!!

moze li mi ko objasniti zasto je to tako?????


[ X Files @ 01.07.2005. 17:31 ] @
Kod koji si pokazao nije dobar... Nemoj da Mesas preterano AnsiString-ove i
NULL terminated stringove. Ono sto ti nekada vidis kod AnsiString-a je zapravo
kopija a ne realna vrednost...

Probaj ovakav kod:

Stavi 10 TSpeedButton-a, i za svaki posebno postavi Tag property
od 1,2,3,...,0.

Zatim dodaj SAMO JEDAN dogadjaj (a ne 10) SpeedButton1Click, a ostale preusmeri
u njega - umesto da kliknez za novi OnClick, ti samo iz ComboBox-a izaberi onaj
prvi. A preko Tag-a ce razluciti koji si pritisnuo...

Button1 je za vracanje nazad.

Upis ce ici na Panel1 umesto na Edit1.



Code:

// NETESTIRANO !!!
 
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  if ( Panel1->Caption.Length() > 16 )
     return;

  int Broj =  ( (TSpeedButton*)Sender )->Tag;
  Panel1->Caption = Panel1->Caption + IntToStr( Broj );        
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if ( Panel1->Caption.Length() > 0 )
      Panel1->Caption = Panel1->Caption.SetLength( Panel1->Caption.Length()-1 );
}

[ NastyBoy @ 01.07.2005. 18:57 ] @
Code:

a=Edit1->Text;
b=strcat(a.c_str(),"1");


Shteta shto ovo nije puklo, inache bi video u chemu je problem.
Nikad nemoj koristiti c-funkcije koje interno menjaju bafer AnsiString-a!

Ovo gore si mogao jednostavno i ovako da napishesh :
Code:

b = a + "1";

[ IDE @ 01.07.2005. 19:17 ] @
hvala vam, pogledacu!!
[ IDE @ 02.07.2005. 15:57 ] @
a ovako nesto za svako dugme:

#include<string.h>
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
String a="";
a=Edit1->Text;
b=a+"1";
Edit1->Clear();
Edit1->Text=b;
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ????

i ako jos hocu da ogranicim broj cifara koje se mogu upisati u edit:

#include<string.h>
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
if(Edit1->Text.Length()<9)
{
String a="";
a=Edit1->Text;
b=a+"1";
Edit1->Clear();
Edit1->Text=b;
}
}

da li bi ovako nesto valjalo???

(volim dobiti dobar prijedlog, kako bih bolje naucio nesto, ali jos vise volim sam napisati nesto sto moze proci, i pri tom shvatiti gdje sam pogrijesio prije...Shvatio bas i nisam pretjerano, ali nesto novo-sto radi, napisao jesam...mozda sam i tvrdoglav, ali vise volim doraditi sopstveni kod, pa makar on ne bio bas najbolji i trosio vise resurse nego ostali i njega koristiti...A za odgovore vase sam vise nego zahvalan!!Preko njih ucim....)


[Ovu poruku je menjao fucking voodoo dana 02.07.2005. u 16:59 GMT+1]
[ X Files @ 03.07.2005. 11:56 ] @
Citat:

#include<string.h> // <--- OVO TI NE TREBA !!!
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
if( Edit1->Text.Length()<9 )
{
String a=""; //
a=Edit1->Text; //
b=a+"1"; // Edit1->Text = Edit1->Text + "1";
Edit1->Clear(); //
Edit1->Text=b; //
}
}


dakle:

Code:

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
   if( Edit1->Text.Length()<9 )
      return;
   Edit1->Text = Edit1->Text + "1";
}


ili, da ne bi pisao 10 funkcija, nego samo jednu zajednicku za sve SpeedButton-e:

Code:

// Prethodno dodeli Tag=1 za SpeedButton1, Tag=2 za SpeedButton2, ...
// ... Tag=0 za SpeedButton 0
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
   if( Edit1->Text.Length()<9 )
      return;
   
   int Broj =  ( (TSpeedButton*)Sender )->Tag;
   Edit1->Text = Edit1->Text + IntToStr( Broj );
}


Ovo poslednje je jako bitno jer imas manje koda, lakse se kod odrzava, itd...