• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

использование динамической компоненты

  • Автор темы Автор темы infeter
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
I

infeter

создал динамический компонент tlistbox. привязал к нему событие через свою процедуру. в этой процедуре могу определить как, например,

Код:
procedure TFormMain.ClickMyList(Sender: TObject);
var
my: TListBox;
memo: TMemo;
begin
my:=(Sender as TListBox);
showmessage(my.Items.Strings[my.ItemIndex]);
end;

теперь МОЙ ВОПРОС. как Вы уже, наверное, заметили, я хочу передать имя выбранного значения tlistbox в TMemo. проблема в том, что эта TMemo тоже была создана динамически... имя, например, Memo0. как мне сослаться на Memo0 через переменную из моей процедуры, чтобы изменить там текст?

я в тупике... :rolleyes:
 
теперь зарегистрировался. срочно нужна помощь. скоро работу сдавать...
 
Код:
procedure TFormMain.ClickMyList(Sender: TObject);
var
my: TListBox;
memo: TMemo;
begin
my:=(Sender as TListBox);
If FormMain.FindComponent('Memo0')<>nil then
If FormMain.FindComponent('Memo0') is TMemo then
begin
memo:=FormMain.FindComponent('Memo0');
memo.Lines.Add(my.Items.Strings[my.ItemIndex]);
end;
//showmessage(my.Items.Strings[my.ItemIndex]);
end;
 
Для: zubr
странно. у меня вообще ничего не работает... не определяет. плюс ещё надо сделать, чтобы компилировалось, вот так:
Код:
memo:=TMemo(FormMain.FindComponent('Memo0'));

блин.... ща думаю, в чём проблема...
 
короче если просто создать на форме компонент статически, а не динамически, то работает:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
memo: TMemo;
begin
memo:=Form1.FindComponent('Memo1') as TMemo;
memo.Lines.Add('s');
end;
а вот если динамически, то у меня AccessViolation Error... млин...
 
всё. разобрался... надо просто указывать в моём случае:
Код:
memo:=application.FindComponent('Memo1') as TMemo;
т.к. я делаю так:

Код:
With TMemo.Create(application) do
 begin
  Name:='Memo'+inttostr(i);
 end;
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab