пятница, августа 25, 2006

Class Helpers

Еще один способ облегчить себе жизнь воспользовавшись прелестями BDS 2006, а именно прелестью вынесенной в заголовок. Об этом я тоже уже упоминал но повторить (да еще и самого себя) не помешает. Итак:

Type

// Класс-хелпер для класса TObject
TObjectClassHelper = Class Helper For TObject

Private

{$REGION ' Методы доступа к значениям свойств '}

Function GetThis : TObject; Inline;
Function GetThisAssigned : Boolean; Inline;

{$ENDREGION}

Public

Property This : TObject Read GetThis;
Property ThisAssigned : Boolean Read GetThisAssigned;

End;

Implementation

{ TObjectClassHelper }

//
Function TObjectClassHelper.GetThis : TObject;
Begin

Result := Self;

End;
//

//
Function TObjectClassHelper.GetThisAssigned : Boolean;
Begin

Result := Assigned(Self);

End;
//


Удобно использовать в коде требующем ссылку на объект раскрытый оператором With. В зависимости от стиля программирования такое может случаться довольно часто ;) Примеры:


  With TRegion.CreateAssigned(ARegion, amSharing) Do
Try

Result := TakeFrom(TRegion(This), ALastError);

Finally

Free;

End;
 With FindControl(0) Do
If ThisAssigned Then
Caption := Caption + 'OK';

четверг, августа 24, 2006

Record Helpers

С чего-то нужно было начинать, поэтому я начну с того о чем уже упоминал. Несмотря на то, что в документации BDS 2006 не сказано о наличии record helper'ов для платформы Win32 (я во всяком случае не нашел) эта изумительная вещица работает! Простейший пример иллюстрирует всю прелесть данной конструкции:

 Type
  TRectHelper = Record Helper For TRect

Function GetWidth : Integer; Inline;
Function Getheight : Integer; Inline;

Property Width : Integer Read GetWidth;
Property Height : Integer Read GetHeight;

End;

...

//
Function TRectHelper.GetWidth : Integer;
Begin

With Self Do
Result := Right - Left;

End;
//

//
Function TRectHelper.GetHeight : Integer;
Begin

With Self Do
Result := Bottom - Top;

End;
//

После чего все переменные типа TRect получают свойства Width и Height.