I didn't know it either. But it was quite easy to find out:
1.) Debug Lazarus IDE within another instance.
2.) In the IDE-to-debug create a project with TPageControl and 2 tabs.
3.) Set breakpoint to "TCustomTabControl.ShowCurrentPage" in the
debugger IDE.
4.) Change pages with the OI in the IDE-to-debug.
Now you get your Call Stack filled with useful information. See #4 for
relevant line:
#0 SHOWCURRENTPAGE(0x15087170) at include\customnotebook.inc:1049
#1 DOSENDPAGEINDEX(0x15087170) at include\customnotebook.inc:1072
#2 INTERNALSETPAGEINDEX(0x15087170, 0) at include\customnotebook.inc:985
#3 SETPAGEINDEX(0x15087170, 0) at include\customnotebook.inc:587
*#4 DOSELECTIONCHANGED(0x150683a0) at componenttreeview.pas:315*
#5 INTERNALSELECTIONCHANGED(0x150683a0) at include\treeview.inc:5715
#6 UNLOCKSELECTIONCHANGEEVENT(0x150683a0) at include\treeview.inc:5909
#7 SELECTONLYTHIS(0x169b89f0, 0x19c80ed8) at include\treeview.inc:2097
#8 MOUSEDOWN(0x150683a0, MBLEFT, [SSLEFT], 104, 64) at
include\treeview.inc:5349
//...
So you can see that the changing code is hard-coded into IdeIntf. (The
callback is in "TComponentTreeView.DoSelectionChanged;".)
IMO you can suggest a custom designing message that will handle it
without hard-coding it into the IDE. Because e.g. the TNotebook page
change doesn't work.
Ondrej
On 21.05.2016 22:49, Vojtěch Čihák wrote:
That's something else. I need something that will be part of
component. Something like overriden SetFocus; or so.
So far I tried CMDesignHitTest and DoEnter but it didn't work.
It's like when you design Form with PageControl and two TabSheets. You
select the second TabSheet in OI and PageControl "knows" it and it
changes the tabs on the form. I'd like to know how this works (what
component's code allows this).
Thanks, V.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus