Форум: "WinAPI";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизКоординаты Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c