Показать сообщение отдельно
  #3  
Старый 24.10.2013, 20:41
Andrey_Ryzhov Andrey_Ryzhov вне форума
Прохожий
 
Регистрация: 02.09.2013
Адрес: Новгородская обл. пгт Пролетарий
Сообщения: 10
Версия Delphi: Lazarus, ECDXE3
Репутация: 10
По умолчанию

Да я было тоже так сделал, но дело в том, что при генерации изображения, оно должно двигаться до конца формы, если вешать на таймер, то либо вешать весь массив (что таки нежелательно, что-ж с ним будет тогда), либо как-то отдельно вешать именно эти события... но как??

А нет, все, теперь нормально! Просто у меня написано было - 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 все работает, в Лазарусе нет... всегда он мне не нравился...
Ответить с цитированием