Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Как обратиться к 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.029 c
2-1141845624
Новочеркасский Волк
2006-03-08 22:20
2006.03.26
Подскажиет коды для "вредных" клавиш.


15-1141040158
DesertAlex
2006-02-27 14:35
2006.03.26
Важно! Вопрос не по программированию. Delphi или VB?


2-1141730384
Новичоккк
2006-03-07 14:19
2006.03.26
Проблема с Handle процесса


2-1141986651
1й2ц3у4к5е
2006-03-10 13:30
2006.03.26
Тип Делфи


2-1142183531
Din
2006-03-12 20:12
2006.03.26
Как удалить и скопировать файлы по маске?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский