Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить что мышь ушла за пределы компонента [D6, Win2k]


pavit ©   (2002-09-03 12:54:00) 

Собственно решение наверняка простоя, но я не нашел прямого ответа, на сайте, может кто знает, подскажите.
Идея простая, нажимаю на заголовок грида, появляется ComboBox в котором можно выбрать размерность в которой выводит значения, но если человек решил размерность не менять и ни чего не выбирать, т.е. просто убрал мышь с компонента (ComboBox), нужно его спрятать.


Song   (2002-09-03 14:45:00) [1]

Тем же onMouseMove. А размеры раскрывающегося списка можно узнать через CB_GETDROPPEDCONTROLRECT


pavit   (2002-09-03 14:39:00) [2]

2 Виктор Щербаков ©
Пример хороший, и работает нормально, но список нельзя раскрывать, т.е. нельзя ни чего выбрать, возникают исключительные ситуации (он раскрыт но его уже не видно).
Как можно отследить мышь в области раскрывшегося списка?


pavit   (2002-09-03 13:53:00) [3]

2 Леха_
Вообщем решил сделать надежно:
при нажатие на заголовок грида -
procedure TForm1.ZnachenGridTitleClick(Column: TColumn);
begin
if (column.Index=0) then
begin
Zn1DBox.Visible:=true;
SetCapture(Zn1DBox.Handle);
end;
end;


затем -
procedure TForm1.Zn1DBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<0)or(y<0)or(x>Zn1DBox.Width)or(y>Zn1DBox.Height) then
begin
ReleaseCapture;
Zn1DBox.Visible:=false;
end;
end;


только не пропадает Combo, когда мышка за его пределами.


Леха_   (2002-09-03 13:36:00) [4]

procedure TForm1.Button1Click(Sender: TObject);
begin
SetCapture(Panel1.Handle);
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<0)or(y<0)or(x>Panel1.Width)or(y>Panel1.Height) then
begin
ReleaseCapture;
ShowMessage("


Виктор Щербаков   (2002-09-03 13:18:00) [5]

Вот пример:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
private
{ Private declarations }
public
{ Public declarations }
procedure CMMouseLieave(var Message: TMessage); message CM_MOUSELEAVE;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CMMouseLieave(var Message: TMessage);
begin
if Message.LParam = Integer(Button1) then beep;
end;

end.


pavit   (2002-09-03 13:14:00) [6]

я еще не такой суппер, потоэтому если не трудно как в контексте это выглядит.


Леха_   (2002-09-03 13:07:00) [7]

если хочешь сделать надежно то SetCapture ReleaseCapture


Виктор Щербаков   (2002-09-03 13:00:00) [8]

CM_MOUSELEAVE


AL2002   (2002-09-03 13:00:00) [9]

Подложи что-то под комбо и событие ему мышовое назначь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо