Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать над каким компонентом находится курсор, сразу отмечу компоненты создаются динами 
:(
    Опции темы
Vardoulacha
Дата 28.3.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Вообщем тут такой вопрос: у меня при запуске программы динамически создаются компоненты (TImage) с определенными картинками (например 5 компонентов с картинками img1.bmp, img2.bmp, и т.д. до img5.bmp всего 5 компонентов с 5-ю разными картинками) и вот задача в том чтобы при наведении на каждый Image он показал имя этой картинки (например в Label)

пример:
1) наводим курсор на изображение первой картинки
2) как-то узнать над каким компонентом мышка и узнать какое название картинки
3) отобразить это имя в Label

я так понимаю что это наверное нужно делать через поиск компонентов и их полный перебор со сравнением их координат с координатами нахождения курсора (но это я так понимаю не совсем оптимальный вариант может можно это сделать как то по-другому)

P.S. если я неправильно выразился попробую по-другому smile
1) есть 5 компонентов Image (создаются динамически) у каждого свое изображение загружено
2) как для каждой картинки отобразить например hint при этом для каждой Image текст хинта свой
PM MAIL   Вверх
Yanis
Дата 28.3.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



При создании компонента назначай им свой обработчик OnMouseMove в ктором определяй от какого Image идёт сообщение.

Цитата(Vardoulacha @ 28.3.2006, 12:04 Найти цитируемый пост)
отобразить это имя в Label
Код

procedure ... (Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Caption := (Sender as TImage).Name;
end;


P. S. Если ничего не понял(а) из написанного, то я больше чем уверен, что тебе сейчас преподнесут весь код на блюдечке.

Это сообщение отредактировал(а) Yanis - 28.3.2006, 12:18


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 28.3.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Vardoulacha @ 28.3.2006, 12:04 Найти цитируемый пост)
1) наводим курсор на изображение первой картинки
2) как-то узнать над каким компонентом мышка и узнать какое название картинки
3) отобразить это имя в Label


1. как сказал Yanis.
2. Поэксперементируй с функциями:
- ControlAtPos
- FindVCLWindow
- GetCaptureControl


Цитата(Vardoulacha @ 28.3.2006, 12:04 Найти цитируемый пост)
1) есть 5 компонентов Image (создаются динамически) у каждого свое изображение загружено
2) как для каждой картинки отобразить например hint при этом для каждой Image текст хинта свой


Для хинта тебе не обязательно искать сам контрол, достаточно при создании указать текст хинта и property ShowHint выставить в True.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Yanis
Дата 28.3.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Vardoulacha @ 28.3.2006, 12:04 Найти цитируемый пост)
Как узнать над каким компонентом находится курсор, сразу отмечу компоненты создаются динами

Ещё забыл... У глобальной переменной Mouse есть свойство Capture. Про него можно найти в справке.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Vardoulacha
Дата 28.3.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Yanis @ 28.3.2006, 12:16)
При создании компонента назначай им свой обработчик OnMouseMove в ктором определяй от какого Image идёт сообщение.

Цитата(Vardoulacha @  28.3.2006,  12:04 Найти цитируемый пост)
отобразить это имя в Label
Код

