Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.09 c
2-1141896678
VitV
2006-03-09 12:31
2006.03.26
Использование LookUpField с отображением в dbgrid


2-1141966444
Mozart
2006-03-10 07:54
2006.03.26
Модем


2-1142251809
Fenix
2006-03-13 15:10
2006.03.26
Печть SynEdit a


2-1142312072
Гога
2006-03-14 07:54
2006.03.26
ООП


3-1138806707
Serg2103
2006-02-01 18:11
2006.03.26
SCOPE_IDENTITY() не всегда корректно выполняется