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