28.10.2019

Создание составного компонента в делфи. Пособие по созданию своих компонент на Delphi. Создание сложного компонента


Социальность цензуры определена тем, что характер общественных отношений и условия взаимодействия различных общественных институтов, социальных слоев, групп и индивидов в обществе в значительной мере зависят от качества и объема информации, циркулирующей в социуме, заинтересованном в укреплении стабильности своего бытия и вырабатывающем для достижения этой цели особые средства. Цензура, непосредственно осуществляющая регулирование информационных потоков, служит одним из важнейших механизмов предохранения общества от энтропии, защиты его политических и моральных устоев. Она способна воспрепятствовать распространению в обществе аномии, не допустить эксцессов экстремизма, шовинизма, расизма, национализма, антисемитизма и иных негативных явлений .

Однако роль цензуры как гаранта заданного вектора социального развития неоднозначна. Наступает время, когда в обществе начинает проявляться необходимость осуществления изменений прежде привычных отношений, что возможно только при условии поступления сильного инновационного импульса. В этом случае цензура может оказаться серьезной преградой на пути к этим изменениям, если она "по-своему" интерпретирует действительную и мнимую новизну. Следовательно, по ее решениям можно судить о мере готовности контролирующей инстанции, подчиненной управленческой элите, к восприятию нового, к корректировке избранного направления движения при данных исторических обстоятельствах.

Цензура является порождением общества, которому нужны сдерживающие начала, инструменты, предотвращающие разрушение его организма. Она представляет собой своеобразный пример действия инстинкта самосохранения в социуме, стремящемся ограничивать девиации своих членов. Производя отбор информации на основе принятых в данном обществе образцов и норм, цензура выносит вердикт о степени ее соответствия социальным рамкам, установленным для живущих в нем людей, и тем самым предопределяет общественное восприятие того или иного факта. Таким образом, она участвует в формировании ценностных ориентации. Но в этом скрыта и серьезная опасность, поскольку давление цензуры может повлечь за собой консервацию отживших свой век социальных институтов .

Действие цензуры осуществляется отчасти публично, отчасти латентно и зависит от состояния общества и его культуры. Будучи искусственной подсистемой, цензура служит укреплению "родительских" систем, но при определенных условиях способна "автономизироваться" от истинных общественных потребностей и перейти в режим "самогенерации", то есть к поиску и уничтожению "врагов", что неизбежно начинает приводить к саморазрушению всего социокультурного организма. Итак, цензура, с одной стороны, способна оберегать культуру, а с другой она может ослаблять ее, преграждая путь культуротворческим токам.

Режим функционирования цензуры имеет прямое отношение к развертыванию двух тенденций: к дифференциации и интеграции в пространстве единого и динамичного поля культуры. Это связано с тем, что в обществе всегда присутствует стремление упорядочить процессы взаимодействия между его различными культурами и субкультурами. Итак, важно учитывать степень зависимости социодинамики культуры от цензуры, так как именно с ней связан определенный порядок функционирования гетерогенной культуры в социуме .

Если формируется "закрытое" общество, то социальность, основанная на позициях превратно понятой общественной пользы, доминирует, и цензура отчуждается от культурной традиции, работает против нее и, в конечном счете, против самого социума. Если же цензура нормально действует в цивилизованном обществе, строго соблюдая установленные правила и нормы, успешно удовлетворяет его потребности в защите фундаментальных человеческих ценностей, то в ней гармонично сочетаются оба начала: социальное и культурное.

Власть как предпосылка, условие возникновения и развития цензуры, обеспечивает выполнение ее главных функций:

1) функции контроля, которая заключается в систематическом отслеживании, оценке, классификации и селекции социальной информации согласно принятым нормам ее производства и обращения;

2) функции регламентирующей, направленной на определение критериев и установление порядка циркуляции информации посредством составления рекомендаций, предписаний, указаний, замечаний, запрещений и проч.;

3) охранительной функции, позволяющей содержать в тайне государственные, военные и другие секреты;

4) репрессивной функции, нацеленной на наказание виновных в нарушении правил цензуры;

5) манипулятивной функции, выражающейся в том, что цензура, регулируя потоки информации, определенным образом воздействует на восприятие фактов и принятие решений;

6) профилактической функции, призванной предупредить конфликтные ситуации;

7) санкционирующей функции, обеспечивающей прохождение в социальное пространство информации двух видов: первозданной, не претерпевшей изменений, и искаженной, адаптированной цензурой;

8) эталонизирующей функции, представляющей собой фиксацию и закрепление в социокультурном континууме определенных образцов (произведений искусства, художественных направлений и стилей, научных теорий и т.д.);

9) функции стимуляции общественного интереса, которая обусловливает повышение и пробуждение внимания к малодоступной информации со стороны непосвященных .

Помимо перечисленных функций цензура выполняет еще и ряд сопутствующих: регулятивную, коммуникативную, трансляционную и др. Их подавляющее большинство (за исключением манипулятивной), если они не переходят в "свое иное", имеет положительную направленность. Но, вопреки своей природе, цензура часто используется различными социальными субъектами во вред обществу и культуре.

Перечислим некоторые обобщенные характеристики цензуры как социального института в наше время:

а) сфера ее деятельности связана прежде всего с социальной информацией;

б) есть специальные цензурные учреждения. Это различные государственные органы (министерства, отделы и т.д.), общественные организации (фонды, объединения, комиссии, комитеты, партийные органы и др.), религиозные учреждения (синод, управления и советы по надзору за литературой богословского содержания и др.) и определенная группа должностных лиц - цензоров, которые выполняют соответствующие функции (в отдельных случаях их обязанности переходят к редакторам, экспертам, консультантам и т.д.);

в) нормы и принципы ее деятельности задаются правовыми актами государства, служебными инструкциями, уставами общественных организаций, принятыми в обществе критериями морали;

г) к материальным средствам, используемым цензурой, относятся специальное оборудование, необходимое для просмотра и хранения фото-, кино - и телематериалов, прослушивания радиопередач и магнитофонных записей, перлюстрации писем и т д. .

По верному замечанию Э. Дюркгейма, не существует института, который бы в определенный момент не вырождался . В случае с цензурой это утверждение справедливо, однако лишь в отдельных случаях.

