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