Главная страница
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.032 c
2-1171743542
Странник81
2007-02-17 23:19
2007.03.11
Можно ли вывести содержимое ячеек StringGrid в динамический масси


3-1166286687
Edd
2006-12-16 19:31
2007.03.11
Фильтрация записей ADOTable


15-1171538435
Ega23
2007-02-15 14:20
2007.03.11
Миграция с Delphi5 на Delphi7


2-1171637200
XpycT
2007-02-16 17:46
2007.03.11
вопрос по mySQL


2-1171965728
lic
2007-02-20 13:02
2007.03.11
Процедура, требующая параметры типа pointer