Аналогом цензуры на обыденном уровне можно считать общественное мнение, в основе которого авторитет и традиции. Табуируя отдельные темы (и даже слова), оно следит за тем, чтобы обсуждение протекало в определенных рамках. Конечно, официальная цензура нередко расходится в своих оценках с общественным мнением (например, в нашем недавнем прошлом это касалось творчества B. C. Высоцкого). Литературно-художественная критика при определенных условиях также способна брать на себя функции цензуры. Вливаясь в ее систему, она начинает выполнять не только миссию контролера, регулятора, создателя эталона, но и "доносчика", указывающего властям на "вредные" произведения .

В традиционных и новейших цензурных институтах отражается разнообразие ее субъектов. Их всех можно рассматривать как субъектов-исполнителей ("цензоров"). Можно выделить также еще один разряд - "заказчиков", то есть субъектов, более или менее активно поддерживающих деятельность "цензоров", но непосредственно в ней не участвующих. Это могут быть как индивиды, так и определенные социальные группы и организации, осознающие потребность в защите собственных интересов и принципов при помощи подобного рода средств. Для этого они привлекают "цензоров" и, как правило, стремятся обосновать свои притязания, подводя под них нормативно-правовые регуляторы. Иногда это делается post factum (достаточно в качестве примера сослаться на эпизод, когда Генеральная прокуратура Российской Федерации предъявила претензии к телекомпании НТВ в связи с программой "Куклы"). Деление субъектов цензуры на "исполнителей" и "заказчиков" по таким критериям оказывается относительным, и порой некоторые "заказчики" одновременно выступают и как "исполнители". Кроме того, многогранность интересов различных субъектов неизбежно приводит к возникновению противоречий между ними. Так, возможны даже ситуации, когда имеет место противоречие между интересами власти и общества и сиюминутными потребностями конкретного учреждения цензуры и его сотрудников .

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

Современные технологии вносят значительные коррективы в работу цензуры. Ксерокс, персональные компьютеры и иные технические достижения конца XX века привели к децентрализации системы производства и распространения информации. Как отмечал канадский социолог М. Маклуэн, обычный человек при желании теперь превращался из потребителя в издателя . Новая "экранная" культура поставила перед цензурой вопросы, не имевшие аналогов в прошлом: это и проблема защиты банков данных государственных и негосударственных структур от их незаконного использования, и борьба с "компьютерным пиратством", и многое другое. Поиск ответов на них нелегок, но он жизненно важен для мирового сообщества.

Таким образом, цензура имеет реальные перспективы. Политика решающим образом влияет лишь на ее конкретное использование теми или иными социальными субъектами. Будущее - за гибкой цензурой, действующей в рамках правового государства и дополняемой добровольным участием в ней широких слоев общества.

Еще в середине прошлого века мудрый Рэй Брэдбери писал: "... если не хочешь, чтобы человек расстраивался из-за политики, не давай ему возможности видеть обе стороны вопроса. Пусть видит только одну, а еще лучше — ни одной..." Фактически в данном отрывке из его романа "451 градус по Фаренгейту" автор описал всю цель введения цензуры. Что это? Давайте узнаем, а также рассмотрим особенности данного явления и его виды.

Цензура - это что такое?

Этот термин был образован он латинского слова censura, который переводится как "взыскательное суждение, критика". В наше время он означает систему надзора за разного рода информацией, которая осуществляется государством с целью не допустить распространения на его территории определенных сведений.

Кстати, органы, непосредственно специализирующиеся на таком контроле, также именуются "цензурой".

История появления цензуры

Когда и где впервые возникла идея фильтровать информацию - история умалчивает. Что вполне естественно, ведь эта наука является одной из первых, контролируемых цензурой. Известно, что уже в Древней Греции и Риме государственные мужи пришли к выводу о необходимости контроля за настроениями граждан с целью предотвратить возможные бунты и сохранить власть в собственных руках.

В связи с этим практически во всех античных державах составлялись списки так называемых "опасных" книг, подлежащих уничтожению. Кстати, чаще всего к этой категории относились художественные произведения и поэзия, хотя и научным трудам доставалось.

Подобные традиции борьбы с нежелательными знаниями активно применялись в первые века новой эры, а после были успешно продолжены и в Средневековье, да и до наших времен сохранились, правда, стали более завуалированными.

Стоит отметить, что практически всегда у властей правая рука по части цензуры - это был какой-нибудь религиозный институт. В античную эпоху - жрецы, а с приходом христианства - папы, патриархи и прочее духовное "начальство". Именно они перекручивали Священное Писание в угоду политическим интересам, имитировали "знамения", проклинали всякого, кто пытался говорить иначе. В общем, они делали все, чтобы превращать сознание общества в пластичную глину, из которой можно лепить что потребуется.

Хотя современное общество и весьма продвинулось в интеллектуальном и культурном развитии, однако цензура - это и сегодня вполне успешный способ контролировать граждан, который успешно применяется даже в самых либеральных государствах. Конечно, делается это намного более искусно и незаметно, нежели в прошлые века, однако цели все те же.

Цензура - это хорошо или плохо?

К примеру, если каждый режиссер кинофильма будет бесконтрольно показывать в своих творениях чрезмерно откровенные сексуальные сцены или кровавые убийства - не факт, что после просмотра подобного зрелища у некоторых зрителей не случиться нервный срыв или их психике не будет нанесен непоправимый урон.

Или же, например, если все данные о какой-то эпидемии в населенном пункте станут известны его жителям, может начаться паника, способная привести к еще более ужасным последствиям или вовсе парализовать жизнь города. А главное - она помешает врачам делать свою работу и спасти тех, кому еще можно помочь.

А если не брать столь глобально, то самое простое явление, с которым борется цензура - это мат. Хотя нецензурно выражаться себе иногда позволяет каждый, однако, не будь ненормативная лексика под официальным запретом, даже страшно представить, на что был бы похож современный язык. Точнее, речь его носителей.

То есть теоретически цензура - это своеобразный фильтр, призванный защищать граждан от информации, которую они не всегда способны правильно воспринять. Особенно это важно в случае с детьми, которых цензура защищает от проблем взрослой жизни, давая им время окрепнуть до того, как придется столкнуться с ними в полной мере.

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

Возьмем тот же случай с эпидемией в маленьком городке. Узнав о ситуации, руководство страны отправляют партию вакцины во все больницы, с тем чтобы бесплатно сделать всем горожанам прививки. Узнав об этом, власти города распространяют данные, что в частных медкабинетах можно сделать платные прививки от болезни. А информация о наличии бесплатной вакцины замалчивается на несколько дней, чтобы как можно большее количество горожан успели купить то, что им полагалось даром.

Виды цензуры

