Главная страница
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.048 c
3-1138697727
Ткаченко Сергей
2006-01-31 11:55
2006.03.26
получать в запросе новые поля, полученные из существующих???


6-1134547980
BANick
2005-12-14 11:13
2006.03.26
Помогите разобратся со скачкой файлов через прокси(TclientSocket)


1-1140433457
Asker
2006-02-20 14:04
2006.03.26
Артефакты в TreeView


6-1134651321
Plastic Angel
2005-12-15 15:55
2006.03.26
Я в шоке...


3-1138877901
Alex_1234
2006-02-02 13:58
2006.03.26
Группировка по временным интервалам...