Witam. Mam dwa problemy:
Piszę program, do tworzenia map. Napotkałem probelm z odczytem zapisanej mapy. Zapisują i odzczytuje ją strumieniami. Zaprezentuję deklarację tablic, które zapisuje oraz procedury odczytu i zapisu mapy:
// te dwie tablice właśnie zapisuje
// podczas tworzenie mapy tablicy Mapa przydzielana jest pamieć i są do niej wpisywane wartości
Mapa : array of array of Integer ;
Informacje : array [0..4] of Integer ;
// tą procką zapsiuje mapę:
procedure TGlowna.Zapiszmap1Click(Sender: TObject);
var
FileStream : TFileStream ;
begin
if SaveDialog.Execute then
begin
Informacje[0] := szer_kafelka ;
Informacje[1] := wys_kafelka ;
Informacje[2] := szer_mapy ;
Informacje[3] := wys_mapy ;
if not FileExists(SaveDialog.FileName) then
FileStream := TFileStream.Create(SaveDialog.FileName , fmCreate)
else FileStream := TFileStream.Create(SaveDialog.FileName , fmOpenWrite) ;
FileStream.WriteBuffer(Informacje, SizeOf(Informacje)) ;
FileStream.Seek(SizeOf(Mapa) , soFromEnd) ;
FileStream.Free ;
end ;
end;
// a tą procedurą odczytuje:
// co niepotrzebne to pominąłem
procedure TGlowna.Otwrzmap1Click(Sender: TObject);
var
FileStream : TFileStream ;
begin
if OpenDialog.Execute then
begin
FileStream := TFileStream.Create(OpenDialog.FileName , fmOpenRead);
FileStream.ReadBuffer(Informacje, SizeOf(Informacje));
SetLength(Mapa , (Informacje[2] div Informacje[0]), (Informacje[3]div Informacje[1])) ;
FileStream.ReadBuffer(Mapa, SizeOf(Mapa));
end;
end ;
Jak odczytuje to wywala mi błąd : "Stream read error". Opisze może po kolei co ma się stać z tablicą Mapa, więc tak: najpierw wczytuje tablicę Informacje, potem na podstawie danych z tej tablicy przydzielamy pamięć dla naszej tablicy Mapa, a potem wczytujemy jej zawartość z pliku. Wiecie może co jest nie tak? Jak odczytać tą drugą tablicę(Mapa), bo tablicę Informacje odczytuje poprawnie ?
Oto drugie pytanko:
[dopisane] to już nieaktualne, pomóżcie z tym wyżej :-)
Piszę także sapera. Plansza zbudowana jest z dynamicznie stworzonych TSpeedButton'ów. A problem mam taki, że nie wiem jak sprawdzić, który prycisk został wciśnięty, żeby sprawdzić, czy nie mam on wartości 0(jeżeli tak, to odkrywane są pola na około). Próbowałem obliczać to na podstawie położenia myszki(OnMouseMove panelu, na którym są pola) szybko się skapowałem, że przecież te pola zasłaniają ów panel :|. Macie jakiś pomysł, jak to sprawdzać? Może coś z Senderem? Sam już nie wiem ;p. Dodam tylko, że pola mam w tablicy dwuwymiarowej:
Pola : array of array of TSpeedButton ;
Dzięki za wszelkie odpowiedzi, pozdro...