Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
Дмитрий   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
2-1202814231
Nik77
2008-02-12 14:03
2008.03.09
Работа с таблицами Paradox


2-1202810874
Аян
2008-02-12 13:07
2008.03.09
нужна подсказка


15-1202066898
Чародей
2008-02-03 22:28
2008.03.09
Программный 3д ускоритель


2-1202804257
Alex8
2008-02-12 11:17
2008.03.09
Rave Reports 5.0


10-1143039604
ALXPLN
2006-03-22 18:00
2008.03.09
Перехватить действие в Exel e





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский