![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатель мыши над контролом... [D7]
TrainerOfDolphins © (2006-10-02 14:27:00)День добрый!
Хотел написать функцию, которая будет проверять находится ли курсор мыши над данным контролом или нет.
function CursorIsUnderControl(ParentControl,ChildControl:TWidgetControl):boolean;
var
c: TControl;
p: TPoint;
BEGIN
p := Mouse.CursorPos;
p := ParentControl.ScreenToClient(p);
c := ParentControl.ControlAtPos(p, true, true);
if c=ChildControl
then Result:=true;
END;
Но она почему-то всегда возвращает False;
ParentControl.ControlAtPos(p, true, true) возвращает nil, хотя не должен...
Где у меня ошибка?
Спасибо
TrainerOfDolphins (2006-10-03 14:46:00) [1]Удалено модератором
Примечание: Флудить завязываем
Elen (2006-10-03 14:11:00) [2]Удалено модератором
Примечание: Флудить завязываем
TrainerOfDolphins (2006-10-03 14:07:00) [3]Ясно, спасиба :)
Что бы я делал без мастеров...
Elen (2006-10-03 13:59:00) [4]
> TrainerOfDolphins
Не. просто я его на Пингвинчике пробую, а он не идет :-). Ну я вообще-то пользуюсь Linux Live On cd - knoppix 6 RE, может это не совсем то... В общем это чисто субъективное мнение... К тому же сейчас популярние .NET
TrainerOfDolphins (2006-10-03 13:54:00) [5]Недоработанный?
Elen (2006-10-03 13:21:00) [6]
> TrainerOfDolphins
CLX - позволяет разрабатывать кросс-платформенные приложения, идущие и под Линуксом и для Виндой. Только этот CLX помоему не фонтан...
TrainerOfDolphins (2006-10-03 13:15:00) [7]Привет, Elen!
А чем отличается простая аппликация от CLX?
Elen (2006-10-03 12:48:00) [8]
> TrainerOfDolphins
Наверное потому что TwidgetControl используется в CLX, а у тебя по всей видимости простая аппликация
TrainerOfDolphins (2006-10-03 11:44:00) [9]Спасибо всем за помощь. Вариант описанный в [0] заработал, когда я вместо TwidgetControl передавать TWinControl. Только интересно почему он не работал с TwidgetControl ...
Ketmar (2006-10-02 18:09:00) [10]когда мышь была над формой -- TForm. когда над кнопкой -- TButton. как и ожидалось.
TrainerOfDolphins (2006-10-02 18:07:00) [11]и какой объект он вернул?
Ketmar (2006-10-02 18:02:00) [12]на. я ленив. %-)
{$APPTYPE CONSOLE}
uses
Windows, Controls, StdCtrls, Forms;
var
f: TForm;
b: TButton;
w: Pointer;
begin
Application.Initialize();
f := TForm.Create(nil);
f.Left := 10; f.Top := 10; f.Width := 320; f.Height := 200;
b := TButton.Create(f);
b.Parent := f;
b.Left := 0; b.Top := 0;
f.Show;
Sleep(3000);
w := FindVCLWindow(Mouse.CursorPos);
if w = nil then WriteLn('shit!')
else WriteLn(TObject(w).ClassName);
end.
TrainerOfDolphins (2006-10-02 17:58:00) [13]2 Ketmar
Скажи плиз, где ты вызывал FindVCLWindow() и что он тебе вернул?
Ketmar (2006-10-02 17:50:00) [14]>[27] Gydvin(c) 2-Oct-2006, 17:46
>А чем
>CM_MOUSEENTER, CM_MOUSELEAVE отлавливать
>негодится?
попробуй резко "выдернуть" мышь из окошка. бедный контрол этого не заметит. есть и другие случаи, когда эти сообщения "теряются". оно не смертельно, но неприятно.
Gydvin (2006-10-02 17:46:00) [15]А чем
CM_MOUSEENTER, CM_MOUSELEAVE отлавливать негодится?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, DBGrids;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Sender_1: TObject;
public
{ Public declarations }
procedure WndProc(var Message: TMessage); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WndProc(var Message: TMessage);
begin
inherited;
case Message.Msg of
CM_MOUSEENTER:
begin
if Message.LParam = integer(Sender_1)
then Caption := 'Hello, mouse';
end;
CM_MOUSELEAVE:
begin
if Message.LParam = integer(Sender_1)
then Caption := 'By-by, mouse';
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Sender_1:=DBGrid1;
end;
end.
Ketmar (2006-10-02 17:44:00) [16]есть. баг в коде. только что проверил: FindVCLWindow() работает отлично.
TrainerOfDolphins (2006-10-02 17:37:00) [17]2 Ketmar
>о том, что "работать, где бы не вызвали" -- это утопия.
Любое утверждение относительно, и моё тоже...
А Вы к словам придираетесь. :)
А по сабжу есть соображения?
Ketmar (2006-10-02 17:30:00) [18]>[23] TrainerOfDolphins(c) 2-Oct-2006, 17:20
>Это Вы о чём? :)
о том, что "работать, где бы не вызвали" -- это утопия.
TrainerOfDolphins (2006-10-02 17:20:00) [19]2 Ketmar
Это Вы о чём? :)
TrainerOfDolphins (2006-10-02 17:19:00) [20]2 Юрий Зотов
Однако и FindVCLWindow(P) всё время nil возвращает... :(
p := Mouse.CursorPos;
w:=FindVCLWindow(P);
{w=nil}