Prosty program nie działa

Prosty program nie działa
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

bo TImage.Create(); Ma jeden parametr, którego nie podajesz. Ja to bym zrobił tak

Kopiuj
function TForm1.AddBlock(dTop, dLeft: Integer): Integer;
begin
  SetLength(Obrazki, High(Obrazki) + 2);  //Rozszerzenie Tablicy o 1

  Obrazki[High(Obrazki)] := TImage.Create(Self);  //Utworzenie Obrazka
  with Obrazki[High(Obrazki)) do
    begin
      Width := 40;
      Height := 40;
      Top := dTop;
      Left := dLeft;
      Name := 'Block' + IntToStr(High(Obrazki));
      Result := High(Obrazki);     //Zwrócenie numeru obrazka.
    end;
end;

Takim sposobem funkcja utworzy TImage, i zwróci numer ostatniego. Nie rozumiem czemu chcesz mieć statyczną tablicę.

MateuszS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 311
0

Bo okazało się że po 1. musi to być tablica dwuwymiarowa, po 2. lepiej ogarniam wtedy kod, jeśli zobaczę że można tu użyć dynamicznej to tak zrobię, nie chcę od razu rzucać się z motyką na Klingonów.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1

"Not enough actual parameters" oznacza, że funkcja czy procedura ma więcej parametrów niż podałeś w kodzie; Konstruktor klasy TImage potrzebuje jako argumentu kontrolki rodzicielskiej;

@TomRiddle podał jako argument Self, które w kodzie modułu oznacza nazwę formularza; Równie dobrze możesz tam podać nazwę formularza na sztywno:

Kopiuj
PicturesArr[High(PicturesArr)] := TImage.Create(MainForm);

Pod warunkiem, że MainForm to nazwa formularza;

TomRiddle napisał(a)

Możesz ją dynamicznie tworzyć.

Można owszem, ale nie w każdym przypadku należy tak zrobić; Jeżeli będzie miał np. planszę o stałych rozmiarach, to nie ma potrzeby tworzenia macierzy dynamicznej, wystarczy statyczna; Ale w każdym innym przypadku warto ich używać;

Musisz pamiętać, że jak jakiś klocek usuwasz (wizualnie), to musisz także usunąć go z pamięci; Jeżeli masz statyczną macierz to musisz tylko zwolnić pamięć metodą Free, ale jak masz dynamiczną, to nie dość, że trzeba zwolnić pamięć to jeszcze usunąć pole w macierzy po tym klocku (a usuwanie realizuje się przesuwając każdy kolejny element w macierzy o jeden indeks w dół, po czym zmniejsza się długość macierzy o jeden); Możesz mieć z tym kłopot, ale tak jak pisałem wcześniej - jeżeli znasz rozmiar planszy i zawsze on będzie taki sam - wykorzystaj macierz statyczną (o stałym rozmiarze);

Więcej nie ma co pisać bo nie wiem dokładnie co robisz;

MateuszS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 311
0

Hmm why kompilator mi się buntuje?

Kopiuj
 idx : integer;
...
 idx := ((Blocks[ActiveBlocks[f_n]].Left - 223) / 50) + 1;

gdzie Blocks[ActiveBlocks[f_n]].Left - 223 jest zawsze podzielne przez 50. Np Blocks[ActiveBlocks[f_n]].Left wynosi 323, 373 itd.

Kompilator wywala 'Niekompatybilne typy Integer i Extended'

// ok dzięki chłopacy poniżej, w innych językach tego nie ma i dlatego się zdziwiłem, zawsze jest zaokraglane od razu jezeli operujemy na int

MateuszS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 311
0

A jest w Borland Delphi 7 opcja podejrzenia np. tablicy w trakcie działania programu? Jest coś podobnego w Visualu, np. chcę sprawdzić jakie wartości mam w tablicy ale nie chcę jej nigdzie wyświetlać, chcę widzieć jak się zmienia itp.

Szarp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
0

Ctrl+Alt+W: Watch List
Ctrl+F5: Add Watch...
Resztę masz w menu Run.

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.