Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-97473
alex_bredin
2003-06-04 16:32
2003.06.30
Значение переменной в QReport


8-97759
revo
2003-03-17 17:34
2003.06.30
Распознавание голоса


11-97569
Vox
2002-10-09 18:48
2003.06.30
Popup Menu


14-97786
infinity1
2003-06-10 14:16
2003.06.30
Помогите с кодировкой


14-97858
Иксик
2003-06-11 11:51
2003.06.30
Форматы аудиозаписи





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