Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание компонентов [D5, WinXP]


Юрий К ©   (2002-10-13 23:51:00) 

Уважаемые мастера!

Есть модуль ( без формы ), потребовалось вызвать SaveDialog
пишу:

uses Dialogs;

var S:TSaveDialog;
begin
S:=TSaveDialog.Create(self);
...

а компилятор этот self напрочь признавать не хочет!
и не позволяет использовать SaveDialog из модуля c формой
как быть?
Заранее спасибо!


Юрий К   (2002-10-14 20:50:00) [1]

Еще раз большое спасибо за подробное разъяснеие! :))


Юрий Зотов   (2002-10-14 00:51:00) [2]

А с чего бы компилятору признавать необъявленную переменную Self?

В методах классов Self - это неявно передаваемый параметр и о нем компилятор знает. Но это только в методах классов, а за их пределами Self ничего не означает, это обычный идентификатор, не более.

Вместо Self можно использовать nil. Только надо помнить, что тогда компонент останется без владельца, а это значит, что удалять его тоже нужно ручками.

Если диалог вызывается из нескольких мест, то удобно написать функцию - оболочку, типа такой:

function GetSaveFileName(...): string;
begin
with TSaveDialog.Create(nil) do
try
... // Настройка диалога
if Execute then Result := FileName else Result := ""
finally
Free
end
end;

Вызов:

FileName := GetSaveFileName(...);
if FileName <> "" then ... // Запись файла


Billy   (2002-10-14 00:34:00) [3]

А что такое по-твоему этот self? Если ты не знаешь/забыл, то self - это указатель на конкретный экземпляр класса, вызвавшего какой-либо метод этого класса.
В твоем случае можно использовать nilвместо self, но тогда ты сам будешь следить за его уничтожением.


Наверх

Титульная страница Поиск, карта сайта Написать письмо