Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.09;
Скачать: CL | DM;

Вниз

Курсор   Найти похожие ветки 

 
Дмитрий   (2008-02-10 17:39) [0]

Как определить находится ли курсор мыши на требуемом мне компоненте в 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 17:51) [1]

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


 
Dib@zol ©   (2008-02-10 18:05) [2]

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


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

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


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

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


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

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

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


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

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

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

GetCursorPos + WindowFromPoint.


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

> GetCursorPos + WindowFromPoint.

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


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

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

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


 
Dib@zol ©   (2008-02-10 18:25) [9]

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


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

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

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


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

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]

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


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

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

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


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

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

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

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

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

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


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

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

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

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


 
ketmar ©   (2008-02-10 20:03) [15]

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

---
Understanding is not required. Only obedience.


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.03.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
15-1202075537
mvp
2008-02-04 00:52
2008.03.09
PHP + Flash + Video


11-1166529914
2expres
2006-12-19 15:05
2008.03.09
Таймер на 10мс.


15-1201868022
Лицензионность
2008-02-01 15:13
2008.03.09
Лицензионное ли ПО


2-1202709598
saNat
2008-02-11 08:59
2008.03.09
Порядок объявления библиотек


15-1201900320
ProgRAMmer Dimonych
2008-02-02 00:12
2008.03.09
Подскажите, плз, направление поиска