procedure ... (Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Caption := (Sender as TImage).Name;
end;


P. S. Если ничего не понял(а) из написанного, то я больше чем уверен, что тебе сейчас преподнесут весь код на блюдечке.

я тоже так делал но вот в чем лажа

Код

procedure MouseOnComponent(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  MainForm.Label1.Caption:=(Sender as TImage).Name;
end;


Код

procedure CreateImage(X, Y: Integer; F: String);
var
  Img: TJImage;
begin
  Img:=TJImage.Create(MainForm);
  Img.Parent:=MainForm;
  Img.Left:=x*30;
  Img.Top:=Y*30;
  Img.Picture.LoadFromFile(F);
  Img.Stretch:=True;
  Img.OnMouseEnter:=MouseOnComponent(Img, ssShift, 0, 0);
end;


как самую верхнюю процедуру назначить каждой компоненте? или я чего не так пишу
Добавлено @ 13:46
Цитата(Rennigth @ 28.3.2006, 12:41)
2. Поэксперементируй с функциями:
  - ControlAtPos
  - FindVCLWindow
  - GetCaptureControl
3. Для хинта тебе не обязательно искать сам контрол, достаточно при создании указать текст хинта и property ShowHint выставить в True.

2. ага уже экспериментировал вот только вот:

Код

Delphi syntax:
function ControlAtPos(const Pos: TPoint; AllowDisabled: Boolean, AllowWinControls:Boolean=False): TControl;


эта функция что возвращает вот это я не понял, то есть она возвращает хендл найденного компонента, я в этом новичек как теперь этот хендл использовать???

Код

Delphi syntax:
function FindVCLWindow(const Pos: TPoint): TWinControl;


это видно должна отобразить хендл компоненты в позиции, координаты позиции можно указать GetCursorPos. Хм и опять встает вопрос а что дальше???

Код

Delphi syntax:
function GetCaptureControl: TControl;


а вот это я вообще не понял что делает??? smile

3. хм в том то и прикол что хинт у меня для каждого компонента свой и тоже может динамически меняться smile

Это сообщение отредактировал(а) Vardoulacha - 28.3.2006, 13:48
PM MAIL   Вверх
Rennigth
Дата 28.3.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Vardoulacha @ 28.3.2006, 13:39 Найти цитируемый пост)
как самую верхнюю процедуру назначить каждой компоненте? или я чего не так


Код

 TMainForm = class(TForm)
  ...  
  private
    procedure MouseMoveEvent(Sender: TObject; Shift: TShiftState; X, 
Y: Integer);
  ...
  end;


//...
  Img.OnMouseMove:=MouseMoveEvent;


Для MouseEnter придеться ловить сообщения CM_MouseEnter;
Добавлено @ 13:53
Цитата(Yanis @ 28.3.2006, 12:51 Найти цитируемый пост)
- ControlAtPos
- FindVCLWindow
- GetCaptureControl


Они вреде должны не Handle возвращать а TControl, с ним потом и работать надо если он существует(обязательно проверяй на Assigned, <> nil).

Например:
Код

var
  lControl: TControl;
begin
  lControl := ControlAtPos(Point(X, Y), True, True);
  if Assigned(lControl) then
    Application.MainForm.Capotion :=  lControl.Name;
end;

end;



Это сообщение отредактировал(а) Rennigth - 28.3.2006, 13:55


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Yanis
Дата 28.3.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Rennigth @ 28.3.2006, 13:49)
Добавлено @ 13:53
Цитата(Yanis @  28.3.2006,  12:51 Найти цитируемый пост)
- ControlAtPos
- FindVCLWindow
- GetCaptureControl


Они вреде должны не Handle возвращать а TControl, с ним потом и работать надо если он существует(обязательно проверяй на Assigned, <> nil).

Я такого не писал. Это не моя цитата.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 28.3.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Yanis @ 28.3.2006, 14:02 Найти цитируемый пост)
Я такого не писал. Это не моя цитата.

хм, быстрая цитата как-то не правильно отработала. не серчай.




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Tror
Дата 28.3.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



- ControlAtPos
- FindVCLWindow
- GetCaptureControl

возврвщают TControl или TWinControl
ну а дальше все как в примере
Yanis, только вместо Sender хендл компонента
Код

Label1.Caption := (FindVCLWindow(p) as TImage).Hint;

--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Yanis
Дата 28.3.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Tror @ 28.3.2006, 14:05 Найти цитируемый пост)
Yanis, только вместо Sender хендл компонента

Ты действительно считаешь, что FindVCLWindow возвращает хендл?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Tror
Дата 28.3.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



Цитата

FindVCLWindow
Returns the windowed control, if any, at the specified location.

оговорился я сорри smile
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Vardoulacha
Дата 29.3.2006, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



щас буду пробовать предложенные варианты, а вообще меня седня с утра как громом поразило smile при динамическом создании компонент я же им указываю данные о положении smile дык кто мне мешает эти данные хранить в каком-нить массиве и затем при перемещении курсора сравнивать положение курсора и тех координат, что в массиве, если курсор вдруг попал в зону действия какого-либо Image то передать в какую-либо переменную его имя взятое из того же массива

вообщем если ваши варианты не подойдут мне попытаюсь сделать через БД-координат каждого создаваемого компонента
PM MAIL   Вверх
Vardoulacha
Дата 29.3.2006, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Rennigth @ 28.3.2006, 13:49)
Код

 TMainForm = class(TForm)
  ...  
  private
    procedure MouseMoveEvent(Sender: TObject; Shift: TShiftState; X, 
Y: Integer);
  ...
  end;


//...
  Img.OnMouseMove:=MouseMoveEvent;


вообщем вроде как работает: вот мой код
Код

  private
    { Private declarations }
    procedure MouseMoveEvent(Sender: TObject; Shift: TShiftState; X, Y: Integer);

...

