Borland C++ Builder i StringGrid - dane pobierane z pliku
| debbie | 26.03.2009 17:15:10 | |
![]() | 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. | |
| Rekman | 07.04.2009 20:45:47 | |
![]() | 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);
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. | |

