Funkcja zapisz/odczytaj

Funkcja zapisz/odczytaj
FR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

Witam.

Ostatnio zacząłem programować w delphi a przynajmniej się uczyć i napotkałem problem. Otóż stworzyłem sobie mini programik do którego pisze sobie Nazwe towaru, Ilość, Cenę itd. No i chce aby po wyłączeniu a potem włączeniu tego programu mógł te dane znów wczytać. Umiem napisać kod aby np. z listbox1.item zapisać do pliku a potem wczytać. No i mogę tak zrobić że mam 3 listboxy i stworzą mi się 3 pliki. No ale co będzie gdy zrobię program i będzie tam 100-200 listboxów ? To stworzy mi się 200 plików co spowolni program i ogólnie za duży bałagan. Próbowałem z recordami, grupami, Case itd ale coś nie umiem.

Tak więc jak zrobić aby po kliknięciu w zapisz zapisywały mi się dane ze wszystkich labeli, listboxow, memów itd. do pliku .txt a po kliknięciu wczytaj dane wracały na swoje pierwotne miejsce.

Pozdrawiam

olesio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 4191
0

Plini Ini albo typowane + FindComponent lub Write/ReadComponent powinno pomóc. Czyli:

Kopiuj
var
  A : TMemoryStream;
begin
  A := TMemoryStream.Create;
  A.WriteComponent(Form1);
  A.SaveToFile('D:\test.bin');
  A.Free;
end;
FR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

No ale mi chodzi żeby 2 tabele do jednego txt włożyć i później przy odczycie każda tabela ma wiedzieć co do niej należy. Chyba że jest coś prostszego.

lankusiek
  • Rejestracja: dni
  • Ostatnio: dni
0

No ale mi chodzi żeby 2 tabele do jednego txt włożyć i później przy odczycie każda tabela ma wiedzieć co do niej należy.

Przecież ci olesio napisał wszystko pięknie:) teraz wystarczy trochę pomyśleć lub poszukać w google

Kopiuj
 
var                                 // do zapisu
  A : TMemoryStream;
begin
  A := TMemoryStream.Create;
  A.WriteComponent(Listbox1);
  A.WriteComponent(Listbox2);
  A.SaveToFile('test.bin');        
  A.Free;
end;
----------------------------------------------
var                                 // do odczytu
  B : TMemoryStream;
begin
  B := TMemoryStream.Create;
  B.LoadFromFile('test.bin');     
  B.ReadComponent(Listbox1);
  B.ReadComponent(Listbox2);
  B.Free;
end;
pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0
Kopiuj
var
  f:TextFile;
  i,n:Integer;
  s:string;
//...
//zapis dwóch ListBoxów do jednego pliku tekstowego
  AssignFile(f,'nazwa_pliku.txt');
  Rewrite(f);
  n:=ListBox1.Items.Count;
  WriteLn(f,n);
  for i:=0 to n-1 do WriteLn(f,ListBox1.Items[i]);
  n:=ListBox2.Items.Count;
  WriteLn(f,n);
  for i:=0 to n-1 do WriteLn(f,ListBox2.Items[i]);
  CloseFile(f);
//...
//odczyt z tego pliku do dwóch ListBoxów
  AssignFile(f,'nazwa_pliku.txt');
  Reset(f);
  ListBox1.Clear;
  ReadLn(f,n);
  for i:=0 to n-1 do
  begin
    ReadLn(f,s);
    ListBox1.Items.Add(s);
  end;
  ListBox2.Clear;
  ReadLn(f,n);
  for i:=0 to n-1 do
  begin
    ReadLn(f,s);
    ListBox2.Items.Add(s);
  end;
  CloseFile(f);

Zapis/odczyt pojedynczego ListBoxa możesz sobie przygotować w postaci osobnych procedur.

FR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0
lankusiek napisał(a)

Przecież ci olesio napisał wszystko pięknie:) teraz wystarczy trochę pomyśleć lub poszukać w google

Wiem mój błąd. Szukałem całe google i nie znalazłem. Były posty bez odpowiedzi albo kody w których dla początkującego nie wiadomo o co chodzi. Nie wiedziałem że takie coś można zapisać za pomocą 10 krótkich linijek gdzie wszystko jest jasne. Ludzie dawali kody i tworzyli jakieś pętle z kosmosu które i tak nie działały.

Dzięki bardzo za pomoc i miłego dnia życzę!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.