Problem z modułem Graph

0

Witam,
mam projekt (komiwojażer ACO) i wyświetlam w nim trasę z punktami w używając modułu graph, ale wyświetleniu i zamknięciu okna gdy ma się ponownie pojawić menu zamiast normalnych tekstów wyświetla się wszędzie ostatnio użyty napis. Sam już nie wiem gdzie jest problem więc mam nadzieję że ktoś pomoże. Środowisko to Lazarus.

0

Może tak pokażesz kod..? Czy mamy z gwiazd wróżyć..?

0

Zwykła skleroza, nie chciałbym publicznie całości udostępniać bo prowadzący znajdzie jeszcze i posądzi o plagiat, wrzucam fragmenty kodu w którzy używam graph

procedure VgaOn;
var
  driver, mode: SmallInt;
begin
  driver:= vga;
  mode:= vgahi;
  InitGraph(driver, mode, 'e:\bgi');
end;



{ MODUL GRAPH }
  VgaOn;
  for i:= 1 to liczba_miast do
  begin
    SetColor(10);
    { RYSOWANIE }
    Circle(t_m[i].x*50, t_m[i].y*50, 12);
    for j:= 1 to liczba_miast do
      if m_s[i,j].krawedz= 1 then
        Line(t_m[i].x*50, t_m[i].y*50, t_m[j].x*50, t_m[j].y*50);
    SetColor(4);
    SetTextStyle(8,horizdir,3);
    OutTextXY(t_m[i].x*50-15, t_m[i].y*50-30, t_m[i].nazwa);
  end;

  { DROGA }
  SetTextStyle(0,horizdir,1);
  SetColor(10);
  Rectangle(300,430,635,475);
  OutTextXY(310,450,'Wcisnij dowolny klawisz aby rozpoczac..');
  ReadKey;
  SetColor(16);
  SetLineStyle(3,0,3);
  for i:= 1 to liczba_miast do
  begin
    delay(1000);
    Line(t_m[kol[i]].x*50, t_m[kol[i]].y*50, t_m[kol[i+1]].x*50, t_m[kol[i+1]].y*50);
  end;
  SetFillStyle(SolidFill,black);
  Bar(301,431,634,474);
  SetColor(16);
  OutTextXY(310,450,'Wcisnij dowolny klawisz aby zakonczyc..');
  ClrScr;
  writeln('Wcisnij dowolny klawisz aby zakonczyc..');
  ReadKey;
  CloseGraph;
end;

w folderze bgi mam vga256.bgi, ale bez ścieżki identycznie działa.

Screeny które pokazują problem

  1. Wszystko dobrze po uruchomieniu http://i.imgur.com/v1nGCbn.png
  2. Graph http://i.imgur.com/KgsRVJq.png
  3. Menu które powinno wyglądać jak na 1 screenie, takie jest po zakończeniu grapha http://i.imgur.com/UmZOksZ.png
1

Dziś nie mam zbytnio głowy do kodzenia po nieprzespanej nocy, jednak mam kilka pytań;

Trochę dziwi mnie końcówka podanego przez Ciebie kodu:

  SetFillStyle(SolidFill,black);
  Bar(301,431,634,474);
  SetColor(16);
  OutTextXY(310,450,'Wcisnij dowolny klawisz aby zakonczyc..');
  ClrScr;
  writeln('Wcisnij dowolny klawisz aby zakonczyc..');
  ReadKey;
  CloseGraph;
end;

Nie wiem, czy ten kod jest w jakiejś pętli, ale sądząc po tym, że po narysowaniu całości oczekujesz na wciśnięcie klawisza i jeśli to nastąpi - powrót do menu, to dlaczego na końcu zamykasz aktywny tryb graficzny?

Co jeszcze - podczas inicjalizowania trybu graficznego powinieneś sprawdzać czy operacja się powiodła - taka mała wskazówka;

A tak poza tym to podziel sobie kod na mniejsze procedury by zwiększyć czytelność kodu; No i oczywiście jeśli korzystasz z Lazarusa, to prześledź kod pod debugerem - linia po linii co się dzieje po wciśnięciu klawisza, a będziesz wiedział czy pętle działają prawidłowo;

Poza tym - ta część kodu:

OutTextXY(310,450,'Wcisnij dowolny klawisz aby zakonczyc..');
ClrScr;
writeln('Wcisnij dowolny klawisz aby zakonczyc..');
ReadKey;

sensu nie ma, bo najpierw wyświetlasz napis Wcisnij dowolny klawisz aby zakonczyc.. i od razu czyścisz ekran nie czekając na klawisz, następnie wyświetlasz kolejny napis Wcisnij dowolny klawisz aby zakonczyc.. i wtedy czekasz na klawisz; Więc albo przed ClrScr dodaj ReadKey żeby faktycznie poczekać na klawisz, albo usuń zbędne instrukcje; No i dziwi mnie to, że wywołujesz WriteLn w trybie graficznym, zamiast OutTextXY;

Na chwilę obecną nie znam dokładnej przyczyny błędu (choć podejżewam, że CloseGraph psuje program), ale jak zastosujesz się do powyższych wskazówek (szczególnie do zdebugowania końcówki podanego kodu i kilka instrukcji dalej) to jest duża szansa, że znajdziesz przyczynę błędu.

0

Dzięki za odpowiedź. Siedziałem i kombinowałem i nic nadal się sypie to i jest to wina grapha. Olałem już to i normalnie na formie zrobiłem w o wiele krótszym czasie to rysowanie i w dodatku wszystko nie dość że działa bardzo dobrze to jeszcze wygląda lepiej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1