Главная страница
    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.047 c
15-1201771165
Noter
2008-01-31 12:19
2008.03.09
Учебник


15-1202032040
asdqwer
2008-02-03 12:47
2008.03.09
vcl100.bpl для RAD Studio


8-1175518143
haunt41
2007-04-02 16:49
2008.03.09
Вывод случайной картинки, rxLib


8-1176801617
dr_craigan
2007-04-17 13:20
2008.03.09
Изображение


15-1201902190
Kostafey
2008-02-02 00:43
2008.03.09
С днем рождения ! 2 февраля





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский