Форум: "Основная";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
ВнизПодскажите как работает нижепривелённый код ил 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c