Шаг 81 - Создание компонентов. Описание методов и свойств

Ну, во-первых, поскольку компонент мы наследуем, а не создаем с нуля, то, казалось бы, кое-какие свойства у него уже есть. Я больше скажу - свойств у него более чем достаточно, особенно от предков TComponent и TObject. Однако большинство этих свойств нам не нужны. Поэтому... А поэтому будем все делать сами... Ниже будет код, со всеми нужными свойствами, методами и событиями:

//----------------------------------

#ifndef FolderDialogH
#define FolderDialogH

//----------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//----------------------------------
class TFolderDialog;

typedef enum { fdBrowseForComputer,fdBrowseForPrinter,fdDontGoBelowDomain,
		fdReturnOnlySysAncestors,fdReturnOnlySysDirs,
		fdStatusText} TFolderDialogFlags;

typedef Set <TFolderDialogFlags,fdBrowseForComputer,fdStatusText> TFlagSet;

int __stdcall FolderBrowseProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData);
typedef void __fastcall(__closure *TFolderChangedEvent)(TFolderDialog *Sender, AnsiString NewFolder);

class PACKAGE TFolderDialog : public TCommonDialog
{
friend int __stdcall FolderBrowseProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData);
private:
protected:
AnsiString FFolder;
AnsiString FTitle;
AnsiString FStatusText;
bool FOkEnabled;
HWND FHandle;
TFlagSet FOptions;

void __fastcall SetFolder(AnsiString folder);
void __fastcall SetOkEnabled(bool enabled);
void __fastcall SetStatusText(AnsiString text);

TNotifyEvent FOnShow;
TNotifyEvent FOnClose;
public:
	TFolderChangedEvent FOnFolderChanged;
	__fastcall TFolderDialog(TComponent* Owner);

	void __fastcall Execute(void);

	__property HWND Handle = {read = FHandle, write = FHandle, default=NULL};
	__property AnsiString Folder = {read = FFolder, write = FFolder};
	__property bool OkEnabled = {read = FOkEnabled, write = SetOkEnabled};

__published:
	__property TFolderChangedEvent OnFolderChanged = {read = FOnFolderChanged, write = FOnFolderChanged};
	__property TNotifyEvent OnShow = {read = FOnShow, write = FOnShow};
	__property TNotifyEvent OnClose = {read=FOnClose, write=FOnClose};

	__property AnsiString StatusText = {read = FStatusText, write = SetStatusText};
	__property AnsiString Title = {read = FTitle, write = FTitle};
	__property TFlagSet Options = {read = FOptions, write = FOptions};
};
//----------------------------------
#endif
#endif

Это каркас свойств для наиболее полного использования функции SHBrowseForFolder. Как Вы видите, даже в таком простом примере полно всякой всячины - метода записи свойств, значения по умолчанию, множества и прочее... Помимо прочего еще и описана функция FolderBrowseProc, которая является friend функцией. Надеюсь, Вы еще помните, что это такое, поскольку я за последнее время видел довольно малое число классов, использующих дружественные функции. Зачем это надо? Для доступа к защищенным полям естественно... Конкретнее? Все станет ясно в следующем шаге.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 07.09.2002