Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Курсор


Дмитрий ©   (2008-02-10 17:39:00) 

Как определить находится ли курсор мыши на требуемом мне компоненте в run-time.
Я пытался сделать следующим образом, но ничего не получается.


procedure Tform_Color_Range.ApplicationEvents1Idle(Sender: TObject;
 var Done: Boolean);
var
 lControl: TControl;
 lPnt: TPoint;
begin
 GetCursorPos(lPnt);
 lControl := ControlAtPos(ScreenToClient(lPnt), False, True);
 if Assigned(lControl) then
   Caption := lControl.Name;
end;


Игорь Шевченко   (2008-02-10 20:14:00) [1]

Семеныч   (10.02.08 20:00) [14]

Я учу хорошему - код взят почти один в один из TApplication.DoMouseIdle

source - источник знаний :)


ketmar   (2008-02-10 20:03:00) [2]

>[14] Семеныч (2008-02-10 20:00:00)
в данном случае — не страшно. это не заклинание, это считалочка. считалочке можно. %-)

---
Understanding is not required. Only obedience.


Семеныч   (2008-02-10 20:00:00) [3]

> Игорь Шевченко ©   (10.02.08 18:28) [11]

ketmar говорит: "плохому учишь"...
:o)

ПыСы
Но я надеюсь, что он все же преувеличивает...
:o)


Семеныч   (2008-02-10 18:35:00) [4]

> Dib@zol ©   (10.02.08 18:25) [9]

>  если не ошибаюсь?

Ошибаешься. Тут нужен хэндл окна панели, а не формы.

> Странно, обычно в подобных ветках не холиварят...

Тут холиварить не о чем, потому что ничего проще и лучше, чем  GetCursorPos + WindowFromPoint ты не придумаешь, как ни старайся. Поэтому спорить по делутут и правда не о чем, а если хочется поспорить из упрямства или пальцегнутия - сколько угодно, но без меня.


Дмитрий   (2008-02-10 18:33:00) [5]

Игорь Шевченко ©   (10.02.08 18:28) [11]

Большое спасибо.


Dib@zol   (2008-02-10 18:28:00) [6]

Звиняюсь, без "Т" в начале нужно.

> [8] Семеныч   (10.02.08 18:22)
И вообще, как Вы собрались получать хендл контрола с помощью этой функции?


Игорь Шевченко   (2008-02-10 18:28:00) [7]

function TForm1.ControlAtMouse: TControl;
var
 P: TPoint;
begin
 GetCursorPos(P);
 Result := FindDragTarget(P, True);
end;


пример:

unit main;

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Label1: TLabel;
   Button1: TButton;
   Button2: TButton;
   Memo1: TMemo;
   Label2: TLabel;
   ApplicationEvents1: TApplicationEvents;
   Panel1: TPanel;
   Edit2: TEdit;
   procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
 private
   function ControlAtMouse: TControl;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
var
 Control: TControl;
begin
 Control := ControlAtMouse;
 if Assigned(Control) then
   Label2.Caption := Control.Name;
end;

function TForm1.ControlAtMouse: TControl;
var
 P: TPoint;
begin
 GetCursorPos(P);
 Result := FindDragTarget(P, True);
end;

end.


Dib@zol ©   (10.02.08 18:15) [7]

Ты бы дал отдохнуть фонтану


Dib@zol   (2008-02-10 18:25:00) [8]

Tform_Color_Range.Handle, если не ошибаюсь?
Странно, обычно в подобных ветках не холиварят... Прогресс налицо :)


Семеныч   (2008-02-10 18:22:00) [9]

> Dib@zol ©   (10.02.08 18:15) [7]

А где взять все тот же неизвестный хэндл для ChildWindowFromPoint?


Dib@zol   (2008-02-10 18:15:00) [10]

> GetCursorPos + WindowFromPoint.

А может всё-таки ChildWindowFromPoint?


Dib@zol   (2008-02-10 18:11:00) [11]

> А как можно получить координаты на панелях ...

Windows.ScreenToClient и явное указание хендла контрола.


Семеныч   (2008-02-10 18:11:00) [12]

> Dib@zol ©   (10.02.08 18:05) [2]

GetWindowRect с каким хэндлом вызывать будем, если он-то как раз и неизвестен? A PtInRect тут вообще никаким боком.

GetCursorPos + WindowFromPoint.


Дмитрий   (2008-02-10 18:09:00) [13]

А как можно получить координаты на панелях ...


Dib@zol   (2008-02-10 18:05:00) [14]

Как там на ВЦЛ - не знаю, а вот как на ВинАПИ:
GetCursorPos + GetWindowRect + PtInRect (+ F1)


Семеныч   (2008-02-10 18:05:00) [15]

Ищете на панелях, а ScreenToClient вызываете для формы. Получаются неверные координаты - и неверные результаты, конечно.


Дмитрий   (2008-02-10 17:51:00) [16]

Вся фишка в том что мне нужно вывести имена компоненто вложенны в panel'ы а они почему-то не выводятся.


Наверх

Титульная страница Поиск, карта сайта Написать письмо