Текущий архив: 2006.03.26;
Скачать: CL | DM;
ВнизКак обратиться к memo созданнуму в рантайме? Найти похожие ветки
← →
Barsky © (2006-03-07 16:14) [0]Есть форма. На ней кнопка
procedure TForm1.Button1Click(Sender: TObject);
var m: TMemo;
begin
m:=TMemo.Create(Application);
m.Parent:=Form1;
m.Visible:=true;
end;
При нажатии на нее, появляется memo.
Как потом к этому memo обратиться?
← →
Virgo_Style © (2006-03-07 16:20) [1]очевидно, надо m сделать свойством окна, или глобальной переменной. Хотя можно и искать это Memo каждый раз, но зачем?
← →
Barsky © (2006-03-07 16:26) [2]А как "искать"?
← →
API © (2006-03-07 16:36) [3]А как "искать"?
Вас же в [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:43) [4]Спасибо!
ЗЫЖ По поводу "Зачем?". Нужно динамически создовать произвольное количество форм. На каждой форме 1 объект - мемо. При закрытии форм, нужно обробатывать мемо.текст.
← →
Virgo_Style © (2006-03-07 17:38) [5]ХМ! А зачем динамически создавать Memo? По логике, достаточно создавать соотв. описанную форму с "предустановленным" Memo...
← →
API © (2006-03-07 17:39) [6]Нужно динамически создовать произвольное количество форм
Тогда как расценивать вот эту строку в Вашем примере: 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".
Страницы: 1 вся ветка
Текущий архив: 2006.03.26;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.036 c