![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
использование TStringList в доп. модуле
Pcrepair © (2012-12-23 21:36:00)Добрый день. есть главная форма, при onCreate создается ГлобПерем типа TStringList, при onClose она ликвидируется. все работает
При переносе ГлобПерем в отдельный модуль
unit uGlobalVar;
interface
uses Classes, SysUtils, Forms;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
var
gStore: TStringList; (*ГП для хранения строк*)
implementation
uses Unit1;
(*создаем ПЕРЕМ при запуске приложения*)
procedure FormCreate(Sender: TObject);
begin
gStore:=TStringList.Create;
end;
(*уничтожаем ПЕРЕМ при выходе из приложения*)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(gStore);
end;
end.
при попытке записать строку в gStore выходит исключение. понятно что не создается ГлобПерем
Внимание! Вопрос: что не так в выше приведенном коде. вроде есть ссылка на модуль главной формы. почему не создается gStore при запуске приложения?
Германн (2012-12-25 03:23:00) [1]
> Запусти программу клавишей F7 и посмотри по шагам что зачем
> выполняется - станет понятен порядок выполнения.
>
Это не барское/царское дело - отлаживать программу для автора, который собирает своего монстра по заповедям доктора Франкенштейна.
Дмитрий С (2012-12-25 03:00:00) [2]
> Pcrepair © (24.12.12 20:23) [11]
Если разберешься в этих вопросах сам, ты сильно продвинешься в программировании на delphi.
Но я тебе не дам такого шанса:)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
Эти строки Slym просто забыл стереть.
Запусти программу клавишей F7 и посмотри по шагам что зачем выполняется - станет понятен порядок выполнения.
Сергей М. (2012-12-24 20:51:00) [3]
> Slym...зачем
>
> procedure FormCreate(Sender: TObject);
> procedure FormClose(Sender: TObject; var Action: TCloseAction);
> ..?
Как это мило.
Pcrepair (2012-12-24 20:23:00) [4]Slym, спасибо за подсказку, но зачем
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
и вот это
gStore: TStringList=nil;, в смысле NIL. разве при инициализации оно не пусто и так?
во всяком случае gStore: TStringList; тоже работает без утечки памяти
у меня на главной форме еще есть
initialization
ReportMemoryLeaksOnShutdown := true;
brother (2012-12-24 12:18:00) [5]> unit uGlobalVar;
и добавить его первым...
Slym (2012-12-24 07:41:00) [6]
unit uGlobalVar;
interface
uses Classes, SysUtils, Forms;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
var
gStore: TStringList=nil; (*ГП для хранения строк*)
implementation
initialization
gStore:=TStringList.Create;
finalization
FreeAndNil(gStore);
end.
Германн (2012-12-24 01:22:00) [7]
> зачем чесать правое ухо левой рукой?
Тут скорее "чесать правое ухо левой пяткой" :)
Медвежонок Пятачок (2012-12-23 23:28:00) [8]Потому что правая уже занята.
Чешет левое ухо.
Юрий Зотов (2012-12-23 23:21:00) [9]
> Pcrepair © (23.12.12 21:36)
А можно поинтересоваться - зачем чесать правое ухо левой рукой?
Сергей М. (2012-12-23 22:45:00) [10]
> как ее вызвать в доп. модуле?
Ты не поверишь - точно так же как и любую процедуру в любом модуле.
Медвежонок Пятачок (2012-12-23 22:39:00) [11]Конструктор формы вызвать конечно же.
Раз уж места лучше чем ОнКриэйт не нашел
Pcrepair (2012-12-23 22:32:00) [12]и как ее вызвать в доп. модуле?
Сергей М. (2012-12-23 22:10:00) [13]
> почему не создается gStore при запуске приложения?
Потому что не вызвана процедура FormCreate.
знайка (2012-12-23 22:08:00) [14]Оригинальная идея переноса. :)