Borland C++ Builder i StringGrid - dane pobierane z pliku




debbie26.03.2009 17:15:10
#
Dołączył: 25.03.2009

Witam! Mam taki problem odnośnie StringGrida - mianowicie:

Zrobilem sobie formularz do którego wprowadzam dane, Po kliknięciu w przycisk zatwierdz dane te zapisują mi się w pliku w postaci:

void __fastcall TForm1::Button2Click(TObject *Sender) { AnsiString S=Edit1->Text+"\";\""+Edit2->Text+"\";\""+Edit3->Text+"\";\""+Edit4->Text+"\";\""+Edit5->Text+"\";\""+Edit6->Text+"\";\""+Edit7->Text+"\";\""+Edit8->Text+"\";\""+Edit9->Text+"\""; ofstream f;

Edit1->Clear(); Edit2->Clear(); Edit3->Clear(); Edit4->Clear(); Edit5->Clear(); Edit6->Clear(); Edit7->Clear(); Edit8->Clear(); Edit9->Clear();

f.open("Nazwa_pliku.roz",ios::app); f.write(S.c_str(),S.Length()); f.close();

} dane w pliku ( przykladowo ) wyglądają tak: fsdfdsfsd";"lkjl";"kj";"lkjlkjl";"k";"lkjlkjlk";"lkjlkjlk";"lkjlkjlk";"lkjlkjlkj" liczba kolumn jest znana - zawsze będzie ich 9 ale liczba wierszy nie - ponieważ jest ona uzalezniona od wprowadzonych danych z formularza. No i fajnie. I teraz tak - mam StringGrida poniżej i jak zrobić żeby pobierał mi te dane z pliku i wrzucał do komórek?? Czyli naciskam na przycisk i dane mi się uzupełniają w StringGrid'zie Wprawadzam kolejne dane do formualrza zatwierdzam itd itd i wiersze w StringGrid'zie powiekszają mi się zgodnie z liniami w pliku. Był bym Bardzo wdzięczny za pomoc.

Rekman07.04.2009 20:45:47
#
Dołączył: 05.04.2009

Najprościej to użyć obiekty pośredniczącego typu TStringList. Zatem w klasie formularz deklarujemy wskaźnik do niego i funkcję wstawiającą teksty do gridu: TStringList* TextForGrid; void FillGrid();

Następnie w funkcji obsługi zdarzenia OnCreate formularz dopisujemy: TextForGrid = new TStringList; if(FileExists("nazwa_pliku.roz")) TextForGrid->LoadFromFile("nazwa_pliku.roz"); FillGrid(); A w funkcji obsługi zdarzenia OnDestroy: delete TextForGrid;

Teraz zmieniamy implementację funkcji zdarzenia OnClick przycisku Button2: TextForGrid->Add(Edit1->Text); TextForGrid->Add(Edit2->Text); TextForGrid->Add(Edit3->Text); TextForGrid->Add(Edit4->Text); TextForGrid->Add(Edit5->Text); TextForGrid->Add(Edit6->Text); TextForGrid->Add(Edit7->Text); TextForGrid->Add(Edit8->Text); TextForGrid->Add(Edit9->Text);

TextForGrid->SaveToFile("nazwa_pliku.roz");
FillGrid();

I ewentualnie "czyścimy" pola edycyjne.

Na koniec do pliku źródłowego formularz dodajemy poniższy kod: void TForm1::FillGrid() { StringGrid1->RowCount = TextForGrid->Count/9+StringGrid1->FixedRows; int text_idx = 0; for(int rc=0; rc<StringGrid1->RowCount-StringGrid1->FixedRows; ++rc) for(int cc=0; cc<StringGrid1->ColCount; ++cc) { if(text_idx < TextForGrid->Count) StringGrid1->Cells[cc][rc+StringGrid1->FixedRows] = TextForGrid->Strings[text_idx++]; else break; } }

I to wszystko.




Kontakt

Jeśli chcesz się z nami skontaktować napisz na adres: info(at)binboy.org lub odwiedź nasz profil na Facebooku!

O Nas

Serwis binboy.org to kopalnia wiedzy dla wszystkich z branży IT, w szczególności dla programistów i webmasterów. To duży zbiór kursów programowania, tutoriali, darmowych ebooków, setki kodów źródłowych itp.

Bądź w kontakcie

Panel użytkownika

Zaloguj się do panelu użytkownika.
Nie masz konta? Zarejestruj się!
Zapomniałeś hasła?