Существует несколько критериев, по которым выделяют различные виды цензуры. Это чаще всего связано с информационной средой, в которой осуществляется контроль:

  • Государственная.
  • Политическая.
  • Экономическая.
  • Коммерческая.
  • Корпоративная.
  • Идеологическая (духовная).
  • Нравственная.
  • Педагогическая.
  • Военная (осуществляется во время участия страны в вооруженных конфликтов).

Также цензуру делят на предварительную и последующую.

Первая препятствует распространению определенной информации на этапе ее возникновения. Например, предварительная цензура в литературе - это контроль властями содержания книг до того, как они будут опубликованы. Подобная традиция процветала во времена царской России.

Последующая цензура - это способ пресечения распространения данных уже после их обнародования. Она менее эффективна, поскольку в таком случае информация известна общественности. Однако всякий, кто признается в знании ее, несет наказание.

Чтобы лучше понять, в чем заключаются особенности предварительной и последующей цензуры, стоит вспомнить историю и его "Путешествия из Петербурга в Москву".

В этой книге автор описал печальную политическую и социальную ситуацию, в которой находилась Российская империя в те времена. Однако говорить в открытую об этом было запрещено, ведь официально в империи было все прекрасно и все обитатели были довольны правлением Екатерины ІІ (как это часто показывают в некоторых дешевых псевдоисторических сериалах). Несмотря на возможное наказание, Радищев написал свое "Путешествие...", однако оформил его в виде путевых заметок о разных населенных пунктах, встречающихся между двумя столицами.

По идее, предварительная цензура должна была бы остановить публикацию. Но проверяющий чиновник поленился вчитываться в содержание и пропустил "Путешествие..." в печать.

И тут вступила в дело последующая цензура (карательная). Узнав об истинном содержании труда Радищева, книги запретили, все найденные экземпляры уничтожили, а самого автора сослали в Сибирь.

Не особо помогло, поскольку, несмотря на запрет, вся культурная элита втайне читала "Путешествие..." и делала его рукописные копии.

Способы обойти цензуру

Как понятно из примера Радищева, цензура не всесильна. И сколько она существует, находятся ловкачи, способные обойти ее.

Самые распространенные - 2 способа:

  • Использование эзопова языка. Суть его в том, чтобы завуалированно писать о волнующих проблемах, используя иносказание или даже какой-то словесный код, понятный лишь избранным.
  • Распространение информации через другие источники. Во времена жесткой литературной цензуры в царской России большинство крамольных трудов публиковалось за рубежом, где законы более либеральны. А позже книги тайно ввозились в страну и распространялись. Кстати, с появлением интернета обходить цензуру стало значительно легче. Ведь всегда получится найти (или создать) сайт, на котором можно будет поделиться своими запретными знаниями.

Почему я сел писать это пособие

Во-первых, потому что когда я очень хотел написать свой первый компонент, я прочитал две книги, и у меня ничего интересного собственно не вышло. Потом я прочитал еще одну книгу (в ней хотя бы пример рабочий был), вроде разобрался. Но там был разобран такой простой компонент, что все более сложное мне приходилось делать самому, иногда методом тыка, иногда сидел разбирался и так далее. Результат - разобрался, чего и вам желаю и надеюсь помочь этим пособием.

Все мои готовые компоненты можно найти на сайте http://MihanDelphi.narod.ru

Для чего нужны компоненты

Дельфи имеет открытую архитектуру - это значит, что каждый программист волен усовершенствовать эту среду разработки, как он захочет. К стандартным наборам компонентов, которые поставляются вместе с Дельфи можно создать еще массу своих интересных компонентов, которые заметно упростят вам жизнь (это я вам гарантирую). А еще можно зайти на какой-нибудь крутой сайт о Дельфи и там скачать кучу крутых компонентов, и на их основе сделать какую-нибудь крутую прогу. Так же компоненты освобождают вас от написания "тысячи тонн словесной руды". Пример: вы создали компонент - кнопку, при щелчке на которую данные из Memo сохранятся во временный файл. Теперь как только вам понадобится эта функция вы просто ставите этот компонент на форму и наслаждаетесь результатом. И не надо будет каждый раз прописывать это, для ваших новых программ - просто воспользуйтесь компонентом.

Шаг 1. Придумывание идеи

Первым шагом нужно ответить себе на вопрос: "Для чего мне этот компонент и что он будет делать?". Затем необходимо в общих чертах продумать его свойства, события, на которые он будет реагировать и те функции и процедуры, которыми компонент должен обладать. Затем очень важно выбрать "предка" компонента, то есть наследником какого класса он будет являться. Тут есть два пути. Либо в качестве наследника взять уже готовый компонент (то есть модифицировать уже существующий класс), либо создать новый класс.

Для создания нового класса можно выделить 4 случая:

1. Создание Windows-элемента управления (TWinControl)

2. Создание графического элемента управления (TGraphicControl)

3. Создание нового класса или элемента управления (TCustomControl)

4. Создание невизуального компонента (не видимого) (TComponent)

Теперь попробую объяснить что же такое визуальные и невизуальные компоненты. Визуальные компоненты видны во время работы приложения, с ними напрямую может взаимодействовать пользователь, например кнопка Button - является визуальным компонентом.

Невизуальные компоненты видны только во время разработки приложения (Design-Time), а во время работы приложения (Run-Time) их не видно, но они могут выполнять какую-нибудь работу. Наиболее часто используемый невизуальный компонент - это Timer.

Итак, что бы приступить от слов к делу, попробуем сделать какой-нибудь супер простой компонент (только в целях ознакомления с техникой создания компонентов), а потом будем его усложнять.

Шаг 2. Создание пустого модуля компонента

Рассматривать этот шаг я буду исходя из устройства Дельфи 3, в других версиях этот процесс не сильно отличается. Давайте попробуем создать кнопку, у которой будет доступна информация о количестве кликов по ней.

Чтобы приступить к непосредственному написанию компонента, вам необходимо сделать следующее:

    Закройте проекты, которые вы разрабатывали (формы и модули)

    В основном меню выберите Component -> New Component...

    Перед вами откроется диалоговое окно с названием "New Component"

    В поле Ancestor Type (тип предка) выберите класс компонента, который вы хотите модифицировать. В нашем случае вам надо выбрать класс TButton

    В поле Class Name введите имя класса, который вы хотите получить. Имя обязательно должно начинаться с буквы "T". Мы напишем туда, например, TCountBtn

    В поле Palette Page укажите имя закладки на которой этот компонент появиться после установки. Введем туда MyComponents (теперь у вас в Делфьи будет своя закладка с компонентами!).

    Поле Unit File Name заполняется автоматически, в зависимости от выбранного имени компонента. Это путь куда будет сохранен ваш модуль.

    В поле Search Path ничего изменять не нужно.

    Теперь нажмите на кнопку Create Unit и получите следующее:

