| | | | |
Жизнь и смерть в режиме run-time | Полный текст материала
Другие публикации автора: Елена Филиппова
Цитата или краткий комментарий: «... Материал предназначен для начинающих программистов, умеющих работать с компонентами Delphi в режиме design-time но уже не считающих, что программировать это значит 'накликать мышкой форму'. Никаких интересных моментов для профи статья не содержит, это исключительно учебный материал.
Цель статьи ответить на вопросы и показать :
Каким образом можно создавать и располагать на форме визуальные компоненты?
Каким образом обрабатывать группы компонент, меняя их свойства 'одним махом'?
Как назначать обработчики для разных событий?
Зачем нужно свойство Tag?
Как можно двигать компоненты по форме?
И все это - во время работы программы (режим run-time).
...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 39 | 97.5% | | | | Ничего особенно нового и интересного | [2] | 1 | 2.5% | | | | Написано неверно (обязательно укажите почему) | [3] | 0 | 0% | | Всего проголосовали: 40 | | | Все понятно, материал читается легко | [1] | 36 | 90% | | | | Есть неясности в изложении | [2] | 4 | 10% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 40 |
[Создание компонентов в run-time] [Обработчики событий] [Координаты компонент, относительное расположение.] [Процедурные типы]
Отслеживать это обсуждение
Всего сообщений: 3614-11-2013 04:37Спасибо! Довольно интересный и познавательный материал. |
|
04-07-2013 02:20Большое спасибо за статью! Особенно за описание свойства Tag! Это позволило значительно упростить код и ускорить его работу! |
|
29-01-2012 22:56to Dimkas:
С вопросами милости просим на Круглый Стол
Здесь же идет обсуждение материала. Высказали свое сожаление, что нет информации о создании страниц на PageControl и достаточно. |
|
29-01-2012 17:01Пробовал создавать страницы в компоненте TPageControl. Страницы видимо создаются, но их не видно. При закрытии вообще Exeption непонятный. Нигде не нашел описания этого, в частности у Вас. Оч жаль :(
Тоже очень интересует етот вопрос??????
|
|
15-07-2011 03:45Автору огромное спасибо, статья очень помогла разобраться с динамическим созданием компонентов. |
|
07-03-2010 03:33"...Вообще, почаще читайте исходники..."
+ 1000
Статья - свежая идея для осваивающих Delphi. И хотя о создании компонент написано уже много, на моей памяти никто не удосуживался написать так подробно -- везде было Create, Parent, и всё. |
|
05-02-2010 04:09Елене огромное спасибо за статью!
Где-то в Интернете нашел способ как можно двигать компоненты по форме. Например, двигаем по форме обычную кнопку (Delphi 7 + Windows XP)
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
(Sender as TControl).Perform(WM_SYSCOMMAND, $F012, 0);
end;
|
|
03-10-2008 02:50Благодарю за материал, Елена.
Особенно потому, что не нашел других хороших статей на эту тему. Мне пригодилось, несмотря на то, что не первый год программирую. |
|
06-09-2008 16:07Отличная статья, материал изложен чётко и в доступной форме, подробно откоментирована почти каждая строчка,
Читать было одно удовольствие, спасибо :) |
|
26-05-2008 01:19ЗЫ а статья очень интересная :) |
|
26-05-2008 01:18to Валера Туз
Чтоб сохранить в дизайн-тайм, при выходе сохраняй инфу в bla-bla.DFM и bla-bla.PAS, для понятливости создай пустой проект и проект с кнопкой, а потом сравни их. А чтоб избавиться от OnClick, сделай чекбокс - при включенном таскаем кнопку, при выключенном её нажимаем. |
|
12-01-2007 14:25а можно назначать обработчики событий, только в dll, я пробовал, даже не компилируется. Помогите как это сделать в длл. |
|
22-08-2006 02:20Статья полезна. Особенно приятно, что написано добротным русским языком. |
|
20-06-2006 12:36Вроде не студент, а пригодилось ;о)
Кстати, этот материал по книгам - у Архангельского не нашел, у Пачека досадная опечатка. Понял ее только после прочтения Вашей статьи. |
|
17-12-2004 12:26Клевая статья.
Когда я начал реализовывать в своей работе то, что описано в статье, возникли некоторые вопросы:
1. А как бы сохранить потом те компоненты, что я настроил себе в виде некоего шаблона? Можно ли настроенно в ран-тайме "зашить" в дизайн-тайм?
2. И в каком направлении все же копать, чтобы не срабатывало событие OnClick при перетаскивании? |
|
20-11-2004 01:57сообщение от автора материала Вы правы, в данном конкретном примере разницы между двумя формами записи условия нет.
Но, когда в одном из операндов сложного условия есть проверка на существование указателя, я
иногда пишу условие "лесенкой", особенно, когда пишу код "на вынос".
И вот почему:
В Delphi существует два варианта выполнения логических выражений.
1) Выполнение вычисления логического выражения останавливается, как только встречается операнд, который делает
условие заведомо ложным или истинным, без окончательной проверки всех частей логического выражения.
2) Вычисляется ПОЛНОЕ логическое выражение и только после этого его значение используется далее.
Какой из вариантов работает в данный момент, определяется или опцией или директивой компилятора.
В опциях компилятора это Complete boolean eval — по умолчанию она отключена, то есть используется первый способ вычисления.
Директива компилятора это:
{$B+} — включает режим полного вычисления логического выражения ( способ №2 )
{$B-} — выключает этот режим ( способ №1 )
То есть, если Вы работаете с умолчанным значением этой опций компилятора, тогда, конечно,
никакой разницы в двух следующих вариантах записи условия нет:
(*)
IF TagPtr <> nil
Then IF TagPtr Is TCheckBox
Then TCheckBox(TagPtr).Checked:=True;
(**)
If(TagPtr <> nil)And(TagPtr Is TCheckBox)
Then TCheckBox(TagPtr).Checked:=True;
Если TagPtr = nil, то вычисление условия сразу прекратиться и дальнейшие сравнения не будут выполняться.
Но, если будет включен второй вариант вычисления логического выражения, то упрощенная форма (**) записи этого IF выполнит ВСЕ проверки в условии, а указатель-то пустой!
В приведенном примере второе условие выполнится, даже если TagPtr = nil.
Но, если в других частях условия было бы обращение к полям этого TagPtr, то мы на этом условии получили бы AV.
В общем случае, вариант (*) является более защищенным.
Хотя, если Вы знаете наверняка, что работаете в режиме {B-}, то можно со спокойной душой использовать вариант (**)
В своих проектах я тоже использую обычно упрощенную запись условий. Но иногда вспоминаю и про второй режим...
Так что, сложный вариант записи в данном случае не является необходимым, но иногда на это стоит обращать внимание.
Особенно, если Ваш код будет компилироваться с заранее неизвестным значением этой опции компилятора. |
|
19-11-2004 18:57Большое спасибо за статью, действительно, во многом поучительная.
Если разрешите, вопрос маленький (думаю, на Круглом столе не стоит такие мелочи писать :).
Вы пишете
/Var TagPtr : Ponter;
/...
/TagPtr:=Ptr(TMenuItem(Sender).Tag);
/IF TagPtr <> nil
/Then IF TagPtr Is TCheckBox
/ Then TCheckBox(TagPtr).Checked:=True;
Можно ли писать условие If так (разумеется, же при отсутствии заявления Else конкректно на условие "TagPtr <> nil"):
If(TagPtr <> nil)And(TagPtr Is TCheckBox)
Then TCheckBox(TagPtr).Checked:=True;
Я столкнулся с этим, но в моем случае условий было больше, вроде никаких конфликтов с этим связанных не встречал (не подумайте что этот вопрос является укором или еще чем-нибудь :).
Спасибо за ответ
|
|
18-11-2004 01:10"(Edit + IntToStr(i)).Text:=''"
На самом деле есть одно простое решение этой проблемы, а именно:
TEdit(Form1.FindComponent('Edit'+inttostr(ш))).Text:='';
Список всех компонентов на форме получается так:
Form1.ComponentCount
Шлите на мыло вопросы, если что-то не понятно. |
|
14-07-2004 22:26Уважаемая Елена!!! Большое спасибо за статью!!! Очень понравилось!!! |
|
15-05-2004 08:41сообщение от автора материала Без кода ничего сказать невозможно.
Вопросы лучше задавать на Круглом столе. |
|
15-05-2004 05:10Пробовал создавать страницы в компоненте TPageControl. Страницы видимо создаются, но их не видно. При закрытии вообще Exeption непонятный. Нигде не нашел описания этого, в частности у Вас. Оч жаль :(
|
|
15-05-2004 05:08Пробовал создавать страницы в компоненте TPageControl. Страницы видимо создаются, но их не видно. При закрытии вообще Exeption непонятный. Нигде не нашел описания этого, в частности у Вас. Оч жаль :( |
|
15-08-2002 10:59Вообще говоря Owner-ом как правило выступает сама форма. Во всех источниках и хелпе это именно так. Хотя конечно можно совместить Parent и Owner |
|
25-06-2002 20:21Разобрался. Открывать стандартное приложение.
А просмотр формы: View,Forms...,(Shift-F12),Forms1,OK. |
|
20-06-2002 17:12Я попытался этот исходник заново набрать(*), один к одному,
буква к букве, но с момента открытия нового проекта.
И уже появились вопросы. Какой проект открывать?
Вроде не консольное приложение, но и не стандартное
приложение (форма отсутствует). А какой тогда?
* - путем выделить,копировать,вставить. |
|
04-03-2002 12:42Благодаря этой статье ваше 'Королевсво' попало ко мне в Favorites :))
Бальшое СПАСИБА |
|
10-12-2001 13:42Просто отлично.
Но мнебы хотелось узнать и про то как перемещает и изменяет размеры обьектов сам делфи.Сообщение не подписано |
|
25-10-2001 11:08Мне понравилось. Не потому, что автор - Королева. А потому-что - мне понравилось и нашел массу полезного для себя. |
|
18-07-2001 20:55Хорошая статья. Пример, как надо писать статьи в этот раздел. |
|
21-03-2001 18:27Статья несомненно нужная. Но, вряд-ли она для новичков, и не для некоторых 'профи', как анотировано! Некоторые из первых- могут и не разобраться, а для некоторых из вторых- есть шанс узнать ещё один ма-аа-ленький нюанс, найти которые с Inc 'профи ....' всё труднее :( и познание, которых- является повышением ентого ' проф.... '. С ув. Михаил. |
|
12-03-2001 12:56Отличная статья! Особенно приятно сопровождение примером (исходником). Сообщение не подписано |
|
19-12-2000 07:43Nuzno bilo eshe podrobnee! Klassniy material. |
|
13-12-2000 10:02Всей душой ЗА такие статьи. Во-первых, никто не спорит с тем, что ничто не заменит собственного опыта и вообще полезно самому поломать голову. Но есть еще критичный параметр - время, а кроме того, кое-кто в школе учил совсем не английский, а даже наоборот - немецкий:))))) и хелп ему читать-просто мука. И хорошо и полезно почитать материал, открывающий работу среды с объектами; и успокаивает волнение души сознание, что кто-то не так уж далеко от тебя со всем этим разобрался:)Приятно, конечно, скривить нос и сказать, что все это просто, но лично меня от этого всегда будет удерживать воспоминание, как я, начиная работать с делфи, промучалась целый день или два, соображая, как бы мне пересчитать визуальные свойства компонентов в зависимости от разрешения экрана(не устраивал scale). Екатерина. |
|
07-12-2000 11:08Больше таких статей и чище станут форумы и конференции ;-)
|
|
06-12-2000 20:50Можно было и попроще.
Краткость сестра таланта.
|
|
06-12-2000 20:50Можно было и попроще.
Краткость сестра таланта.
|
|
|
|