Recent

Author Topic: event deactivate component  (Read 1941 times)

mikutu

  • New Member
  • *
  • Posts: 14
event deactivate component
« on: May 29, 2020, 10:26:17 am »
Have select a component (TEditButton), must execute a specific action when click outside the component. I use events onExit and onDeactivateForm (for click outside form). The problem event onExit is that no work on click mainMenu, toolButton, panel. How can I solve the problem?

Project crossplatfom - windows, linux.

mikutu

  • New Member
  • *
  • Posts: 14
Re: event deactivate component
« Reply #1 on: June 01, 2020, 05:00:54 am »
In TComboBox OS send message CBN_CLOSEUP by close popup list. It is possible to use CBN_CLOSEUP  by my problem?

jamie

  • Hero Member
  • *****
  • Posts: 6130
Re: event deactivate component
« Reply #2 on: June 01, 2020, 12:09:00 pm »
Hmm, does Linux widgets support the non client mouse click messages ?

LM_NCLBUTTONUP for example in the message loop ?

 If so you can simply hook the message loop and decide what to do with it there.
The only true wisdom is knowing you know nothing

Thaddy

  • Hero Member
  • *****
  • Posts: 14373
  • Sensorship about opinions does not belong here.
Re: event deactivate component
« Reply #3 on: June 01, 2020, 01:13:49 pm »
Hmm, does Linux widgets support the non client mouse click messages ?
Which linux widget set are you talking about? There are quite a few....
Object Pascal programmers should get rid of their "component fetish" especially with the non-visuals.

jamie

  • Hero Member
  • *****
  • Posts: 6130
Re: event deactivate component
« Reply #4 on: June 01, 2020, 04:57:38 pm »
How many could there be ? really

gtk2,3, qt etc..

I am not sure where the message delivery comes from with Linux apps, maybe it makes not difference with the widgets but back to the original question, does linux apps via Lazarus support these messages?

 if it does then you could hook into them most likely in the Application class

The only true wisdom is knowing you know nothing

Thaddy

  • Hero Member
  • *****
  • Posts: 14373
  • Sensorship about opinions does not belong here.
Re: event deactivate component
« Reply #5 on: June 01, 2020, 05:50:54 pm »
gtk2,3, qt etc..
Gtk 1,2,3,4,5, Qt 1,2,3,4,5 and quite some more..... even plain X-windows can do... :P
(Not to mention Windows 1.2.3,3X, NT etc...also all differ... Android? IOS?
Impossible to answer without further information. Period.
« Last Edit: June 01, 2020, 05:53:55 pm by Thaddy »
Object Pascal programmers should get rid of their "component fetish" especially with the non-visuals.

jamie

  • Hero Member
  • *****
  • Posts: 6130
Re: event deactivate component
« Reply #6 on: June 01, 2020, 06:11:06 pm »
With windows I can install a Hook to monitor the keyboard and moust while in the app..

its a simple matter..

The only true wisdom is knowing you know nothing

mikutu

  • New Member
  • *
  • Posts: 14
Re: event deactivate component
« Reply #7 on: June 19, 2020, 10:26:07 am »
Thank you jamie.
I use TApplicationProperties.onUserInput hook event mouse button down. Problem is event not work on caption form, border form, main menu.
I find solution by MS Windows
Code: Pascal  [Select][+][-]
  1. var
  2.   PrevWndProc: WNDPROC;  
  3. ...
  4. procedure TForm1.FormCreate(Sender: TObject);
  5. begin
  6.   PrevWndProc := Windows.WNDPROC(SetWindowLongPtr(Self.Handle, GWL_WNDPROC, PtrInt(@WndCallback)));
  7. end;  
  8. ...
  9. function WndCallback(HWnd: HWND; Msg: UINT; WParam: WParam; LParam: LParam):LRESULT; stdcall;
  10. begin
  11.   if (((Msg = WM_NCLBUTTONDOWN) or (Msg = WM_NCLBUTTONUP)) and ((wParam = HTCAPTION) or (wParam = HTMENU))) or
  12. (Msg = WM_INITMENUPOPUP) then begin
  13.     ...
  14.   end;
  15.   Result := CallWindowProc(PrevWndProc, HWnd, Msg, WParam, LParam);
  16. end;
I don't know how to implement this in Linux.

You still need to track the activation of other forms in code main form. How to do this?

winni

  • Hero Member
  • *****
  • Posts: 3197
Re: event deactivate component
« Reply #8 on: June 19, 2020, 11:09:13 am »
Hi

Try this:
Code: Pascal  [Select][+][-]
  1. procedure TForm1.MyInput(Sender: TObject; Msg: Cardinal);
  2. begin
  3.     self.caption := IntToStr(Mouse.CursorPos.X)+':'+IntToStr(Mouse.CursorPos.Y);
  4.     if MSG= 513  //WM_LBUTTONDOWN
  5.               then  showMessage ('Left Mouse Button Down');
  6. end;
  7.  
  8. procedure TForm1.FormCreate(Sender: TObject);
  9. begin
  10.  Application.AddOnUserInputHandler(@MyInput, True);
  11.  end;                                            
  12.  
  13.  

Winni

mikutu

  • New Member
  • *
  • Posts: 14
Re: event deactivate component
« Reply #9 on: June 22, 2020, 03:11:07 am »
Application.AddOnUserInputHandler and TApplicationProperties.onUserInput do the same thing. I just created it in design mode, and you're in the code. About the problems of this handler I wrote above.

 

TinyPortal © 2005-2018