Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
1-1169029785
MegaVolt
2007-01-17 13:29
2007.03.11
Какой шрифт использовать для многоязычных программ.


3-1166345336
VadimSpb
2006-12-17 11:48
2007.03.11
DBCC CHECKDB, DBCC DBREINDEX


6-1149689410
Damaty
2006-06-07 18:10
2007.03.11
SHH


2-1171808352
Novichok_new
2007-02-18 17:19
2007.03.11
БД Paradox


4-1162469151
toboom
2006-11-02 15:05
2007.03.11
Проблема использования таймера из MMSystem





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский