Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.11;
Скачать: 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 вся ветка

Текущий архив: 2007.03.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1169191653
mess
2007-01-19 10:27
2007.03.11
WMQueryEndSession


2-1171228788
Alban
2007-02-12 00:19
2007.03.11
Подсчёт трафика в Delphi


8-1150456899
!_SM_!
2006-06-16 15:21
2007.03.11
Проиграть звук


9-1145199906
Kaviss
2006-04-16 19:05
2007.03.11
ODE dSpaceCollide (space,nil,nearCallback); ошибка


15-1170403109
BiN
2007-02-02 10:58
2007.03.11
Толерантность прежде всего