Да я было тоже так сделал, но дело в том, что при генерации изображения, оно должно двигаться до конца формы, если вешать на таймер, то либо вешать весь массив (что таки нежелательно, что-ж с ним будет тогда), либо как-то отдельно вешать именно эти события... но как??
А нет, все, теперь нормально! Просто у меня написано было - Img[i,j].Left:= LEFT+1; Забыл после присвоения Img массив объявить... просто первый раз с массивами объектов работаю... Что-то тупанул немного... На таймер применил внесенные изменения... Спасибо за ответ!
Возник ещё вопрос в догонку... Как привязать обработчик события Click? Вот движется этот Имейдж и если кликнуть на него, допустим появляется MessageDlg к примеру? Слышал что-то про свойство Tag, я как-то его использовал, но опять же со статическими элементами.
Нарыл в сети примеры и написал вот так:
Код:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Timer2: TTimer;
procedure Button1Click(Sender: TObject);
procedure OnMyClick(Sender: TObject);
//procedure Timer2Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
const N= 1;
var
Form1: TForm1;
Img: array[1..N] of TImage;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.OnMyClick(Sender: TObject);
var k: Integer;
begin
k := (Sender as TImage).Tag;
case k of
0..5: Close;
6..9: ShowMessage('Тэг кэлемента: '+IntToStr(k));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i := 1 to 1 do
begin
Img[i] := TImage.Create(Self);
Img[i].Parent := Self;
Img[i].Tag := i;
Img[i].Left := i*778;
Img[i].Top := 80;
Img[i].Width := 60;
Img[i].Height := 60;
Img[i].Left := Img[i].Left - 1;
Img[i].Top := Img[i].Top - 1;
Img[i].Picture.LoadFromFile(IntToStr(i)+'.bmp');
Img[i].OnClick := OnMyClick;
Timer2.Enabled:= true;
end;
end;
{procedure TForm1.Timer2Timer(Sender: TObject);
var i,j: Integer;
begin
for i := 1 to 1 do
begin
for j := 1 to 1 do
begin
Img[i,j].OnClick := ButtonClick;
end;
end;
end;}
end.
Таймер 2 пока приглушил, соответственно циклов движения имейджей там нет (и в таймере код не тот) но сейчас не про это. Компилятор орет типо - unit1.pas(66,40) Error: Wrong number of parameters specified for call to "OnMyClick" на строку Img[i].OnClick := OnMyClick; , что не так, понять не могу??
Вообще БСОД какойто?! В Delphi XE3 все работает, в Лазарусе нет... всегда он мне не нравился...