Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 933

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Нужно создать компонент Edit во время работы программы и отобразить его на созданной вместе с Edit странице PageControl, причем изменять длину Edit вместе с изменением длины формы. Как все это сделать если может создаваться несколько страниц?

Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 21 сентября 2007, 20:27
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Трофимов Евгений!
Для начала можно почитать статью здесь http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
В приложении код, который создаёт новую вкладку, а на ней Edit. Для позиционирования я применяю свойство Anchors. Процедура предполагает наличие PageControl1 на Form1. Если у вас имена другие - разберётесь. Как параметр передаётся имя вкладки. (например так MyProcedure(\'1111\');)
Сразу предупрежу вопрос. "А как достучаться до созданного Edit?"
очень просто. имена их вы увидите. но на момент того, как вы пишете код, имена эти будут неизвестны, поэтому, зная, что владельцем этих Edit есть форма (смотрите код), то мы можем в формы и попросить ссылку на нужный Edit вот такой строкой
TEdit(FindComponent(\'MyEdit1\')).Text := \'Hello!\';

Также вопрос о том, кто должен будет удалять созданные компоненты. Тут всё предельно просто. так как для компонента указан родитель, то он и удалит сам автоматом, когда будет удаляться сам.

Приложение:
  1. procedure MyProcedure(PageCaption:string);
  2. var t:TTabSheet;
  3. e:TEdit;
  4. begin
  5.  
  6. t := TTabSheet.Create(Form1.PageControl1);
  7. t.Caption := PageCaption;
  8. t.PageControl := Form1.PageControl1;
  9.  
  10. Form1.PageControl1.ActivePage := t;
  11.  
  12.  
  13. e := TEdit.Create(Form1);
  14. e.Parent := t;
  15. e.Top := 10;
  16. e.Left := 10;
  17. e.Width := 100;
  18. e.Anchors := [akLeft, akTop, akRight];
  19.  
  20. e.Name := 'MyEdit'+inttostr(form1.PageControl1.ActivePageIndex);
  21. end;
  22.  


Ответ отправил: Вадим К (статус: Академик)
Время отправки: 22 сентября 2007, 00:34
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 30 сентября 2007, 12:59; участников в обсуждении: 2.
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 30 сентября 2007, 12:01 [#1]:

В продолжение темы. Как узнать только имя нажатой кнопки на PageControle? Кнопки могут создаваться динамически.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
Вадим К

Вадим К (статус: Академик), 30 сентября 2007, 12:59 [#2]:

упс. А кнопки мы не создавали. откуда они появились я не знаю. Но напрягая телепатический модуль, предоплагаю, что вы их создаёте по аналогии с Edit
Ну тогда имя вы присвоить им сможете. обработчик приписать тоже не проблема, а само имя нажатой кнопки в обработчике можно узнать так
TButton(Sender).Name
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.