![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание компонентов [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, но тогда ты сам будешь следить за его уничтожением.