procedure TMainForm.MouseMoveEvent(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  lControl: TControl;
begin
  lControl := ControlAtPos(Point(X, Y), True, True);
  if Assigned(lControl) then
    Application.MainForm.Caption:=lControl.Name;
end;

...

procedure CreateImage(X, Y: Integer; F: String);
var
  Img: TJImage;
begin
  Img:=TJImage.Create(MainForm);
  Img.Parent:=MainForm;
  Img.Left:=x*30;
  Img.Top:=Y*30;
  Img.Picture.LoadFromFile(F);
  Img.Stretch:=True;
  Img.Hint:=IntToStr(x)+'^'+IntToStr(y);
  Img.OnMouseMove:=MainForm.MouseMoveEvent;
end;


вот только как-то странно, на форме лежит еще один компонент Image (но он создан не динамически) дык вот при наведении на него сразу отображается в капшин Image1 если навести на динамически созданные компоненты то ничего не пишет остается Image1 (и даже при наведении на Button1 или Label1 все равно остается Image1 хотя кнопка и лейбла находится за пределами Image1)

===

Добавлено @ 05:56
Цитата(Rennigth @ 28.3.2006, 13:49)
Код

var
  lControl: TControl;
begin
  lControl := ControlAtPos(Point(X, Y), True, True);
  if Assigned(lControl) then
    Application.MainForm.Capotion :=  lControl.Name;
end;

end;


этот код просто не хочет работать smile запускаю прогу и она ничего не показывает в капшин

Код

procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  lControl: TControl;
begin
  lControl := ControlAtPos(Point(X, Y), True, True);
  if Assigned(lControl) then
    Application.MainForm.Caption :=  lControl.Name;
end;


Это сообщение отредактировал(а) Vardoulacha - 29.3.2006, 06:31
PM MAIL   Вверх
Vardoulacha
Дата 29.3.2006, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Tror @ 28.3.2006, 14:05)
возврвщают TControl или TWinControl
ну а дальше все как в примере
Yanis, только вместо Sender хендл компонента
Код

Label1.Caption := (FindVCLWindow(p) as TImage).Hint;

Код

procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Label1.Caption:=(FindVCLWindow(Point(X, Y)) as TImage).Hint;
end;


ошибку пишет:
[Error] Unit1.pas(117): Incompatible types: 'TImage' and 'TWinControl'
PM MAIL   Вверх
Vardoulacha
Дата 29.3.2006, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



сейчас пробую сделать через БД (хранение координат каждой Image)
PM MAIL   Вверх
Yanis
Дата 29.3.2006, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Нацарапал пример с панелями. надеюсь аналогия станет ясна:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AddRect(cl:TColor);
    procedure EventPanelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure EventPanelClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

uses Math;

{$R *.dfm}

procedure TForm1.AddRect(cl:TColor);
  function GetPanelCount: Integer;
  begin
    for Result := 0 to Form1.ComponentCount-1 do
      if (Form1.Components[Result] is TPanel) then
        Continue
      else
        Break;
  end;
var
  p: TPanel;
begin
  p := TPanel.Create(Form1);
  with p do
    begin
      Top := RandomRange(0, Form1.Height-Height);
      Left := RandomRange(0, Form1.Width-Width);

      Color := cl;
      Parent := Form1;
      ParentBackground := False;

      OnClick := EventPanelClick;
      OnMouseMove := EventPanelMove;

      Name := 'Panel_'+IntToStr(GetPanelCount);
    end;
end;

{ TForm1 }

procedure TForm1.EventPanelClick(Sender: TObject);
begin
  ShowMessage('Color '+ColorToString((Sender as TPanel).Color));
end;

procedure TForm1.EventPanelMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Caption := (Sender as TPanel).Name+'.Color = '+ColorToString((Sender as TPanel).Color);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AddRect(clRed);
  AddRect(clGreen);
  AddRect(clBlue);
end;

end.



--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 29.3.2006, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Vardoulacha @ 29.3.2006, 07:41 Найти цитируемый пост)
сейчас пробую сделать через БД (хранение координат каждой Image)

smile
Прошу тебя как человека, не делай так...

Вот пример с эвентом на MouseMove
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
  private
    procedure MouseMoveEvent(ASender: TObject; AShift: TShiftState; X, Y: Integer);
  public
    constructor Create(AOwner: TComponent); override;
  end;

var
  Form1: TForm1;

implementation

function CreateImage(AParent: TWinControl; APos: TPoint;
  AMoveEvent: TMouseMoveEvent): TImage;

  function GetBitmap: TBitmap;
  begin
    Result := TBitmap.Create;
    Result.Height := 10;
    Result.Width := 10;
    Result.Canvas.Brush.Color := clRed;
    Result.Canvas.FillRect(Rect(0,0,10,10));
  end;

begin
  Result := TImage.Create(nil);
  Result.Parent := AParent;
  Result.Left := APos.X;
  Result.Top := APos.Y;
  Result.Picture.Bitmap.Assign(GetBitmap);
  Result.Stretch:=True;
  Result.Hint:= IntToStr(APos.X) + '^' + IntToStr(APos.X);
  Result.ShowHint := True;
  Result.OnMouseMove := AMoveEvent;
end;

{$R *.dfm}

{ TForm1 }

constructor TForm1.Create(AOwner: TComponent);
var
  i: Integer;
begin
  inherited;
  for i := 0 to 9 do
    CreateImage(Self, Point(i * 50, i * 50), MouseMoveEvent);

end;

procedure TForm1.MouseMoveEvent(ASender: TObject; AShift: TShiftState; X,
  Y: Integer);
begin
  if Assigned(ASender) then
    Caption := TControl(ASender).Hint;
end;

end.


Добавлено @ 10:00
это с ControlAtPos
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
  private
    procedure MouseMoveEvent(ASender: TObject; AShift: TShiftState; X, Y: Integer);
  public
    constructor Create(AOwner: TComponent); override;
  end;

var
  Form1: TForm1;

implementation

function CreateImage(AParent: TWinControl; APos: TPoint;
  AMoveEvent: TMouseMoveEvent): TImage;

  function GetBitmap: TBitmap;
  begin
    Result := TBitmap.Create;
    Result.Height := 10;
    Result.Width := 10;
    Result.Canvas.Brush.Color := clRed;
    Result.Canvas.FillRect(Rect(0,0,10,10));
  end;

begin
  Result := TImage.Create(nil);
  Result.Parent := AParent;
  Result.Left := APos.X;
  Result.Top := APos.Y;
  Result.Picture.Bitmap.Assign(GetBitmap);
  Result.Stretch:=True;
  Result.Hint:= IntToStr(APos.X) + '^' + IntToStr(APos.X);
  Result.ShowHint := True;
  Result.OnMouseMove := AMoveEvent;
end;

{$R *.dfm}

{ TForm1 }

constructor TForm1.Create(AOwner: TComponent);
var
  i: Integer;
begin
  inherited;
  for i := 0 to 9 do
    CreateImage(Self, Point(i * 50, i * 50), MouseMoveEvent);
  OnMouseMove := MouseMoveEvent;

end;

procedure TForm1.MouseMoveEvent(ASender: TObject; AShift: TShiftState; X,
  Y: Integer);
var
  lControl: TControl;
begin
  lControl := ControlAtPos(ScreenToClient(Mouse.CursorPos), True, True);
  if Assigned(lControl) then
    Caption := lControl.Hint;
end;
end.




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Vardoulacha
Дата 29.3.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Yanis, Rennigth

черт все ваши примеры рабочие smile логично не правда ли, седня вечером буду прикручивать к своим нуждам и завтра отпишусь какой вариант выбрал

P.S. хотел вам репутацию поднять, но оказалось что мне для этого нужно 100 постов, поэтому выскажусь так: огромное вам спасибо

P.S.S. пока топик не закрывайте я свой код отпишу
PM MAIL   Вверх
Vardoulacha
Дата 30.3.2006, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



вообщем я сделал вот так (Yanis спасибо за код, твой код мне подошел больше, Rennigth твои коды тоже рабочие но мне как то не подошли)

Код

unit Unit1;

interface

uses
    //...

type
  TMainForm = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure MouseMoveEvent(Asender: TObject; AShift: TShiftState; X, Y: Integer);
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure CreateImage(AName, AFile, AHint: String; APos: TPoint);
var
  Img: TImage;
begin
  Img:=TImage.Create(nil);
  Img.Name:=AName;
  Img.Parent:=MainForm;
  Img.Left:=APos.X*30+8;
  Img.Top:=APos.Y*30+8;
  Img.Width:=30;
  Img.Height:=30;
  Img.Picture.LoadFromFile(AFile);
  Img.Stretch:=True;
  Img.Hint:=AHint;
  Img.ShowHint:=True;
  Img.OnMouseMove:=MainForm.MouseMoveEvent;
end;

procedure TMainForm.MouseMoveEvent(Asender: TObject; AShift: TShiftState; X, Y: Integer);
begin
  if Assigned(ASender) then Label1.Caption:=TControl(ASender).Name;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i:=1 to 3
  CreateImage('img'+i, 'img'+i+'.bmp', 'Типа Хинт :)', Point(50, i+50));
end;

end.


вдруг кому еще текое же пригодится smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1150 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.