![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Друзья!
Моя программа использует динамическое создание 2-мерного массива TImage. Пытаюсь оформить универсальный обработчик OnMouseDown для созданных Image так, чтобы событие для Image[1,1] отличалось от события с image[1,2]. можете посоветовать грамотный способ для этой организации? |
|
#2
|
|||
|
|||
|
Выводить как одну картинку, по координатам щелчка выяснять по какой из картинок щелкнули и делать соотв. действия.
Пусть у нас двумерный массив картинок размером 20x20. сам массив - 10х10 . Тогда: Код:
procedure TForm1.MouseDown(Sender : TObject; X, Y : Integer); var I, J : Integer; begin I := (X div 20) + 1; // +1 - если массив с 1, если с 0 - то убрать. J := (Y div 20); // теперь по координатам картинки в массиве можно что-то делать. end; |
|
#3
|
||||
|
||||
|
к сожалению, данный вариант не подходит. дабы при щелчке на image X и Y объявляются как координаты места на картинке, на которую мы нажали. следовательно, в данном случае I = J = 0 {X,Y<20}.
Я пытаюсь организовать по массиву Img[a,b].. и где нибудь в обработчике нужен анализатор этих пересенных. Есть идея в стороннем обработчике задать их зарание, перед выполнением OnMousDown, но при данном случае, могу сталкнуться с такой ситуацией, что задаем одну картинку, а можем нажать на другую. Последний раз редактировалось Daemonghost, 21.11.2010 в 09:46. |
|
#4
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
ExtCtrls,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FImage: array [0..4, 0..4] of TImage;
procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
AImage: TImage;
i, j: Integer;
begin
for i:=0 to 3 do
for j:=0 to 3 do
begin
AImage:=TImage.Create(Self);
AImage.Parent:=Self;
AImage.Width:=20;
AImage.Height:=20;
AImage.Left:=i*AImage.Width;
AImage.Top:=j*AImage.Height;
AImage.OnMouseDown:=ImageMouseDown;
// сохраним индексы массива картинки
AImage.Tag:=MakeWord(i, j);
AImage.Canvas.Rectangle(0, 0, AImage.Width, AImage.Height);
FImage[i, j]:=AImage;
end;
end;
procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
AImage: TImage;
i, j: Integer;
begin
AImage:=TImage(Sender);
// i, j - содержат индексы картинки в массиве
i:=HIBYTE(AImage.Tag);
j:=LOBYTE(AImage.Tag);
Caption:='i, j = '+IntToStr(i)+', '+IntToStr(j);
end;
end. |
|
#5
|
||||
|
||||
|
очень благодарен! тему можно закрыть!
|