Текущий архив: 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