unit CountBtn;

Uses

StdCtrls;

Type
TCountBtn = class(TButton)

private
{ Private declarations }

protected
{ Protected declarations }

public
{ Public declarations }

published
{ Published declarations }

Procedure Register;

Implementation

Procedure Register;
begin
RegisterComponents("MyComponents", );
end;

Шаг 3. Начинаем разбираться во всех директивах

Что же здесь написано? да собственно пока ничего интересного. Здесь объявлен новый класс TCountBtn и процедура регистрации вашего компонента в палитре компонентов.

Директива Private Здесь вы будете писать все скрытые поля которые вам понадобятся для создания компонента. Так же в этой директиве описываются процедуры и функции, необходимые для работы своего компонента, эти процедуры и функции пользователю не доступны. Для нашего компонент мы напишем туда следующее (запись должна состоять из буквы "F" имени поля: тип этого поля):

FCount:integer;

Буква "F" должна присутсвовать обязательно. Здесь мы создали скрытое поле Count, в котором и будет храниться число кликов по кнопке.

Директива Protected . Обычно я здесь пишу различные обработчики событий мыши и клавиатуры. Мы напишем здесь следующую строку:

procedure Click; override;

Это указывает на то, что мы будем обрабатывать щелчок мыши по компоненту. Слово "override" указывает на то, что мы перекроем стандартное событие OnClick для компонента предка.

В директиве Public описываются те процедуры и функции компонента, которые будут доступны пользователю. (Например, в процессе написания кода вы пишите имя компонента, ставите точку и перед вами список доступных функций, объявленных в диретиве Public). Для нашего компонента, чтобы показать принцип использования этой директивы создадим функцию - ShowCount, которая покажет сообщение, уведомляя пользователя сколько раз он уже нажал на кнопку. Для этого в директиве Public напишем такой код:

procedure ShowCount;

Осталась последняя директива Published. В ней также используется объявления доступных пользователю, свойств и методов компонента. Для того, чтобы наш компонент появился на форме необходимо описать метод создания компонента (конструктор), можно прописать и деструктор, но это не обязательно. Следует обратить внимание на то, что если вы хотите, чтобы какие-то свойства вашего компонента появились в Инспекторе Объектов (Object Inspector) вам необходимо описать эти свойства в директиве Published. Это делается так: property Имя_свойства (но помните здесь букву "F" уже не нужно писать), затем ставиться двоеточие ":" тип свойства, read процедура для чтения значения, write функция для записи значения;. Но похоже это все сильно запутано. Посмотрите, что нужно написать для нашего компонента и все поймете:

constructor Create(aowner:Tcomponent);override; //Конструктор
//Свойство Count

Итак все объявления сделаны и мы можем приступить к написанию непосредственно всех объявленных процедур.

Шаг 4. Пишем процедуры и функции.

Начнем с написания конструктора. Это делается примерно так:

constructor TCountBtn.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
end;

Здесь в принципе понимать ничего не надо. Во всех своих компонентах я писал именно это (только класс компонента менял и все). Также сюда можно записывать любые действия, которые вы хотите сделать в самом начале работы компонента, то есть в момент установки компонента на форму. Например можно установить начальное значение нашего свойства Count. Но мы этого делать не будем.

Теперь мы напишем процедуру обработки щелчка мышкой по кнопке:

procedure Tcountbtn.Click;
begin
inherited click;
FCount:=FCount+1;
end;

"Inherited click" означает, что мы повторяем стандартные методы обработки щелчка мышью (зачем напрягаться и делать лишнюю работу:)).

У нас осталась последняя процедура ShowCount. Она может выглядеть примерно так:

procedure TCountBtn.ShowCount;
begin

end;

Здесь выводится сообщение в котором показывается количество кликов по кнопке (к тому же выводится имя этой кнопки, ну это я добавил только с эстетической целью).

И если вы все поняли и сделали правильно, то у вас должно получится следующее:

unit CountBtn;

Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

Type
TCountBtn = class(TButton)
private
{ Private declarations }
FCount:integer;
protected
{ Protected declarations }
procedure Click;override;
public
{ Public declarations }
procedure ShowCount;
published
{ Published declarations }
property Count:integer read FCount write FCount;

end;

Procedure Register;

Implementation

Procedure Register;
begin

end;


begin
inherited create(Aowner);
end;

Procedure Tcountbtn.Click;
begin
inherited click;
FCount:=FCount+1;
end;


begin
Showmessage("По кнопке "+ caption+" вы сделали: "+inttostr(FCount)+" клик(а/ов)");
end;
end.

Скорее сохраняйтесь, дабы не потерять случайным образом байты набранного кода:)).

Шаг 5. Устанавливаем компонент

Если вы сумели написать и понять, все то что здесь предложено, то установка компонента не должна вызвать у вас никаких проблем. Все здесь делается очень просто. В главном меню выберите пункт Component -> Install Component. перед вами открылось диалоговое окно Install Component. В нем вы увидите две закладки: Into exsisting Package и Into new Package. Вам предоставляется выбор установить ваш компонент в уже существующий пакет или в новый пакет соответственно. Мы выберем в уже существующий пакет.

В поле Unit File Name напишите имя вашего сохранненого модуля (естественно необходимо еще и указать путь к нему), а лучше воспользуйтесь кнопкой Browse и выберите ваш файл в открывшемся окне.

В Search Path ничего изменять не нужно, Делфьи сама за вас все туда добавит.

В поле Package File Name выберите имя пакета, в который будет установлен ваш компонент. Мы согласимся с предложенным по умолчанию пакетом.

Теперь нажимаем кнопочку Ok. И тут появиться предупреждение Package dclusr30.dpk will be rebuilt. Continue? Дельфи спрашивает: "Пакет такой-то будет изменен. Продолжить?". Конечно же надо ответить "Да". И если вы все сделали правильно, то появиться сообщение, что ваш компонент установлен. Что ж можно кричать Ура! Это ваш первый компонент.

Создание свойств своего типа

