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

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

Как обратиться к memo созданнуму в рантайме? [D7, 2000]


Barsky ©   (2006-03-07 16:14:00) 

Есть форма. На ней кнопка

procedure TForm1.Button1Click(Sender: TObject);
var m: TMemo;
begin
m:=TMemo.Create(Application);
m.Parent:=Form1;
m.Visible:=true;
end;


При нажатии на нее, появляется memo.
Как потом к этому memo обратиться?


API   (2006-03-07 17:39:00) [1]

Нужно динамически создовать произвольное количество форм

Тогда как расценивать вот эту строку в Вашем примере: m.Parent:=Form1;?

Вы бы поконкретнее описание привели.

Обратите внимание, что если именовать компоненты как в вопросе (а потом уже и в [3]), то может возникнуть конфликт имен, так как владельцем экземпляра TMemo является Application.
Поэтому, именовать компоненты следует или с использованием какого-то счетчика, например:

Name := 'RunTimeMemo' + IntToStr(Counter);

Или использовать в качестве Owner'а разные компоненты, например,

constructor TForm1.Create(AOwner: TComponent);
begin
 <...>
 with TMemo.Create(Self) do
 begin
   Name := 'RunTimeMemo';
   <...>
 end;
end;


В последнем примере владельцем Memo будет экземпляр класса TForm1, и тогда в пределах каждой формы будет свой компонент с именем 'RunTimeMemo'.


Virgo_Style   (2006-03-07 17:38:00) [2]

ХМ! А зачем динамически создавать Memo? По логике, достаточно создавать соотв. описанную форму с "предустановленным" Memo...


Barsky   (2006-03-07 16:43:00) [3]

Спасибо!

ЗЫЖ По поводу "Зачем?". Нужно динамически создовать произвольное количество форм. На каждой форме 1 объект - мемо. При закрытии форм, нужно обробатывать мемо.текст.


API   (2006-03-07 16:36:00) [4]

А как "искать"?

Вас же в [1] риторически спросили: "зачем?"

type
 TForm1 = class(TForm)
 <...>
 private
   m: TMemo; // Вот он, и искать не надо...
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 m := TMemo.Create(Application);
 m.Parent := Form1;
 m.Visible := true;
end;


А если, все же, хочется искать, то:

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TMemo.Create(Application) do
 begin
   Parent:=Form1;
   Visible:=true;
   Name := 'RunTimeMemo';
 end;
end;

var
 c: TComponent;
 m: TMemo;
begin
 c := Application.FindComponent('RunTimeMemo'); // Поиск - по имени
 if (c <> nil) and (c is TMemo) then
 begin
   m := TMemo(c);
   <...>
 end;
end;


Barsky   (2006-03-07 16:26:00) [5]

А как "искать"?


Virgo_Style   (2006-03-07 16:20:00) [6]

очевидно, надо m сделать свойством окна, или глобальной переменной. Хотя можно и искать это Memo каждый раз, но зачем?


Наверх

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