![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() очень благодарен! тему можно закрыть!
а есть ли способ задампить жизнь и дизассемблировать вредную привычку - программирование?... если - да, то стоит изучать ассемблер... |