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

Вниз

Координаты   Найти похожие ветки 

 
tytus ©   (2003-04-27 13:33) [0]

Как узнать координаты мышки на форме и попал ли указатель мышки на кнопку? Пробовал WMMouse - не получаеться, пишет пятизначные цифры (координаты вывожу в Edit).
procedure TForm1.MouseEnter(var Msg:TWMMouse);
begin
edit1.Text:=IntToStr(msg.XPos);
edit2.Text:=inttostr(msg.YPos);
end;


 
default ©   (2003-04-27 13:39) [1]

ну ты гений мысли


 
Yanis ©   (2003-04-27 13:52) [2]


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Caption:=("X="+IntToStr(x)+"|"+"Y="+IntToStr(y));
end;

Чем тебя это не устраивает?


 
tytus ©   (2003-04-27 14:00) [3]

Yanis
Да это понятно. Но мне бы хотелось разобраться с WMMouse; procedure MouseEnter(var Msg:TWMMouse);message CM_MOUSEENTER;
procedure MouseLeave(var Msg:TWMMouse);message CM_MOUSELEAVE;
Подскажи что сдесь не так. И мне бы хотелось применить это сообщение к кнопке...


 
Illusion ©   (2003-04-27 14:04) [4]

не знаю как в Дельфях, но в Билдере MouseEnter несколько другое делает... :)


 
default ©   (2003-04-27 14:22) [5]

to tytus
цель какая?


 
tytus ©   (2003-04-27 14:31) [6]

to Default
Цель простая - нужно отследить событие когда мышка появляется над контролом и когда его покидает. (к примеру можно потом менять цвет контрола - я пробую рисовать свои кнопки, но пока дальше регистрации компонента дело не заходит - не получаеться нарисовать внешне).


 
Illusion ©   (2003-04-27 14:37) [7]

2 tytus
ты про MouseMove слышал? делаешь флаг, когда MouseMove указывает, что ты навёл на контрол, устанавливаешь его true, когда видишь. что сваливает, делаешь false. Что тебе делать с этим флагом? всё что хочешь...


 
Song ©   (2003-04-27 14:38) [8]

А чем тебя CM_MOUSEENTER не устраивает?


 
tytus ©   (2003-04-27 14:53) [9]

написал такой обработчик:procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
caption:=sender.ClassName;
end;
но кроме кнопки ничего не определяет (на форму накидал ListBox, Button,RadioButton....)


 
tytus ©   (2003-04-27 14:58) [10]

...для кнопки работает... а для формы - нет....


 
default ©   (2003-04-27 14:58) [11]

to tytus
ну ты даёшь...
обработчик-то как называется?
Button1MouseMove
обрабатывай WM_MOUSEMOVE формы и вычисляй по координатам факт попадания курсора мыши на твою кнопку


 
default ©   (2003-04-27 15:00) [12]

в обраб-ке FormMouseMove что по сути тоже самое


 
default ©   (2003-04-27 15:12) [13]

ты кнопку GDI(или оболочку - TCanvas) рисуешь что ли или она потомок TWinControl?


 
Illusion ©   (2003-04-27 15:13) [14]

MouseEnter по сути тот же моус мув... Только работаю с Маус Муом ты можешь контролировать ВЕСЬ процесс, и написать только что тебе нужно, в отличии от MouseEnter, где програмисты Борладна написали свой код, над заметить, не совсем быстрый. Все заорут, ну и что, млин, подумаешь на пару тактов проца будет больше и т.п... А ничё, отвечу я... Это сейчас для вас не критично. А вот будете писать OpenGL API, с контекстом окна, и обрабатывая мышку, вот тогда это буедт оч. критично.
З.Ы. Установив ОДИН оброточик MouseMove на форму, можно отлавливать ВСЕ перемещения мышки по форме, в то время, когда у тебя много компонентов, и на каждый ставить MouseEnter и т.п... это всё дело разбирать несчастному WNDProc-у... Да, на 4 пне, если просто окошко даже ничего заметно не будет... Только опретиву жрать... Но ведь не у всех 4 пни, и паралельно может быть запущенно всё что угодно...


 
tytus ©   (2003-04-27 15:24) [15]

to default
Рисую я TCustomControl, а потом в конструкторе Parent:=AOwner as TWinControl; Не знаю, может не правильно, но работает.....
to Illusion
procedure move(var msg:TWMMouse);message WM_MOUSEMOVE;

procedure TForm1.move(var msg:TWMMouse);
begin
caption:="X="+inttostr(msg.XPos)+" | "+"Y="+inttostr(msg.YPos);
end;
Работает, но когда мышь над кнопкой - не работает...
Мне что, вписать в процу Sender:TObject????


 
tytus ©   (2003-04-27 15:34) [16]

Ладно. ВСЕМ спасибо, С ПРАЗДНИКОМ ВАС. Немного подучусь... А сейчас более не смею более утруждать мастеров. До скорых встреч. BYE!!!


 
Illusion ©   (2003-04-27 16:02) [17]

2 tytus
сорри, стормозил... Это те на VС++, где всё с нуля обрабатываешь... Я просто всё делаю вручную и несколько иначе :). В дельфи видно различают указатели отедльных частей окон... Так быть и должно, в приницпе... Я знаю, чтог теюе от этого не легче:)... вот потому и предлагаю тебе такой код. В билдере пашет...

main.h

...
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall OnIdle(System::TObject* Sender, bool &Done);
void __fastcall MouseMove(int x, int y);
};
...
main.cpp
...
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application->OnIdle = OnIdle;
}

void __fastcall TForm1::OnIdle(System::TObject* Sender, bool &Done)
{
if(Form1->Active)
{
POINT pt;
GetCursorPos(&pt);
MouseMove(pt.x,pt.y);
}
}
void __fastcall TForm1::MouseMove(int x, int y)
{
x;
y;
}
...

в x,y у тебя будет координата мышки относительно ЭКРАНА, а не формы.... Чтобы получить относительно формы
x = x - Form1->Left;
y = y - Form1->Top;


 
Illusion ©   (2003-04-27 16:03) [18]

в паскаль перегнать не должно составить труда... Звиняте, что не на дельфях, давно уже снёс за ненадобностью... На всё хватает Билдера и MSVC++...


 
default ©   (2003-04-27 16:06) [19]

to Illusion
чё уж ты здесь особо с нуля-то...
в Delphi всё то же самое, дык всё Win32 API


 
Illusion ©   (2003-04-27 16:10) [20]

это код написанный в билдере за 2 минуты... Те показать обработчик нормального окна, который я юзаю в VC++? :)


 
default ©   (2003-04-27 16:31) [21]

без разницы



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

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

Наверх




Память: 0.51 MB
Время: 0.016 c
14-97813
Sergey13
2003-06-11 08:52
2003.06.30
Вопрос к женатым и с детьми.


1-97619
SkyRanger
2003-06-19 14:08
2003.06.30
Access Violation и все тут, млин....


14-97798
ZeroDivide
2003-06-11 11:26
2003.06.30
даунгрейд вашего компьютера


7-97895
demonyator
2003-04-20 20:25
2003.06.30
Как заблокировать пользователю доступ к определённой папке?


1-97587
Muskat
2003-06-11 14:40
2003.06.30
PChar2