Теперь мы попробуем создать свойство нестандартного типа. Рассмотрим это на примере метки - TLabel. У этого компонента есть такое свойство: Alignment. Оно может принимать следующие значения: taLeftJustify, taCenter, taRightJustify. Приступаем к созданию свойства. Ничего интересного мне придумать не удалось, но тем не менее я вам покажу это на примере того свойства, которое я придумал. Оно очень простое и поможет вам разобраться. Свойство будет называться ShowType (тип TShowTp), в нашем компоненте оно будет отвечать за отображение свойства Count. Если пользователь установит свойство ShowType в Normal, то кнопка будет работать, как и работала. А если пользователь присвоит этому свойтсву значение CountToCaption, то количество кликов, будет отображаться на самой кнопке.

Для начале нам необходимо объявить новый тип. Описание типа нужно добавить после слова Type. Вот так это выглядело вначале:

type
TCountBtn = class(TButton)

Вот так это должно выглядеть:

TShowTp = (Normal, CountToCaption);

TCountBtn = class(TButton)

Здесь мы объявили новый тип TShowTp, который может принимать только два значения. Все значения, которые вы хотите добавить перечисляются через запятую.

Теперь нам понадобиться создать поле этого типа. Это мы уже умеем и делать и поэтому не должно вызвать никаких сложностей. В директиву Private напишите:

FShowType:TShowTp;

Мы создали поле ShowType, типа TShowTp.

Конечно же необходимо добавить это свойство в инспектор объектов:

property ShowType: TshowTp read FshowType write FShowType;

Ну и наконец, чтобы наш компонент реагировал на изменение этого свойства пользователем надо слегка изменить обработчик события OnClick. После небольшой модификации он может иметь примерно такой вид:

procedure Tcountbtn.Click;
begin
inherited click;
FCount:=Fcount+1;
if ShowType = Normal then
Caption:=Caption;


end;

Объясню что произошло. Вначале мы увеличиваем счетчик на единицу. Затем проверяем какое значение имеет свойство ShowType. Если Normal, то ничего не делаем, а если CountToCaption, то в надпись на кнопке выводим количество кликов. Не так уж и сложно как это могло показаться с первого раза.

Имплантируем таймер в компонент

Очень часто бывает, что вам необходимо вставить в компонент, какой-нибудь другой компонент, например, таймер. Как обычно будем рассматривать этот процесс на конкретном примере. Сделаем так, что через каждые 10 секунд значение счетчика кликов будет удваиваться. Для этого мы встроим таймер в нашу кнопку. Нам понадобиться сделать несколько несложных шагов.

После раздела uses, где описаны добавленные в программу модули, объявите переменную типа TTimer. Назовем ее Timer. Приведу небольшой участок кода:

unit CountBtn;

Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

procedure OnTimer(Sender: TObject);

Поскольку наш таймер это не переменная, а компонент, его тоже надо создать, для этого в конструктор нашей кнопки напишем:

constructor TCountBtn.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
Timer:=TTimer.Create(self);
Timer.Enabled:=true;
Timer.OnTimer:=OnTimer;
Timer.Interval:=10000;
end;

Здесь создается экземпляр нашего таймера и его свойству Iterval (измеряется в миллисекундах) присваивается значение 10000 (то есть 10 секунд если по простому).

Собственно осталось написать саму процедуру OnTimer. Я сделал это так:

procedure TCountBtn.OnTimer(Sender: TObject);
begin
FCount:=FCount*2;
end;

Вот примерно то, что у вас должно получиться в конце:

unit CountBtn;

Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

Var Timer: TTimer;
type
TShowTp = (Normal, CountToCaption);
TCountBtn = class(TButton)

Private
{ Private declarations }

FCount:integer;
FShowType:TShowTp;
protected
{ Protected declarations }
procedure OnTimer(Sender: TObject);
procedure Click;override;
public
{ Public declarations }
procedure ShowCount;
published
{ Published declarations }
property Count:integer read FCount write FCount;
constructor Create(aowner:Tcomponent);override;
property ShowType: TshowTp read FshowType write FShowType;
end;

Procedure Register;

Implementation

Procedure Register;
begin
RegisterComponents("Mihan Components", );
end;

Constructor TCountBtn.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
Timer:=TTimer.Create(self);
Timer.Enabled:=false;
Timer.OnTimer:=OnTimer;
Timer.Interval:=1000;
end;

Procedure Tcountbtn.Click;
begin
inherited click;
FCount:=Fcount+1;
Timer.Enabled:=true;
if ShowType = Normal then
Caption:=Caption;
if ShowType = CountToCaption then
Caption:="Count= "+inttostr(count);
end;

Procedure TCountBtn.ShowCount;
begin
Showmessage("По кнопке "+ caption+" вы сделали: "+inttostr(FCount)+" клик(а/ов)");
end;

Procedure TCountBtn.OnTimer(Sender: TObject);
begin
FCount:=FCount*2;
end;

Если у вас что-то не сработало, то в начале проверьте все ли у вас написано правильно. Затем проверьте может у вас не хватает какого-нибудь модуля в разделе Uses.

Переустановка компонента

Очень часто бывает необходимо переустановить ваш компонент. Если вы попробуете сделать это путем выбора Component->Install Component, то Дельфи вас честно предупредит о том, что пакет уже содержит модуль с таким именем. Перед вами открывается окно с содержимым пакета. В нем вы должны найти имя вашего компонента и удалить его (либо нажать кнопочку Remove). Теперь в пакете уже нет вашего компонента. Затем проделайте стандартную процедуру по установке компонента.

Удачи в программировании...

