Käytän Borland c Builder 4-ohjelmaa. Haluan, että käyttäjä pystyy tallentamaan lomakkeen (sisältää edit-boxeja ja labeleita), mutta miten sen teen?? Kysyn siis koodia. Tallennettuja lomakkeita pitäisi myös pystyä selailemaan. En ymmärrä mitään noista SaveString yms. hommeleista.
Entä miten saan tallennetuista lomakkeista yhden tietyn edit-boxin arvot laskettua yhteen?
Pikainen ja selkeä vastaus.
Entä miten saan tallennetuista lomakkeista yhden tietyn edit-boxin arvot laskettua yhteen?
Pikainen ja selkeä vastaus.
Vastaukset 1
Vanhimmat
-Lomakkeen sisältämät tiedot tallennetaan "omaan" tietokantaan tulot.txt
Lomakkeita ei tietääkseni tallenneta muulla tavoin.
Esimerkki on tarkoitettu ikäänkuin osviitaksi ja sitä voidaan muuttaa
omien tarpeitten mukaan.Yleensä käytetään funktioita ja näistäkin voi
sellaiset tehdä - avattava tiedosto parametriksi-tai voi kasata oman
luokan.Käytössä c Builder 6 Personal Edition mutta kääntyy sinullakin.
-Tässä ei ole tietueen muuttamista ja deletointia,mutta niitä ei
kysyttykään.Labelin Caption-ominaisuus on samanarvoinen kuin textboxin
Text-ominaisuus(AnsiString=String).Siitä vain soveltaen.
-Lomakkeella komponentit: 3 tekstiboxia,1 StringGrid 2 CommandButtonia.
Aseta ne lomakkeelle ja kirjoita annetut koodit,niin pitäisi toimia.
Tarvittavat headerit(Unit1.cpp)
-------------------------------
#include
#include
-------------------------------
//Unit1.h-tiedoston loppuosa.Struct testi tänne.
extern PACKAGE TForm1 *Form1;//Kääntäjän kirjoittama
struct testi
{
char nimi[40];//Tekstiboxiin Edit1-MaxLength=39
char vero[10];//Tekstiboxiin Edit2-MaxLength=9
};
#endif//Kääntäjän kirjoittama
//---------------------------------------------------------------------------
//Unit1.cpp
void __fastcall TForm1::button1_plustietueClick(TObject *Sender)
{
fstream tulos;//Avataan virta
String tiedosto="tulot.txt";
testi kirjaus;//Otetaan structi käyttöön(Unit1.h)
//Avataan tai luodaan binääritiedosto kirjoitettavaksi
tulos.open(tiedosto.c_str(),ios::out | ios::binary | ios::app);
strcpy(kirjaus.nimi,Trim(Form1->Edit1->Text).c_str());
strcpy(kirjaus.vero,Trim(Form1->Edit2->Text).c_str());
tulos.write((char*) & kirjaus,sizeof kirjaus);
tulos.close();//Tiedot kirjoitettu
}
//---------------------------------------------------------------------------
//Unit1.cpp
void __fastcall TForm1::Button2_luetiedotClick(TObject *Sender)
{
Form1->StringGrid1->FixedCols=0;//StringGrid
Form1->StringGrid1->ColCount=2;//StringGrid sarakkeet kpl
Form1->StringGrid1->ColWidths[0]=300;//Ekasarakkeen leveys
Form1->StringGrid1->ColWidths[1]=100;//Tokasarakkeen leveys
//Otsikot StringGriidiin
Form1->StringGrid1->Cells[0][0]=String("Nimi");
Form1->StringGrid1->Cells[1][0]=String("Verosumma");
fstream luku;//Avataan virta
String tiedosto="tulot.txt";
testi lue;//Otetaan structi käyttöön
int tietueet=0;//Tietuelaskuri
double verosumma=0;//Verot yhteensä
if(FileExists(tiedosto.c_str()))
{
//Avataan binääritiedosto luettavaksi
luku.open(tiedosto.c_str(),ios::in | ios::binary);
while(luku.read((char*)&lue,sizeof (lue)))
{
Form1->StringGrid1->RowCount=tietueet 2;
tietueet ;//Montako tietuetta
Form1->StringGrid1->Cells[0][tietueet]=String(lue.nimi);
Form1->StringGrid1->Cells[1][tietueet]=String(lue.vero);
verosumma =String(lue.vero).ToDouble();//Verojen summa
}
luku.close();//Tiedot luettu
Form1->Edit3->Text=verosumma;//Kirjoitetaan tekstiboxiin
}//if
else ShowMessage("Lisää ensin tietueita");
}
//---------------------------------------------------------------------------
//Unit1.cpp
//Tiedot tekstiboxeihin
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
//Nimi tekstiboxiin
Form1->Edit1->Text=Form1->StringGrid1->Cells[0][StringGrid1->Row];
//Vero tekstiboxiin
Form1->Edit2->Text=Form1->StringGrid1->Cells[1][StringGrid1->Row];
}
//---------------------------------------------------------------------------