[Lazarus] Extending TRect breaks Lazarus

Michael Van Canneyt michael at freepascal.org
Fri Nov 6 19:02:48 CET 2015



On Fri, 6 Nov 2015, Martin Schreiber wrote:

> On Friday 06 November 2015 18:33:54 Graeme Geldenhuys wrote:
>> On 2015-11-06 17:19, Michael Van Canneyt wrote:
>>> With QMyVeryLongQueyObjectName as Q do
>>>    try
>>>      // Do things with Q
>>>    finally
>>>      Q.Close;
>>>    end;
>>
>> var
>>   Q: TQuery absolute QMyVeryLongQueyObjectName;
>> begin
>>   with Q do
>>     try
>>       // Do things with Q
>>     finally
>>       Q.Close;
>>     end;
>>
>>
>> problem solved! ;-)
>>
> Not a good idea IMHO, that hinders readability because one doesn't see the
> real container at the "with" block start. Another important use of "with" is
> to make complex address calculations only once at the "with" block start
> without the need to define a pointer variable in "var" and to dereference in
> every statement.

Indeed, and besides this:

a) it does not compile for properties. See below.
b) I did mention the requirement about non-trivial readable variable names...

Michael.

program Project1;

{$mode objfpc}

Type
   TMyType = class(TObject)
   private
     FM: TMyType;
     function GetM: TMyType;
     procedure SetM(AValue: TMyType);
   Public
     Procedure DoIt;
     Property MyVeryLongObjectPropertyName : TMyType Read GetM Write SetM;
   end;

function TMyType.GetM: TMyType;
begin
   Result:=Nil;
end;

procedure TMyType.SetM(AValue: TMyType);
begin
   //
end;

procedure TMyType.DoIt;

Var
   Q : TMyType absolute MyVeryLongObjectPropertyName; // Error !!!

begin

end;

begin
end.




More information about the Lazarus mailing list