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

Вниз

Местоположение курсора   Найти похожие ветки 

 
SergeiMARC   (2003-03-13 17:15) [0]

Как узнать если курсор находится над каким то компонентом?


 
Юрий Зотов ©   (2003-03-14 00:11) [1]

Помню, что где-то в VCL что-то на эту тему видел, но сейчас не смог найти. Поэтому sorry за возможное изобретение велосипеда.

function ControlUnderMouse: TControl;
var
Parent: TWinControl;
begin
Parent := FindVCLWindow(Mouse.CursorPos);
if Parent <> nil then
with Parent do
begin
Result := ControlAtPos(ScreenToClient(Mouse.CursorPos), True, False);
if Result = nil then Result := Parent
end
else Result := nil
end;


 
Diamond Cat ©   (2003-03-14 01:46) [2]

2 Юрий Зотов. Хм интересно, а в этом-ли контексте задан вопрос.
на всякий случай
windowfrompoint и ChildWindowFromPoint


 
Юрий Зотов ©   (2003-03-14 08:41) [3]

> Diamond Cat © (14.03.03 01:46)
Контролы Delphi бывают и графическими...


 
Anatoly Podgoretsky ©   (2003-03-14 08:55) [4]

С контекстом сложнее, очень не понятный, я на всякий случай пполность расширю вопрос с учетом темы

Как узнать Местоположение курсора если курсор находится над каким то компонентом?

Для меня это означает только одно, курсор или в форме или нет.


 
REA ©   (2003-03-14 10:03) [5]

А так? Я тоже где-то что-то видел, но не нашел.
Try
Result := FindControl(FindVCLWindow(Mouse.CursorPos));
Except
Result := Nil;
End;


 
Юрий Зотов ©   (2003-03-14 10:11) [6]

> REA © (14.03.03 10:03)

1. Требуется поправка:
FindControl(FindVCLWindow(Mouse.CursorPos) .Handle );

2. Будет искать ТОЛЬКО оконные контролы.


 
REA ©   (2003-03-14 10:40) [7]

А так? Выдрал из кода в Menus:
Смысл тот же впрочем...
var
Window: TWinControl;
begin
Result := nil;
Window := FindVCLWindow(Pos);
if Window <> nil then
begin
Result := Window.ControlAtPos(Pos, False);
if Result = nil then Result := Window;
end;
end;


 
Юрий Зотов ©   (2003-03-14 10:44) [8]

> REA © (14.03.03 10:40)

1. Сравните с кодом, который я привел выше.
2. Найдите 10 различий.


 
REA ©   (2003-03-14 11:36) [9]

ScreenToClient(Mouse.CursorPos) - вот одно


 
Anatoly Podgoretsky ©   (2003-03-14 11:42) [10]

REA © (14.03.03 11:36)
Тогда оно не в твою пользу, ты часто путаешься сделать хорошую мину при плохой игре


 
NetKnight ©   (2003-03-14 11:47) [11]

По-моему проще сделать, события входа в зону и выхода.
в приватной области объявляем:

procedure CMMouseEnter(var Message:TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message:TMessage); message CM_MOUSELEAVE;

И в теле процедуры пишем обработку... Я так делал кнопки, которые меняют цвет при наведении...
Сообщения CM_MOUSEENTER и CM_MOUSELEAVE объявлены в юните Controls.


 
NetKnight ©   (2003-03-14 11:49) [12]

Да, забыл добавить, что это в самом компоненте делается...
Или я что-то не так понял ? :)


 
REA ©   (2003-03-14 12:09) [13]

Удалено модератором
Примечание: Ты не модератор


 
kDenis ©   (2003-03-15 12:19) [14]

Ну программеры великие! А OnMouseMove уже не в моде что-ли?


 
Diamond Cat ©   (2003-03-15 13:36) [15]

2 kDenis а предположим , что компонентов на форме за 100 и что к каждому свой OnMouseMove


 
MAN-In-RED ©   (2003-03-15 13:50) [16]


> kDenis © (15.03.03 12:19)

Ну программер великий, не у всех контролов есть OnMouseMove!


 
Delphi5.01 ©   (2003-03-15 16:14) [17]

a u mena vot takaia idea!

procedure TForm1.Timer1Timer(Sender: TObject);
var Pos: TPoint;
x,y: Integer;
w,h: Integer;
i: Integer;
begin
GetCursorPos(Pos);
for i:=0 to ComponentCount-1 do
if Components[i] is TButton then
begin
x:=(Components[i] as TButton).ClientOrigin.X;
y:=(Components[i] as TButton).ClientOrigin.Y;
w:=(Components[i] as TButton).Width;
h:=(Components[i] as TButton).Height;
if (Pos.X>X)and(Pos.X<X+W)and
(Pos.Y>Y)and(Pos.Y<Y+H) then
ShowMessage("Cursor is under "+(Components[i] as TButton).Caption+"!");
end;
end;

napisal dla TButton, no mojno smenit na drugoi komponent!

P.S. na form mojno daje sozdavat dinamicheski novie Button-i i na nix toje rabotaet eta procedura proveral! jelau udachi!


 
Юрий Зотов ©   (2003-03-15 18:41) [18]

> Delphi5.01 © (15.03.03 16:14)

Отличная идея! Советую написать такие процедуры для КАЖДОГО контрола VCL, объединить их в библиотеку и продавать по рублю за килобайт кода. Сразу разбогатеете.


 
Delphi5.01 ©   (2003-03-16 10:09) [19]

Удалено модератором
Примечание: Корреспонденты сами разбурутся, что им писать, ты отвечай только за своии сообщения и сам решай, что тебе писать.



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

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

Наверх




Память: 0.51 MB
Время: 0.016 c
3-87832
Андрей.
2003-03-09 15:51
2003.03.27
Дата


1-88050
anton_cor
2003-03-15 01:18
2003.03.27
Напечатать бланк


4-88298
LeReve
2003-01-30 18:09
2003.03.27
Как привельно использовать GetDIBits???


14-88154
MBo
2003-03-13 07:29
2003.03.27
АЦП


1-88054
Makhanev A.S.
2003-03-10 01:59
2003.03.27
Контекстное меню...