(С) Авторские права принадлежат Михаилу Христосенко! При размещении на других сайтах указание имени автора и адреса сайта (http://delphid.dax.ru) обязательно!

  • Обзор
  • Соглашения по наименованиям
  • Выбор предка
  • Пример создания компонента
  1. Обзор
  2. Поскольку Delphi является открытой средой и позволяет не только использовать объекты из Библиотеки Визуальных Компонент (VCL) в своей программе, но и создавать новые объекты. Причем, ничего другого, кроме Delphi, для этого не требуется. Создание нового объекта в Delphi не является очень сложной задачей, хотя для этого и требуется знание Windows API, объектно-ориентированного программирования и иерархии классов в VCL.

    Может возникнуть вопрос; если в Delphi уже есть своя библиотека, то зачем еще создавать какие-то объекты? Ответ прост: нельзя создать библиотеку на все случаи жизни и на все вкусы. Новые компоненты, во-первых, позволяют расширить область применения Delphi: например, с помощью библиотек объектов третьих фирм разрабатывать приложения для работы в Internet. Во-вторых, позволяют дополнить или настроить для себя имеющиеся в VCL объекты (например, переопределить значения свойств, устанавливаемые по умолчанию).

  3. Добавление новых объектов в VCL
  4. Предположим, что у вас появился уже готовый компонент. Как его добавить в VCL? Для этого выберите пункт меню Options|Install Components… Появится диалог, как на рис.1

    Рис. 1 : Диалог установки нового компонента

    Нажмите “Add” и укажите модуль, содержащий процедуру регистрации, нажмите “OK” и после успешной перекомпиляции новый объект появится в палитре.

  5. Заготовка для нового компонента
  6. В среде Delphi есть специальный эксперт, создающий заготовку для нового компонента. Вызвать его можно в пункте меню File|New Component… (см рис.2)


    Рис. 2 : Эксперт для создания нового компонента

    В диалоге нужно указать имя нового класса (например, TMyButton), предка класса (TButton) и страницу палитры, куда поместить новый компонент (Samples). Если нажать “OK”, то эксперт создаст модуль - заготовку для нового компонента:

    unit Unit1;

    interface

    uses

    SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

    Forms, Dialogs, StdCtrls;

    type

    TMyButton = class(TButton)

    private

    { Private declarations }

    protected

    { Protected declarations }

    public

    { Public declarations }

    published

    { Published declarations }

    end;

    procedure Register;

    implementation

    procedure Register;

    begin

    RegisterComponents("Samples", );

    end;

    end.

    Модуль содержит декларацию нового класса и процедуру его регистрации в Палитре Компонент. В процедуре RegisterComponents первый параметр - имя страницы (можно указать свое имя - появится новая страница); второй параметр - множество объектов для регистрации.

    Теперь модуль нужно сохранить под новым именем (например, NEW_BTN.PAS) и приступить к дописыванию новых свойств и методов. После того, как эта работа закончена и новый компонент отлажен, можно добавить его в Палитру (см. предыдущую главу). Но перед этим желательно создать файл ресурсов, в котором будет лежать пиктограмма для представления данного объекта в Палитре Компонент. Файл ресурсов можно создать с помощью программы Resource Workshop, называться он должен точно так же, как модуль регистрации компонента и иметь расширение.DCR (т.е., если объект регистрируется в модуле NEW_B TN .PAS, то тогда имя файла ресурсов будет NEW_BTN.DCR). В файле ресурсов должен находиться ресурс типа BITMAP - картинка размером 28x28 точки (можно меньше), название картинки должно совпадать с именем класса (в нашем случае TMYBUTTON).

  7. Соглашения по наименованиям

Если вы рассматривали исходные тексты VCL, то могли видеть, что они следуют нескольким простым соглашениям при определении новых классов. Delphi этого не требует, имена методов, свойств и т.п. могут быть любыми, компилятору это безразлично. Но если следовать этим соглашениям, то разработка новых компонентов и чтение исходных текстов станет существенно проще.

Итак:

  • Все декларации типов начинаются на букву T. Еще раз, Delphi не требует этого, но это делает очевидным, что "TEdit", например, есть определение типа, а не переменная или поле класса.
  • Имена свойствам нужно давать легко читаемые и информативные. Нужно помнить, что пользователь будет их видеть в Инспекторе Объектов. И имя вроде "TextOrientation" много удобнее, нежели "TxtOr". То же самое относится к методам. Методы, доступные пользователю, должны иметь удобные названия.
  • При создании свойств типа Event, имя такого свойства должно начинаться с “On” (например, OnClick, OnCreate и т.д.).
  • Имя метода для чтения свойства должен начинаться со слова “Get”. Например, метод GetStyle должен выполнять чтение для свойства Style.
  • Имя метода для записи свойства должен начинаться со слова “Set”. Например, метод SetStyle должен выполнять запись в свойство Style.
  • Внутреннее поле для хранения данных свойства должно носить имя, начинающееся с буквы “F”. Например, свойство Handle могло бы храниться в поле FHandle.

Конечно же, есть исключения из правил. Иногда бывает удобнее их нарушить, например, класс TTable имеет свойства типа Event, которые называются BeforePost, AfterPost и т.п.

  1. Выбор предка

Прежде, чем приступить к написанию кода, нужно определиться, хотя бы приблизительно, что за компонент вы собираетесь делать. Далее, исходя из его предполагаемых свойств, определите класс-предок. В VCL имеется несколько базовых классов, рекомендуемых для наследования:

  • TObject - Можно использовать в качестве предка, если с этим компонентом не нужно работать во время дизайна. Это может быть, например, класс, содержащий значения переменных среды (environment) или класс для работы с INI файлами.
  • TComponent - Отправная точка для многих невидимых компонент. Данный класс обладает встроенной возможностью сохранять/считывать себя в потоке во время дизайна.
  • TGraphicControl - Используйте этот класс для создания видимых компонент, которым не нужен handle. Такие компоненты рисуют прямо на своей поверхности и требуют мало ресурсов Windows.
  • TWinControl - Базовый класс для компонент, которые имеют окно. Данное окно имеет свой handle, его используют при доступе к возможностям Windows через API.
  • TCustomControl - Потомок TWinControl, вводит понятие канвы (Canvas) и метод Paint() для лучшего контроля за прорисовкой компонента. Именно этот класс используется в качестве базового для построения большинства видимых компонент, имеющих оконный handle.
  • TXxxxx - Класс вроде TEdit или TButton. Используются с целью доопределения их свойств и методов или переопределения значения свойств, принимаемых по умолчанию.
  1. Пример создания компонента

Для примера создадим новый класс, мутант TButton, в котором изменим значение по умолчанию свойства ShowHint на True и добавим новое свойство - счетчик нажатий на кнопку. Заготовка модуля для создания нового компонента уже есть (см. пункт Заготовка для нового компонента ). Теперь исходный текст выглядит так:

unit New_btn;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

type

TMyButton = class(TButton)

private

{ Private declarations }

FClickCount: Longint;

protected

{ Protected declarations }

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

procedure Click; override;

property ClickCount: Longint read FClickCount write

  • FClickCount;
  • published

    { Published declarations }

    end;

    procedure Register;

    implementation

    constructor TMyButton.Create(AOwner: TComponent);

    begin

    inherited Create(AOwner);

    ShowHint:=True;

    FClickCount:=0;

    end;

    procedure TMyButton.Click;

    begin

    Inc(FClickCount);

    inherited Click;

    end;

    procedure Register;

    begin

    RegisterComponents("Samples", );

    end;

    end.

    Для того, чтобы переопределить начальное значение свойства при создании объекта, нужно переписать конструктор Create, в котором и присвоить этому свойству нужное значение (не забыв перед этим вызвать конструктор предка).

    Новое свойство для подсчета нажатий на клавишу называется ClickCount. Его внутреннее поле для сохранения значения - FClickCount имеет тип Longint, емкости поля хватит надолго.

    Мы уже ознакомились с компонентами Delphi в статье , и хоть мы еще ничего не понимаем в программировании, но все же, я думаю, что нам уже хочется как можно быстрее начать создавать что-то самостоятельно. Поэтому именно сейчас я предлагаю написать свое первое приложение на Delphi и рассмотреть, как и куда пишется код программы, а также посмотреть, что делает Delphi,создавая программы, и как устроен создаваемый проект. Ну а после этого мы перейдем к дальнейшему изучению теории.

    В компьютерной литературе принято писать первое приложение, которое выводит на экран надпись “HelloWord”, мы же несколько переиначим и создадим свое первое приложение, которое будет выводить надпись “HelloDelphi” .

    Понятное дело, для начала нам нужно запустить сам Delphi. После того как перед нами открылось окно оболочки - создаем новый проект File | New | VCL Forms Application - Delphi .

    Давайте теперь посмотрим на менеджер проектов. На рисунке ниже показано окно, в котором раскрыты все ветви дерева, чтобы мы могли посмотреть на все составляющие нового проекта.

    Рисунок. Менеджер проекта, создаваемого приложения

    В менеджере проектов появилось целое дерево. Давайте рассмотрим каждый пункт этого дерева.

    ProjectGroup1 (Заголовок дерева) - имя группы проектов. В одной группе проектов может быть несколько приложений. В нашем случае мы создали одно новое приложение, поэтому в группе будет только оно. Если вы нажмете кнопку New (Новый) в окне менеджера проектов и создадите новое приложение, то оно будет добавлено в существующую группу проектов.

    Project1.exe - имя проекта (приложения). Когда мы создаем новое приложение, Delphi дает ему имя Project плюс порядковый номер.

    Unit1.pas - модуль. Проект состоит из модулей. Каждое окно программы хранится в отдельном модуле, а мы видим на экране, что у нашего приложения есть окно, и именно оно находится в нем. Файлы с расширением pas содержат исходный код модуля. Имя файла такое же, как и у модуля.

    Unit1.dfm - это визуальная форма. Она сохраняется в файле с таким же именем, как у и модуля, но с расширением dfm .

    Когда у нас в проекте несколько приложений, то только одно из них является активным, и именно его мы можем выполнять и отлаживать в среде оболочки Delphi. Имя активного приложения написано жирным шрифтом. Чтобы изменить активное приложение, достаточно дважды щелкнуть по его имени левой кнопкой мыши или щелкнуть правой по имени нужного проекта и из контекстного меню выбрать Activate (Активировать).

    Но сейчас мы будем работать только с одним приложением, поэтому если вы создали два, то второе надо удалить. Для этого выделяем имя приложения и нажимаем на клавиатуре кнопку Delete. Перед нами появляется окно с подтверждением на удаление. Если нажать Yes (Да), то приложение будет удалено из группы проектов.

    Следует отметить, что реально файлы с диска не удаляются. Они остаются на месте, но не отображаются в нашем проекте. Поэтому если мы сохранили проект и файлы нам больше не нужны, то можно найти эти файлы и удалить вручную. Если мы не успели сохранить файлы, то, естественно, их на диске и не будет.

    Давайте сохраним наше новое приложение. Для этого выберем из главного меню File | SaveAll . Перед нами откроется стандартное окно сохранения файла. Для начала Delphi запросит ввести имя модуля. По умолчанию указано текущее имя - Unit1.pas. Давайте изменим его на MainUnit и нажмем кнопку Save (Сохранить).

    Здесь следует отметить, что нельзя вводить имена с пробелами или на русском языке. Если вы попытаетесь ввести нечто подобное, то произойдет ошибка, ваш файл не будет сохранен и придется заново повторять процедуру сохранения. Не забудьте выбрать папку, куда вы хотите сохранить модуль и проекты. Желательно, чтобы все файлы одного проекта хранились в одной папке, по крайней мере на начальном этапе, пока вы не наберетесь опыта.

    После того как мы сохранили MainUnit, Delphi запросит у нас имя будущего проекта. Поскольку мы решили писать новое приложение под названием HelloDelphi , то здесь давайте и введем HelloDelphi. Имя проекта также как и имя модуля должно вводиться без пробелов и только латиницей. После того как ввели имя проекта, можем нажимать кнопку Save (Сохранить). Проект сохранится в файле под именем HelloDelphi.dpr . Когда мы захотим вновь открыть этот проект, то нам нужно открывать именно этот файл. Не нужно открывать файлы с расширением pas , потому что это всего лишь составляющая часть проекта. Открывать нужно файлы с расширением dpr .

    Старайтесь выбирать имена, наиболее точно отображающие содержимое модуля, чтобы потом легче было разобраться, для чего предназначены файлы в больших проектах. К тому же желательно помнить, что имя проекта задает имя будущего исполняемого программного файла проекта. Если вы оставите имя Project 1, то и имя исполняемого файла будет Project1.exe .

    Сохранять проекты желательно в отдельных папках. Для каждого проекта лучше отводить отдельную папку, потому что каждый проект состоит из множества файлов, и когда у нас будут большие проекты, то мы не сможем отделять их один от другого, если они будут находиться в одной папке. Все дополнительные формы или модули, которые мы будем создавать для проекта, желательно также сохранять в папке этого проекта. В таком случае нам будет проще их копировать на другой компьютер, архивировать или переносить в другую папку.

    Давайте теперь посмотрим, как изменился наш менеджер проектов. Как видите, имя проекта изменилось на HelloDelphi, а имя модуля на MainUnit.

    Теперь давайте откроем папку, в которую мы сохранили наш проект, и посмотрим, какие файлы там присутствуют.

    1. HelloDelphi.cfg - файлы с расширением cfg , содержат конфигурацию проекта.

    2. HelloDelphi.dof - файлы с расширением dof , содержат опции проекта.

    3. HelloDelphi.dpr - файлы с расширением dpr , это сам проект. В этом файле находится описание используемых в проекте модулей и код инициализации программы. Его можно использовать и для написания кода. В будущем мы узнаем, что можно писать в этом модуле и для чего.

    4. HelloDelphi.res - файлы с расширением res , содержат ресурсы проекта, например, такие как иконки, курсоры и др. По умолчанию Delphi помещает в этот файл только иконку, но это не значит, что вы не можете использовать файл для хранения других ресурсов.

    5. MainUnit.pas - файлы с расширением pas , содержат исходный код модулей.

    6. MainUnit.dfm - файлы с расширением dfm , содержат визуальную информацию о форме.

    7. MainUnit.ddp - файлы с расширением ddp , определяют вспомогательные файлы модуля, например, диаграммы. Если вы не используете диаграммы, то можете удалять эти файлы, хотя они все равно будут генерироваться.

    8. MainUnit.dcu - файл с расширением dcu , представляет откомпилированный модуль проекта в промежуточном формате. Когда компилируется программа, все модули компилируются в файлы формата DCU, а потом собираются в один и получается один исполняемый файл. Если модуль не изменялся с последней компиляции, то Delphi пропустит его, а во время сборки будет использовать существующий файл формата DCU, чтобы увеличить скорость компиляции. У вас пока не может быть этого файла, потому что вы еще не компилировали свой проект.

    Файлы исходных кодов (с расширением pas) — это текстовые файлы, которые мы будем редактировать в редакторе кода. Файлы визуальных форм (с расширением dfm) создаются автоматически, и в них будет храниться информация о том, что находится на форме, а также настройки самой формы. Я открыл этот файл с помощью Блокнота, и вот что я там увидел:

    object Form1: TForm1
    Left = 0
    Top = 0
    Caption = "Form1"
    ClientHeight = 213
    ClientWidth = 455
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = "Tahoma"
    Font.Style =
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    End

    Первая строка идентифицирует объект, его имя и тип. Потом идет перечисление свойств объекта и значения, которые им присвоены. Описание свойств компонента заканчивается ключевым словом end .

    Если у вас возникла проблема с открытием формы, вы можете открыть файл визуальной формы в текстовом редакторе и подправить необходимое свойство. Это может потребоваться, когда на форме есть компонент, который соединяется с базой данных. Если соединение активно и база недоступна, то при открытии формы Delphi будет пытаться соединиться с базой данных, и при неудачном соединении форма может не отобразиться. В этом случае нужно открыть такой файл в текстовом редакторе и отредактировать свойства соединения с базой. Можно отключить соединение или подправить путь к другой базе данных (о самих базах данных мы будем говорить позже).

    А теперь давайте вернемся к нашей программе HelloDelphi, которую мы должны написать. Сначала посмотрим, что у нас уже есть. В принципе, мы ничего особого не сделали, но у нас уже есть готовое окно, которое можно превратить в программу. Для этого нужно скомпилировать проект. Чтобы скомпилировать проект, выбираем из меню пункт Project | Compile HelloDelphi , или нажимаем Ctrl+F9 . Если мы ничего не меняли в настройках Delphi, то у нас должно появится окно состояния компиляции.

    Рисунок. Окно состояния компиляции в Delphi

    Давайте разберемся, что показывает нам это окно.

    В этом окне довольно хорошо отображается состояние компиляции. Интерес представляют три значения.

    Hints - сообщения. Это простые сообщения, которые указывают на места, где можно улучшить код. Например, вы объявили переменную, но не пользовались ею. В этом случае появится соответствующее сообщение. Это, конечно же, не ошибка, и программа все же будет скомпилирована. Но благодаря этим сообщениям вы сможете увидеть, где была объявлена лишняя переменная или, возможно, просто что-то было забыто.

    Warning - предупреждения. На них нужно обращать более пристальное внимание. Например, вы объявили переменную, затем попытались ее использовать, не присвоив начальное значение. В этом случае появится предупреждение. Это опять же не ошибка, и программа будет скомпилирована, но Delphi предупреждает вас о возможной ошибке. Такие предупреждения нужно проверять, потому что вы действительно могли забыть что-то сделать, и это уже может привести к фатальной ошибке выполнения программы.

    Errors - это уже самые настоящие ошибки. Они указывают на те места, где была допущена грубая ошибка, из-за чего программа не может быть скомпилирована.

    Как видим, никаких сообщений, предупреждений или ошибок у нас нет. И это понятно, ведь мы еще ничего не делали и не успели испортить созданную для нас заготовку. Программа скомпилирована. Просто нажимаем кнопку ОК, и это окно закрывается. Можно сделать так, чтобы окно автоматически исчезало по завершении компиляции, для этого нужно поставить галочку в Automatically close on successful compile (Автоматически закрывать после удачной компиляции), но я не рекомендую этого делать.

    Теперь давайте вернемся в папку, где мы сохранили проект и посмотрим, что у нас изменилось. В этой папке появился исполняемый файл HelloDelphi.exe . Запустим его, и мы увидим пустое окно.

    Давайте изменим заголовок нашей формы на HelloDelphi . Как известно, в Delphi все объекты, а значит, и окно программы тоже объект. Заголовок окна - это скорей всего свойство окна. Для того чтобы изменить это свойство, нужно перейти в объектный инспектор (вкладка Properties (Свойства)), найти свойство Caption (Заголовок) и ввести в его поле ввода слово HelloDelphi (сейчас у нас там написано Form1 и при запуске HelloDelphi.exe у нас появляется форма с заголовком Form1). После этого можно нажать Enter или просто перейти на другую строку с другим свойством.

    После всего этого давайте запустим нашу программу. Для этого можно вновь скомпилировать ее и запустить файл. Однако на этот раз мы будем действовать иначе. Выбираем из меню Run (Выполнить) пункт Run (или нажимаем на клавиатуре клавишу F9). Delphi сразу откомпилирует и запустит готовую программу. Как видим, программирование не настолько страшно, как кажется на первый взгляд.

    Рисунок. Объектный инспектор. Изменение свойства Caption

    К уроку (статье) прилагается исходник , посмотрев который, вы можете ознакомиться с полным исходным кодом программы и посмотреть как работает созданная программа. Исходный код сопровождается комментариями, благодаря чему вы сможете легко в нем разобраться. Но я настоятельно рекомендую делать все самостоятельно. Так вы лучше и быстрее усвоите то, о чем говорилось в этом уроке

    Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку HelloDelphi. Создаем свое первое приложение на Delphi
    Нажмите на эту ссылку


    © 2024
    alerion-pw.ru - Про лекарственные препараты. Витамины. Кардиология. Аллергология. Инфекции