[Lazarus] 'with' is evil, isn't it?

Marcos Douglas md at delfire.net
Tue Aug 2 17:03:21 CEST 2011


2011/8/2 Max Vlasov <max.vlasov at gmail.com>:
> Hi,
>
> Personally I stopped using 'with' keyword long time ago, but there are code
> fragments from the past and today I fixed a little bug showing again that
> it's a evil. TCanvas in lazarus has width and height properties while in
> Delphi it hasn't (at least some time ago). So the code below leads to
> different results in lazarus and Delphi, at least for design-time drawing.
>
> procedure TControlDescendant.Paint;
> begin
>   with Canvas do
>   begin
>       Rectangle(0, 0, Width, Height);
>   edn;
> end;
>
> So not only the 'with' context can silently change while the project is
> evolving, it can also change while it's being ported...

IMHO, 'with' should have an implicit pointer like 'self' (could be
'this' or whatever).

Eg:

procedure TControlDescendant.Paint;
begin
  with Canvas do
  begin
      this.Rectangle(0, 0, this.Width, this.Height);
  edn;
end;

Marcos Douglas




More information about the Lazarus mailing list