Rozumiem. Bo przykład najlepiej przemawia do czlowieka. Kiedy ja zaczynałem coś tam modzić w Delphi. To na google wiele ciekawych stron z tym nie było. A nawet same 4p jeszcze raczkowało, bo było zdaje się tutaj tylko FAQ. A calość hostowana na chyba of.pl.
A dowiedział byś się o wiele więcej przez nawet 5 godzin. Gdybyś tylko chciał. Na pewno jak działaja: EOF
, Write
, czy zasady stosowanie begin
. A jaka była by Twoja satysfakcja. Że sam dałeś radę :) Ja oczywiście lubię tutaj pomóc, kiedy mogę i potrafię. Ale na prawdę wiele razy człowiek powiela te same odpowiedzi, a ciężko sobie przygotować szablon odpowiedzi. No chyba, że zawsze napiszemy RTMF!
albo użyj Google
. I to nie będą słowa bez pokrycia. Tylko życiowe doświadczenie :)
Co do zapisu prawidlowej odpowiedzi. To wystarczy dodatkowe pole rekordu typu Byte
i w niej zapisany jej numer. Odczyt to też pikuś. Po prostu pętla taka, jaką stosowałeś wcześniej. Tylko należalo by albo użyć tablicy dynamicznej i zwiększąć ją przed odczytem kolejnego rekordu. Albo zapisać numer rekordów w bazie i odczytać go na początku. Albo najbardziej wedle mnie elegancko, to jeśli już i tak kodzisz pod VCL, to skorzystać z dobrodziejstw inwentarza. I w pętli while not EOF... do begin ...
, po prostu dodawać rekordy jako dane do na przykład TListBox
.
Czyli jakoś tak, na szybko klepane. Bo nie chce się mi teraz zagłębiać w sposoby przekazywania recordów jako TObject
i prawidłową obslugę tego.
//...
type
TPytania = record
Pyt1 : string[120];
A1 : string[120];
B1 : string[120];
C1 : string[120];
end;
TPytObj = class(TObject)
Pyt1 : string[120];
A1 : string[120];
B1 : string[120];
C1 : string[120];
end;
var
Nazwa : string;
PytObj : TPytObj;
PytaniaPlik : file of TPytania;
TablicaPytan1 : array[1..6] of TPytania;
procedure TForm1.Button1Click(Sender : TObject);
var
I : integer;
begin
Nazwa := Edit1.Text;
AssignFile(PytaniaPlik, 'D:\' + Nazwa + '.bin');
ReWrite(PytaniaPlik);
for I := Low(TablicaPytan1) to High(TablicaPytan1) do
begin
TablicaPytan1[I].pyt1 := 'Pytanie numer ' + IntToStr(I) + ' = ' + Edit2.Text;
TablicaPytan1[I].A1 := Edit3.Text;
TablicaPytan1[I].B1 := Edit4.Text;
TablicaPytan1[I].C1 := Edit5.Text;
PytObj := TPytObj.Create;
with PytObj do
begin
pyt1 := TablicaPytan1[I].Pyt1;
A1 := TablicaPytan1[I].A1;
B1 := TablicaPytan1[I].B1;
C1 := TablicaPytan1[I].C1;
end;
ListBox1.Items.AddObject(TablicaPytan1[I].Pyt1, PytObj);
Write(PytaniaPlik, TablicaPytan1[I]);
end;
CloseFile(PytaniaPlik);
end;
procedure TForm1.ListBox1DblClick(Sender : TObject);
var
Idx : integer;
begin
Idx := ListBox1.ItemIndex;
if Idx > -1 then
begin
PytObj := TPytObj(ListBox1.Items.Objects[Idx]);
if PytObj <> nil then
begin
with PytObj do
begin
ShowMessage(Pyt1);
end;
end;
end;
end;
//...
Albo tak jak pisze dragon. Rozważ sobie plik typu INI. Masz do jego obsługi proste funkcje WinAPI lub klasę TIniFile
. Banalne w obsludze jest to i to. Tylko sobie na prawdę pogooglować i popatrzeć co i jak. I nie można spocząć na laurach, pisząć że nie wiem o co chodzi w klasach. Bez nich programowanie obiektowe nie ma sensu.
A i czytałem Twój usunięty post i nic nie rozumiem z niego. Coś tam piszesz, że odwołujesz się do elementu tablicy [2]
i dziwisz się, że podaje Tobie dane od niego, a nie od tego z pętli. Ty chyba nie masz pojęcia o co chodzi w pętlach i do czego słuzą tablice. Ale chyba zorientowałeś się, stąd usunięcie.
Natomiast tablica i tak jest tutaj zupełnie zbędna. Bo robiąc sobie edytor pytań do późniejszego dopisania ich do Twojego pliku "bazy", można wszystko sobie trzymać na liście takiej jak TListBox
, dodając je jako obiekty i odwołujac do nich. Tak, jak to pokazałem powyżej. Dodawanie nowego elementu i jego usuwanie ewentualnie to też banał. Później wszystko sobie tylko w pętli od 0
do TwojListBox.Items.Count - 1
zapisujesz do pliku i tyle. Ogółnie banały, a więc bez poznania podstaw samodzielnie poprzez lekturę komendium na 4p od początku do końca się nie obędzie. Bo bez podstaw będziesz błądził po omacku i zadawał ze 1638 pytań, bez końca.
A nie o to chodzi przecież żeby pytać, tylko umieć sobie poradzić samodzielnie. Wyobraź sobie, że dostałeś takie zlecenie pracując w firmie, a tutaj dedaline to godzina. Nie ma akurat netu, bo padł. Z biura wyjść nie możesz. Jedynie do czego masz dostęp do Delphi i dołączony do IDE help. I trzeba zkodować albo nie wiem, dyscyplinarka. Wiem, przykład może i ekstremalny, może nie myślisz też o pracy jako programista w przyszłośći. Ale sam wspominasz w jednym ze swoich postów, że zależy Tobie na programowaniu. No to pewnie w przyszlości nie tylko hobbystycznie.
A Dragon zauważył niestety słusznie, że już za dużo dostałeś gotowców. Także na tym postaram się poprzestać. Bo pewnie Ciebie tylko bardziej rozleniwiam. I myślisz sobie coś w stylu "e jakiś frajer daje mi tutaj gotowe kody, to ja trochę pościemniam, że więcej się tutaj nauczyłem dzięki kodom od niego, a i tak zaraz mi naklepie cały program za mnie, no i kij mu w oko, jak tak się dał wciągnąć w pomaganie mi leniowi" itd ;)