[Lazarus] Control Notification bug?

Juha Manninen juha.manninen62 at gmail.com
Sun Feb 3 12:58:42 CET 2013


On Sun, Feb 3, 2013 at 1:44 PM, Mattias Gaertner
<nc-gaertnma at netcologne.de> wrote:
> On Sun, 3 Feb 2013 13:32:09 +0200
> Juha Manninen <juha.manninen62 at gmail.com> wrote:
> No. The Notification is inherited from TComponent. So, it's about
> Owner, not about TControl.Parent. Most controls are owned by the form.

Ok.

>> I solved the problem by checking if the control's parent = Self.
>
> Good.

In fact the control does not have parent or even name when
Notification is called.
Apparently the control is still under construction. If I set its
properties there, it leads to a crash.
I solved it by using OnIdle handler. Notification sets FNewControl and
registers the handler which looks like this :

procedure TCustomCoolBar.OnIdle(Sender: TObject; var Done: Boolean);
var
  Band: TCoolBand;
begin
  Assert(Assigned(FNewControl) and Assigned(FNewControl.Parent),
        'TCoolBar.OnIdle: FNewControl or FNewControl.Parent not assigned');
  DebugLn(['TCoolBar.OnIdle, Control.Name=', FNewControl.Name]);
  if FNewControl.Parent = Self then
  begin
    Band := FBands.Add;
    Band.Control := FNewControl;
    FNewControl := Nil;
  end;
  Application.RemoveOnIdleHandler(@OnIdle);
end;


It seems to work but may not be the cleanest way to do it.
Comments ?

Juha




More information about the Lazarus mailing list