Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание компонентов Найти похожие ветки
← →
Юрий К (2002-10-13 23:51) [0]Уважаемые мастера!
Есть модуль ( без формы ), потребовалось вызвать SaveDialog
пишу:
uses Dialogs;
var S:TSaveDialog;
begin
S:=TSaveDialog.Create(self);
...
а компилятор этот self напрочь признавать не хочет!
и не позволяет использовать SaveDialog из модуля c формой
как быть?
Заранее спасибо!
← →
Billy (2002-10-14 00:34) [1]А что такое по-твоему этот self? Если ты не знаешь/забыл, то self - это указатель на конкретный экземпляр класса, вызвавшего какой-либо метод этого класса.
В твоем случае можно использовать nil вместо self, но тогда ты сам будешь следить за его уничтожением.
← →
Юрий Зотов (2002-10-14 00:51) [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 ... // Запись файла
← →
Юрий К (2002-10-14 20:50) [3]Еще раз большое спасибо за подробное разъяснеие! :))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.009 c