On 27/07/2011 08:58, Graeme Geldenhuys wrote:
On 07/27/2011 09:03 AM, Felipe Monteiro de Carvalho wrote:
That's what I though initially, but it is wrong. In Delphi this
control allows other controls to be placed on it, so it effectively
has 1 sheet.
And I believe that to be a bug in Delphi. See attachment: tabcontrol.png

Dropping a Memo onto TTabControl is indeed possible, but look at the
outcome! Components can be moved _over_ the tabs.
If I had to guess, I would say that Delphi has the client-area (never mind the overlap), because Delphi does not have the same anchors as Lazarus. So it is more often required to nest components, to archive a layout. Just a guess...

Anyway, as for an implementation in Lazarus, I would think it would be good to replicate. even if only for compatibility, so people can convert there Delphi projects.

Lazarus can add the autosize, which would make it a tab only control, and the client area could be left empty.It would be the developers choice.

As for the overlap, and the Child.Top = 0 location.

In Delphi Child.Top = zero means overlap the tabs (as does it for TGroupBox). IMHO I see no unsolvable issue, if that was different in Lazarus. The Delphi-Convertor could probably adjust the Top coordinates of a TTabControl's direct children.


NoteBook    - I have no idea what is the difference between this and
              the PageControl. They seem the same to me. The only
              difference I could see is how you add more tabs. One use
              a string list property the other is a collection of
              page objects (I think).
That's how it was implemented before I fixed it. The correct TNotebook
has no tabs, only sheets without any border.
You are correct about TNotebook, but I was thinking of the
TTabbedNotebook as can bee seen in Delphi 7.  Then again, having a
Notebook, TabbedNotebook, PageControl, TabControl etc. is just damn
confusing to developers.
Notebooks are CustomControls (haven't checked TTabedNotebook...)
Tab/PageControl are Wincontrol

There are other occasions of very similar components, that mainly differ in this inheritance point I also use it in apps where you click on a button and then part of the

view changes to reflect which tool is selected.
I simplified this whole tab/notebook mess in fpGUI. I have one
PageControl component.
Do you have a difference between WinControls and none WinControls? Or actually do you have a need for it?

probably not... Though I don't know how InvalidateRect is implement for fpGui? You must have some interaction with the OS/Widgetset there, as invalidation can happen from outside the app

Anyway, in W32 (and probably others too) If I invalidate multiply rects of the same WinControl (a wincontrol has a handle in the OS) then the minimum bounding rect is invalidated => so I may end up painting more than actually required. If I have separate WinControls, then each of them has it's invalidated rect (and each will get a callback invoking it's Paint.

So it's a question if you have a very time-expensive paint handler, you may want to have more handles, and paint less




--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to