procedure TFormOptions.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var Control: TControl;
begin
Control:=TWinControl(Sender).ControlAtPos(Point(x,y),true, true);
if Assigned(Control) and (Control.Hint<>'')
then if StatusBarMain.Panels[0].Text<>Control.Hint
then StatusBarMain.Panels[0].Text:=Control.Hint
else StatusBarMain.Panels[0].Text:='';
end;
получение значения hint
Мне нужно при наведении мыши на определённый эллемент формы выделять её hint.
Для этого я хотел пользоваться событием OnMouseMove у формы, но проблема в том, что при передвижении курсора по эллементам находящимся на форме (вроде как потомкам от TWinControl, но не факт), срабатывает их OnMouseMove и на форме данное событие не происходит. Оно не срабатывает на дочернем объекте только в одном случае, если он "не активен", а это не выход из положения.
Ну так вот вопрос, Как сделать так чтобы у дочерних объектов не срабатывал OnMouseMove, или предложите какой другой способ реализации данной задачи. :)
Код:
Цитата: misha_turist
...или предложите какой другой способ реализации данной задачи. :)
Не обязательно использовать событие OnMouseOver, думаю поможет другой вариант:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure func(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHint:=func;
end;
procedure TForm1.func(Sender: TObject);
begin
StatusBar1.Panels[0].Text:='';
if Application.Hint<>'' then begin
//Application.MessageBox(pchar(Application.Hint), 'хинт лейбла', MB_OK or MB_ICONINFORMATION);
StatusBar1.Panels[0].Text:=Application.Hint;
end;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure func(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHint:=func;
end;
procedure TForm1.func(Sender: TObject);
begin
StatusBar1.Panels[0].Text:='';
if Application.Hint<>'' then begin
//Application.MessageBox(pchar(Application.Hint), 'хинт лейбла', MB_OK or MB_ICONINFORMATION);
StatusBar1.Panels[0].Text:=Application.Hint;
end;
end;
end.
Спасибо, помогло. :) Я и не знал, что всё так просто.... :)