Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.037 c
3-1138708213
Андрей1223
2006-01-31 14:50
2006.03.26
Добавление в запрос сравнения с текущей датой Опции


2-1141626781
K_Val
2006-03-06 09:33
2006.03.26
Программа без среды Delphi


3-1138960955
Nailspb
2006-02-03 13:02
2006.03.26
Глюки


15-1141571862
LordOfRock
2006-03-05 18:17
2006.03.26
Убедите меня....


5-1127814102
Schooler
2005-09-27 13:41
2006.03.26
TOwnedCollection и стандартный редактор.




   Наверх