Вниз
Скачать: CL | DM;

Подскажите как работает нижепривелённый код ил TNTLib   Найти похожие ветки 

← →
MegaVolt ©   (2007-01-17 12:43) [0]

Модуль TntComCtrls

Заче нужно следующее описание хитрого класса?
Поля обозначенные как Fxxx нигде не вызываются
Вызов этого класса применяется в одном месте при создании нового TTntListView.

1. Почему нельзя было обойтись без этого класса?
2. Поля к которым никто не обращается нужны для организации смещения FListColumns аналогичного нашему классу?


 THackCustomListView = class(TCustomMultiSelectListControl)
 protected
   FxxxCanvas: TCanvas;
   FxxxBorderStyle: TBorderStyle;
   FxxxViewStyle: TViewStyle;
   FxxxReadOnly: Boolean;
   FxxxLargeImages: TCustomImageList;
   FxxxSmallImages: TCustomImageList;
   FxxxStateImages: TCustomImageList;
   FxxxDragImage: TDragImageList;
   FxxxMultiSelect: Boolean;
   FxxxSortType: TSortType;
   FxxxColumnClick: Boolean;
   FxxxShowColumnHeaders: Boolean;
   FxxxListItems: TListItems{TNT-ALLOW TListItems};
   FxxxClicked: Boolean;
   FxxxRClicked: Boolean;
   FxxxIconOptions: TIconOptions;
   FxxxHideSelection: Boolean;
   FListColumns: TListColumns{TNT-ALLOW TListColumns};
 end;



constructor TTntCustomListView.Create(AOwner: TComponent);
begin
 inherited;
 ...
 FreeAndNil(THackCustomListView(Self).FListColumns);
 THackCustomListView(Self).FListColumns := TTntListColumns.Create(Self);
end;


← →
tesseract ©   (2007-01-17 12:50) [1]


> 2. Поля к которым никто не обращается нужны для организации
> смещения FListColumns аналогичного нашему классу?


Возможно им просто зачем-то повышаеться область видимости.


← →
MegaVolt ©   (2007-01-17 13:10) [2]

>Возможно им просто зачем-то повышаеться область видимости.

К этим полям нет обращений вообще!!! Т.е. они написаны но нигде не исспользуются.


← →
evvcom ©   (2007-01-17 14:40) [3]

> [0] MegaVolt ©   (17.01.07 12:43)

1. Можно, но автор выбрал этот путь.
2. Скорее всего да.

Я к таким трюкам прибегаю крайне редко и немного в другом виде. Например, скорее всего в TCustomMultiSelectListControl есть
property HideSelection: Boolean read FxxxHideSelection [write FxxxHideSelection];
тогда
type
 THackRec = record
   FxxxHideSelection: Boolean;
   FListColumns: TListColumns{TNT-ALLOW TListColumns};
 end;
 PHackRec = ^THackRec;
...
 PHackRec(@HideSelection)^.FListColumns.Free;

Но такие вещи лучше не вытворять, а если уж, то попытаться как-то себя обезопасить. Если уверен, что другую версию этих компонент использовать не будешь, то можно и так оставить, если же это возможно, то сделать {$INCLUDE <TNTVersion>.inc} и {$IFDEF <нужная версия>}, то все ок, иначе какую-нить бяку или raise Exception.

Кстати, FreeAndNil там по идее тоже нафиг не нужен. Какой смысл присваивать nil и следом же новый объект?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.043 c
2-1171637200
XpycT
2007-02-16 17:46
2007.03.11
вопрос по mySQL


8-1152602518
_Дима
2006-07-11 11:21
2007.03.11
DSPack. Инсталляция


2-1171978891
vvv_spb
2007-02-20 16:41
2007.03.11
WordDocument


15-1171548486
DrDe
2007-02-15 17:08
2007.03.11
Уперся


2-1171897635
FIL-23
2007-02-19 18:07
2007.03.11
отслеживание нажатия ентера




   Наверх