problem z deklaracją procedury

0

Witam,

ponownie napotkałem problem, którego nie jestem w stanie rozwiązać. Postanowiłem zrobić ambitny program do grania w kółko i krzyżyk :P

Mianowicie mam kilka obrazków, które symulują mi małą kwadratową planszę 3x3. Po naciśnięciu na każdy z obrazków program daje znaczek na polu, jeżeli jest pusty etc. tutaj wszystko działa dobrze. problemem jest, że każdy przycisk ma te 10 linijek kodu tworzonych za pomocą crt+c, crt+v i zmieniamy 5 znaków. Chciałbym zrobić prostą procedurę, która będzie uniwersalna

pytanie brzmi jak mogę przekazać obrazek do procedury i czy w ogóle jest to wykonalne?

tzn chciałbym móc wywołać procedure w np taki sposób: nazwa (x,y,Image1);
a w procedurze kod

obraz.Picture.LoadFromFile('kolko.jpg');

załaduje do image1 obraz kolko.jpg

Nie wiem czy napisałem to zrozumiale, ale mam nadzieję, że się domyślicie o co mi chodzi i pomożecie coś.

pozdrawiam
Kszk

2

Możesz podpiąć 1 zdarzenie do wielu przycisków. W tym celu zrób 1 zdarzenie dla przycisku normalnie i w pozostałych nie generuj nowego zdarzenia dla OnClick tylko wybierz z listy to wcześniejsze.
W ten sposób każdy przycisk będzie używał tej procedury. Aby odróżnić przycisk:

 
procedure TForm1.Button1Click(Sender: TObject);
var
  btn: TButton;
begin
  btn:=(Sender as TButton);
  ShowMessage('OnClick przycisku: '+btn.Name)
end;
0

pomogło - przerobienie z przycisku na obrazek nie okazało się trudne. dzięki :)

0
Koszkaty napisał(a)

tzn chciałbym móc wywołać procedure w np taki sposób: nazwa (x,y,Image1);

No więc deklaracja takiej procedury powinna wyglądać np. tak:

procedure Nazwa(const AX, AY: Integer; AImage: TImage);
begin
  AImage.Picture.LoadFromFile('kolko.jpg');
  { lub }
  AImage.Picture.LoadFromFile('krzyzyk.jpg');
end;

ewentualnie dodać jeszcze sprawdzenie czy komponent został już wcześniej kliknięty czy nie; Równie dobrze możesz napisać jedno zdarzenie OnClick:

procedure TForm1.Image0Click(Sender: TObject);
begin
  // wykorzystanie Sender przez rzutowanie
  TImage(Sender).Picture.LoadFromFile('kolko.jpg');
  // lub przez operator as
  (Sender as TImage).Picture.LoadFromFile('kolko.jpg');
end;

i podpiąć to zdarzenie pod wszystkie dziewięć kontrolek TImage; Do tego trzeba dodać zabezpieczenie przez kliknięciem drugi raz tej samej kontrolki, rozpoznanie czy ma być wstawione kółko czy krzyżyk oraz procedurę/funkcję sprawdzającą czy już koniec gry czy jeszcze nie.

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