Главная страница
    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.48 MB
Время: 0.008 c
1-87987
andrey_pst
2003-03-18 09:28
2003.03.27
Какая конструкция работает быстрее


3-87833
scream
2003-03-08 10:27
2003.03.27
Help with Blob(Stream)


3-87876
anton2v
2003-03-11 13:13
2003.03.27
Не удается сделать таблицу пустой


14-88245
malkolinge
2003-03-12 16:02
2003.03.27
Книги по построению компиляторов !


1-87885
Manulo
2003-03-13 17:00
2003.03.27
Эмуляция нажатия клавиш





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