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

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

использование 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]

Оригинальная идея переноса. :)


Наверх

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