Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
ВнизКак определить что мышь ушла за пределы компонента Найти похожие ветки
← →
pavit (2002-09-03 12:54) [0]Собственно решение наверняка простоя, но я не нашел прямого ответа, на сайте, может кто знает, подскажите.
Идея простая, нажимаю на заголовок грида, появляется ComboBox в котором можно выбрать размерность в которой выводит значения, но если человек решил размерность не менять и ни чего не выбирать, т.е. просто убрал мышь с компонента (ComboBox), нужно его спрятать.
← →
Виктор Щербаков (2002-09-03 13:00) [1]CM_MOUSELEAVE
← →
AL2002 (2002-09-03 13:00) [2]Подложи что-то под комбо и событие ему мышовое назначь.
← →
Леха_ (2002-09-03 13:07) [3]если хочешь сделать надежно то SetCapture ReleaseCapture
← →
pavit (2002-09-03 13:14) [4]я еще не такой суппер, потоэтому если не трудно как в контексте это выглядит.
← →
Виктор Щербаков (2002-09-03 13:18) [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.
← →
Леха_ (2002-09-03 13:36) [6]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("
← →
pavit (2002-09-03 13:53) [7]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, когда мышка за его пределами.
← →
pavit (2002-09-03 14:39) [8]2 Виктор Щербаков ©
Пример хороший, и работает нормально, но список нельзя раскрывать, т.е. нельзя ни чего выбрать, возникают исключительные ситуации (он раскрыт но его уже не видно).
Как можно отследить мышь в области раскрывшегося списка?
← →
Song (2002-09-03 14:45) [9]Тем же onMouseMove. А размеры раскрывающегося списка можно узнать через CB_GETDROPPEDCONTROLRECT
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c