Ĺadny brzuch
Witam. Chcę napisać aplikację, ale nie wiem jak się do tego zabrać. Jak byście chcieli mi pomóć, to proszę o "wsparcie" pod Delphi 7. (Mam 2005, ale jest bez sensu).
Więc mam zamiar stworzyć aplikację, która by tworzyła tabele z wczytywanego pliku. Komponentem do wyświetlania tabeli ma być TStringGrid. Przypuśćmy. Plik ma się składać z wierszy. Każdy wiersz to jeden wiersz w StringGrid. W wierszu wyrazy (złożone też) są oddzielane przez Tabulatory (chyba $09 - hex), które przez nasz program są odczytywane jako kolumny. Dla przykładu, plik:
name type type2 code alternateGfx
Hand Axe axe hax hax hax
jest przykładem tabeli:
---------------------------------------------------------------
|Name |type |type2 |code |alternateGfx |
---------------------------------------------------------------
|Habd Axe |axe |hax |hax |hax |
---------------------------------------------------------------
Jeżeli by ktoś był zainteresowany, skąd akurat TAKI przykład, to są to pliki TXT z gry Diablo 2.
Więc, proszę o pomoc, w wczytywaniu takiego pliku do StringGrid.
procedure LoadToStringGrid(FileName: String); var st: TStrings; i: Integer; begin st := TStringList.Create; try st.LoadFromFile(FileName); StringGrid1.RowCount := st.Count; for i := 0 to st.Count - 1 do begin StringGrid1.Rows[i].Delimiter := #9; StringGrid1.Rows[i].DelimitedText := st[i]; end; finally st.Free; end; end;
Pisane na kolanie, więc może nie działać - sprawdź zwłaszcza, czy StringGrid1.Rows[] posiada właściwości Delimiter i DelimitedText :)
Dzięki, kod dziala poprawnie. Zapisywać się też już nauczyłem, ale przeszkadza mi jedna rzecz. Przy wczytywaniu pliku z ową tabelą, string grid nie zmienia ilości kolumn, do ilości kolumn w pliku. Proszę o jakieś kody, co by umożliwiły dopasowanie ilości kolumn...
No i jeszcze parę rzeczy:
1. Jeżeli chcę wstawić wiersz (row), to jaki kod mam wstawić?
2. Jeżeli chcę skopiować (i wkleić) wiersz, to jaki kod mam wstawić?
3. Jeżeli chcę wyszukać w tabeli jakichś słów, to co mam wpisać (w kodzie)?
Acha. Jeszcze jedno. Moja procedura zapisu. Jeżeli ktoś zna lepszą, to proszę pisać:
procedure TMainForm.SaveFile; var st: TStrings; i: integer; begin if savedialog1.execute then begin  st := TStringList.Create;  for i := 0 to StringGrid1.RowCount do st.Add('');  for i := 0 to StringGrid1.RowCount do st[i]:=StringGrid1.Rows[i].DelimitedText;  st.SaveToFile(savedialog1.FileName); end; end;
Użytkownik Seba10 edytował ten post 28 styczeń 2006, 22:11
Co do liczby kolumn, to sobie zliczaj liczbę znaków tabulacji (czy innych, którymi oddzielasz poszczególne kolumny) i ustaw odpowiednio StringGrid1.ColCount :P
1. Zwiększasz RowCount o jeden i ewentualnie przesuwasz w dół zawartość wierszy "spod" wstawianego (jeśli wstawiasz wiersz między istniejące).
2. Skopiuj do schowka StringGrid1.Rows[index].DelimitedText
Clipboard.AsText := StringGrid1.Rows[index].DelimitedText;
wklejanie - wstawiasz wiersz jak w 1), a później dajesz:
StringGrid1.Rows[index].DelimitedText := Clipboard.AsText;
3. Co do wyszukiwania, to przeszukuj w pętli wszystkie komórki (StringGrid1.Cells[i, j]), najprościej funkcją Pos();
Procedura zapisu:
procedure SaveFile(FileName: String); var st: TStrings; i: Integer; begin st := TStringList.Create; try for i := 0 to StringGrid1.RowCount - 1 do begin StringGrid1.Rows[i].Delimiter := #9; st.Add(StringGrid1.Rows[i].DelimitedText; end; st.SaveToFile(FileName); finally st.Free; end; end;
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Więc mam zamiar stworzyć aplikację, która by tworzyła tabele z wczytywanego pliku. Komponentem do wyświetlania tabeli ma być TStringGrid. Przypuśćmy. Plik ma się składać z wierszy. Każdy wiersz to jeden wiersz w StringGrid. W wierszu wyrazy (złożone też) są oddzielane przez Tabulatory (chyba $09 - hex), które przez nasz program są odczytywane jako kolumny. Dla przykładu, plik:
name type type2 code alternateGfx
Hand Axe axe hax hax hax
jest przykładem tabeli:
---------------------------------------------------------------
|Name |type |type2 |code |alternateGfx |
---------------------------------------------------------------
|Habd Axe |axe |hax |hax |hax |
---------------------------------------------------------------
Jeżeli by ktoś był zainteresowany, skąd akurat TAKI przykład, to są to pliki TXT z gry Diablo 2.
Więc, proszę o pomoc, w wczytywaniu takiego pliku do StringGrid.
procedure LoadToStringGrid(FileName: String); var st: TStrings; i: Integer; begin st := TStringList.Create; try st.LoadFromFile(FileName); StringGrid1.RowCount := st.Count; for i := 0 to st.Count - 1 do begin StringGrid1.Rows[i].Delimiter := #9; StringGrid1.Rows[i].DelimitedText := st[i]; end; finally st.Free; end; end;
Pisane na kolanie, więc może nie działać - sprawdź zwłaszcza, czy StringGrid1.Rows[] posiada właściwości Delimiter i DelimitedText :)
Dzięki, kod dziala poprawnie. Zapisywać się też już nauczyłem, ale przeszkadza mi jedna rzecz. Przy wczytywaniu pliku z ową tabelą, string grid nie zmienia ilości kolumn, do ilości kolumn w pliku. Proszę o jakieś kody, co by umożliwiły dopasowanie ilości kolumn...
No i jeszcze parę rzeczy:
1. Jeżeli chcę wstawić wiersz (row), to jaki kod mam wstawić?
2. Jeżeli chcę skopiować (i wkleić) wiersz, to jaki kod mam wstawić?
3. Jeżeli chcę wyszukać w tabeli jakichś słów, to co mam wpisać (w kodzie)?
Acha. Jeszcze jedno. Moja procedura zapisu. Jeżeli ktoś zna lepszą, to proszę pisać:
procedure TMainForm.SaveFile; var st: TStrings; i: integer; begin if savedialog1.execute then begin  st := TStringList.Create;  for i := 0 to StringGrid1.RowCount do st.Add('');  for i := 0 to StringGrid1.RowCount do st[i]:=StringGrid1.Rows[i].DelimitedText;  st.SaveToFile(savedialog1.FileName); end; end;
Użytkownik Seba10 edytował ten post 28 styczeń 2006, 22:11
Co do liczby kolumn, to sobie zliczaj liczbę znaków tabulacji (czy innych, którymi oddzielasz poszczególne kolumny) i ustaw odpowiednio StringGrid1.ColCount :P
1. Zwiększasz RowCount o jeden i ewentualnie przesuwasz w dół zawartość wierszy "spod" wstawianego (jeśli wstawiasz wiersz między istniejące).
2. Skopiuj do schowka StringGrid1.Rows[index].DelimitedText
Clipboard.AsText := StringGrid1.Rows[index].DelimitedText;
wklejanie - wstawiasz wiersz jak w 1), a później dajesz:
StringGrid1.Rows[index].DelimitedText := Clipboard.AsText;
3. Co do wyszukiwania, to przeszukuj w pętli wszystkie komórki (StringGrid1.Cells[i, j]), najprościej funkcją Pos();
Procedura zapisu:
procedure SaveFile(FileName: String); var st: TStrings; i: Integer; begin st := TStringList.Create; try for i := 0 to StringGrid1.RowCount - 1 do begin StringGrid1.Rows[i].Delimiter := #9; st.Add(StringGrid1.Rows[i].DelimitedText; end; st.SaveToFile(FileName); finally st.Free; end; end;