Как составить программу в делфи

. when altering one’s mind becomes as easy as programming a computer, what does it mean to be human.

четверг, 19 марта 2009 г.

Создание приложений для Windows Vista в Delphi — часть 1

Прим. пер.: речь идёт в основном о Delphi до 2007.

Итак, ваши приложения «работают»

К настоящему времени, надеюсь, Вы, как ответственный разработчик приложений, загрузили несколько из публичных бета-версий Microsoft Windows Vista, и убедились, что ваши приложения (и среда!) работают в новой ОС.

Хотя 99% всех хорошо написанных Delphi приложений будет работать под Vista без проблем (проблемы типа требования админских прав, элевации и UAC находятся за пределами этой статьи), они не имеют никаких бонусов с новых возможностей Windows Vista. Фактически, чем больше вы будете смотреть на новые возможности пользовательского интерфейса в Vista, тем больше ваши приложения будут смотреться как древние динозавры.

Но не беспокойтесь! Вполне возможно (и достаточно просто) преодолеть эти расхождения, и сделать ваши приложения выглядящими и «чувствующими» себя как дома с новым пользовательским интерфейсом Windows Vista. Давайте посмотрим на типичные проблемы приложений Delphi, и что мы можем сделать, чтобы улучшить наши программы.

Создать программу в Delphi (Урок 1)



Наше приложение-пример

Приложение-пример (sample application), над которым мы будем работать в этом посте, будет простой программой текстовым редактором типа Блокнота, с несколькими формами и действиями. Оно позволит вам загружать/сохранять текстовые файлы, а также показывать диалог «О программе» («About» dialog). Оно также будет спрашивать вас сохранить ваши изменения, когда вы открываете файл или выходите из программы, если вы ещё не сохранили документ.

Скачать приложение-пример — шаг 1 (ссылка ведёт на статью-оригинал).

Итак, хотя наше приложение просто работает под Windows Vista, под капотом всё еще есть несколько проблем.

О, нет. только не снова это (или: Новые шрифты)

Первая проблема, которую и проще всего исправить — и которая больше всего занимает времени в уже готовых больших проектах — это шрифт. В Windows Vista шрифт по-умолчанию для пользовательского интерфейса становится Segoe UI. Только это ещё половина проблемы. Самое интересное, что не только появился новый шрифт, но и размер шрифта по-умолчанию увеличился. По-умолчанию, приложения в Windows XP использовали Tahoma 8. Приложения в Windows Vista (которые «вписываются»), однако, используют Segoe UI 9. Это означает, что не только нам надо сменить свои шрифты (если нас запустили на Windows Vista), но нам также нужно проверить каждую форму, чтобы убедиться, что весь текст видимый и при необходимости делать нужные корректировки.

Давайте начнём с создания нового модуля с именем uVistaFuncs.pas. В него мы будем добавлять специфичные для Vista методы. Для начала мы добавим методы для проверки — а не запущены ли мы под Windows Vista, и для применения правильного шрифта и размера шрифта для указанной формы. Тогда, в FormCreate главной формы и нашей диалоговой форме «О программе» мы просто вызовем SetVistaFonts(Self), предварительно убедившись, что модуль uVistaFuncs вписан в uses.

Урок 1. Создание нового приложения в Delphi 11

Вы заметите, что заголовок в диалоговом окне «О программе» всё ещё использует шрифт по-умолчанию: Tahoma. Это от того, что мы меняли шрифт в режиме проектирования и поэтому свойство ParentFont стало False. Вы часто будете встречаться с такой ситуацией в своих программах. Чтобы проще всего было находить такие косяки — лучше всего вписать в uVistaFuncs “Segoe Script” вместо “Segoe UI”.

При этом старый шрифт в запущенной программе заметить будет гораздо проще. В нашем случае нам нужно было просто присвоить TitleLabel.Font.Name после вызова SetVistaFonts.

Скачать приложение-пример — шаг 2 (ссылка ведёт на статью-оригинал).

Прим. пер.: в Delphi в модуле Graphics есть глобальная переменная DefFontData, в которой содержится шрифт по-умолчанию. Поэтому вместо вызова функции установки шрифтов в каждом окне (SetVistaFonts) можно рассмотреть вариант установки свойства ParentFont формы в True и модификации DefFontData в initialization своего модуля (для Vista: Name := ‘Segoe UI’; Height := -12;). Кстати, в старых версиях Delphi DefFontData — это всегда «MS Sans Serif» размером 8. В новых (вроде бы начиная с D2006) — это или «MS Sans Serif» 8 или системный шрифт «MS Shell Dlg 2» (доступен только в Windows Vista), если его удалось получить. Кроме того, вместо использования намертво зашитых шрифтов (типа Tahoma, MS Sans Serif, MS Shell Dlg 2 и Segoe UI) может быть лучше спросить систему о шрифте для UI. Этот подход в деталях разобран здесь.

Где моя индукция (или: зачем секретное окно)?

Windows Vista представляет несколько новых элементов, которые помогают улучшить взаимодействие пользователя с системой. Вы можете прочитать (слегка устаревшую) статью про индуктивный пользовательский интерфейс (inductive user interfaces). Фактически, индуктивный пользовательский интерфейс помогает пользователю ориентироваться в том, что происходит на экране.

Некоторые примеры этого в Windows Vista включают в себя новую анимацию минимизации и максимизации окон. Как заметил в своём интервью Ales Holecek, многие пользователи не понимают концепции окон и связи окна с кнопкой в панели задач. Они не понимают, куда девается окно, когда оно минимизируется и остаётся только кнопка на панели задач. Чтобы исправить это (и покрасоваться новым 3D UI — Aero) в Vista, окна гладко анимируются в 3D в, и из, своих кнопок в панели задач при минимизации или максимизации.

Читайте также:
Как написать программу в паскаль фри

Давайте. Попробуйте сами. но только не со своими Delphi приложениями! Если вы минимизируете или максимизируете приложение Delphi в Vista, то анимация будет как у закрывающегося и открывающегося окна: окно пропадает (fades away) или плавно появляется. Причина в том, что каждое приложение Delphi имеет скрытую секретную «форму application».

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

Давайте отвлечёмся на один момент для того, чтобы обсудить еще одну особенность Windows Vista. Мы скоро вернёмся к нашему Тайному Окну. Итак, эта новая возможность в Vista (она также является элементом индуктивного интерфейса) позволяет нам увидеть предпросмотр окна просто проведя мышью по кнопке приложения в панели задач.

Это облегчает поиск нужной кнопки в панели задач, да и вообще смотрится, пожалуй, здорово. Та же техника используется и при прорисовке нового Flip 3D — 3D-представления классического экрана ALT+TAB. Если вы опробуете эти возможности на обычном, развёрнутом Delphi-приложении, то всё будет работать корректно. Однако, если вы попробуете повторить это со свёрнутым приложением, то увидите пустое окно с иконкой приложения в центре вместо нормального предпросмотра.

Предпросмотр — развёрнутое приложение Delphi

Предпросмотр — свёрнутое приложение Delphi

Flip 3D со свёрнутым приложением Delphi

Теперь, давайте посмотрим, как мы можем исправить проблему! Мы пойдём способом, описанным Peter Below. Первое, что нам нужно сделать — избавиться от кнопки в таскбаре от нашей скрытой «формы application». В FormCreate нашего приложения мы должны поменять флаги нашей «формы application»:

ShowWindow(Application.Handle, SW_HIDE); SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW); ShowWindow(Application.Handle, SW_SHOW);

Потом для каждой формы, для которой мы хотим иметь кнопку на панели задач (как минимум это будет главная форма), нам нужно переопределить CreateParams:

procedure TMainForm.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle and not WS_EX_TOOLWINDOW or WS_EX_APPWINDOW; end;

Наконец, для каждой формы, которая имеет кнопку в панели задач и может минимизироваться, нам надо обрабатывать оконное сообщение WM_SYSCOMMAND:

interface . protected procedure WMSyscommand(var Message: TWmSysCommand); message WM_SYSCOMMAND; . implementation . procedure TMainForm.WMSyscommand(var Message: TWmSysCommand); begin case (Message.CmdType and $FFF0) of SC_MINIMIZE: begin ShowWindow(Handle, SW_MINIMIZE); Message.Result := 0; end; SC_RESTORE: begin ShowWindow(Handle, SW_RESTORE); Message.Result := 0; end; else inherited; end; end;

Это заблокирует внутренние механизмы Delphi, которые заменяют сворачивание и разворачивание формы на скрытие и показ. Теперь наши формы должны вести себя корректно. Они правильно анимируются при минимизации/восстановлении, и они правильно отображают свой предпросмотр.

Однако, у нас осталась ещё одна серьёзная проблема. Если мы запустим наш пример и нажмём Help/About, а потом щёлкнем по нашей кнопке в панели задач, то главная форма покажется поверх нашего диалога! Потому что, по-умолчанию, Delphi устанавливает невидимую форму приложения как родителя всем модальным формам. Чтобы исправить это, вы должны установливать Form.PopupParent перед каждым вызовом Form.ShowModal:

procedure TMainForm.AboutActionExecute(Sender: TObject); begin AboutForm := TAboutForm.Create(Self); try AboutForm.PopupParent := Self; AboutForm.ShowModal; finally FreeAndNil(AboutForm); end; end;

Пусть ваши приложения сияют

Если только вы не свалились с луны, то знаете, что приложения, запущенные под Windows Vista (на машинах с графическим 3D-акселератором), рисуются с полупрозрачными, стекло-подобными рамкой и неклиентской частью. Это называется, метко, Стеклом. В DWM (Desktop Windows Manager) есть API функции, которые помогут вам расширить поверхность Стекла внутрь клиентской области вашего приложения. Хотя это не всегда бывает нужно, но может иногда помочь вашему приложению больше вписываться в образ “Vista-программы”.

Статьи о Delphi

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

Беру я в руки карандаш…

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

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

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

Читайте также:
Отключить программу для слепых на телефоне

…им я линию веду

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

а) пойти к знакомому за советом;
б) найти ответ в Интернете;
в) обратиться к справке или учебнику.

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

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

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

Кодируем

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

Обычно в самом начале даешь переменным имена из одной буквы: a, b, c, и так далее. Согласитесь, когда переменных набирается много (а это происходит довольно быстро) становится просто нереально вспомнить, что такое «а», а что — «с». Поэтому в первую очередь давайте переменным и константам “говорящие” имена: например Version — содержит версию программы, а Index — хранит в себе какой-то номер.

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

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

Теперь мне следует сделать важное замечание. Все, что было мной изложено в этом разделе, можно безболезненно применять в среде Delphi. Такие языки, как С++, чувствительны к регистру, и если вы поступите так, как я советовал, компилятор выдаст ошибку.

Теперь о менее важном. Всегда делай в коде комментарии. Они помогут тебе вспомнить, что и где ты делал (или помогут понять ход твоих действий другому, если, например, ты работаешь в команде). В комментариях же следует делать для себя пометки типа или другие.

Не следует бояться, что от комментариев размер конечного «экзешника» сильно вырастет, потому как многие компиляторы просто удаляют их из текста программы. И еще одно. Как я уже говорил, следует часто встречающиеся участки кода выделить в отдельные функции. От этого выиграют все: уменьшится “вес” программы, облегчится поиск ошибок и отладка.

А когда в тексте программы наберется слишком много функций, их можно перенести в отдельную библиотеку (кто не понял — DLL). О преимуществах все уже сказано.

Юзабилити

И еще раз о внешнем виде. Поменьше оригинальничай. Запомни, что в M$ сидят совсем не дураки, как многие считают (каюсь, сам грешен), поэтому не надо на каждом шагу вставлять прозрачные окошки невозможных форм и такие же невозможные кнопки только потому, что ты это умеешь. Дизайн всей Windows тщательно продуман, поэтому не будем изобретать велосипед.

Заключение

Надеюсь, что данным трудом я хоть немного пролил свет на некоторые аспекты написания качественной программы. Хочу сказать, что главное в нашем деле — практика. Можно прочесть тысячи страниц текста, но без применения эти знания будут лежать мертвым грузом. Несколько ссылок: www.delphimaster.ru, www.delphikingdom.ru, www.torry.net (ОГРОМНАЯ база компонентов и модулей для Delphi), www.borland.com (если интересна работа с сетевыми функциями при помощи API).

Буду рад, если люди с кривыми руками смогут их выпрямить, следуя некоторым моим советам. Все они необходимы по-своему, проверено на себе. Удачи!

По материалам сайта Новый Мегабайт

Источник: delphi-manual.ru

Программирование с нуля самостоятельно

Программирование с нуля самостоятельно.

Итак, Вы скачали и установили среду разработки Delphi 7 (на более поздних версиях обучаться сложнее, да и бесплатный исходник найти труднее). Седьмая делфи создана под 32-х разрядный процессор, однако её можно запускать и под 64-х разрядным процессором, если настроить OC на выполнение 32-х разрядных приложений (именно так называются программы в среде Windows).

Ещё одно замечание — некоторые сборки Delphi работают правильно, если только пользователь заходит под учётной записью администратора (как создать пользователя с админскими правами ОС Windows — см. в интернете).

Итак, скачайте и установите среду разработки Delphi 7.

Delphi 7. Первое знакомство.

После установки Delphi обычно на рабочем столе появляется ярлычок. Запустим с его помощью делфи. Появится окно приветствия.

Читайте также:
Кто сидит на моем вай фай программа на русском

А затем делфи загрузит множество окон и панелей, образующих среду разработки для программиста. Познакомимся с ней.

Как мы видим, открыто окно с формой. Посмотрим короткое видео с беглым обзором — из каких частей состоит эта самая среда разработки.

Видео. Среда разработки Delphi.

Видео. Ваша первая программа.

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

Как всё работает.

Разберём это подробнее.

Во-первых, рассмотрим идеологию построения программы в Delphi. Эта идеология называется ОБЪЕКТНО ориентированной. Запомните это слово! По сути, вся программа на 80-90% состоит из объектов.

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

Сразу отметим, что не все компоненты предназначены для визуального отображения на форме. Поэтому компоненты, отображаемые на форме Delphi, называют визуальными компонентами . Часто объекты имитируют внешний вид и поведение реальных объектов. Например, в нашем случае это кнопка. Объект «button» (кнопка) имитирует её внешний вид, имитирует процесс нажатия и действие, приводящее к результату.

А что такое программа?

Это слово мы применяем достаточно часто. Но что оно значит с точки зрения программиста? Можно сказать так — программа, это последовательность машинных команд, предназначенная для выполнения поставленной задачи. Например, стоит задача иметь на компьютере инструмент, позволяющий автоматизировать арифметические действия, то есть, по сути, имитировать объект «калькулятор».

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

Далее специальная программа «компилятор» преобразует исходный текст программы в двоичный код, понятный процессору.

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

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

Ещё раз об объекте.

Каждому объекту даётся имя. Например, объект «кнопка» имеет имя TButton, поле ввода и редактирования имеет имя TEdit и т.д. Каждому объекту в пределах среды программирования даётся уникальное имя. Но код объекта — это «собственность» среды программирования. Как же код объекта оказывается в теле программы?

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

Каждому экземпляру дается уникальное в пределах модуля программы имя. Например, Edit1 и Edit2. Именно через это имя происходит работа с экземпляром объекта, как было показано ранее.

Как возобновить работу над проектом.

Если Вы закрыли среду разработки, то для возобновления работы с проектом надо вновь его загрузить. Для этого выбираем пункт меню «File» (или «Файл», если среда русифицирована) и затем команду «Open Project» — открыть проект. В открывшемся проводнике выбираем имя нашего проекта.

Как сохранить результаты.

Для этого выбираем пункт меню «File» и из нескольких вариантов команд сохранения выбираем «Save All», чтобы гарантированно сохранить все изменения, произошедшие в процессе редактирования программы. В результате среда создаст набор файлов, главными из которых будут: файл с текстом проекта Project1.dpr, файл с текстом модуля Unit1.pas, файл с текстом описания формы Unit1.dfm. Если форм в программе будет несколько, то соответственно будем иметь Unit2.pas, … , и Unit2.dfm, … .

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

Заключение.

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

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

Попробуйте сами, не заглядывая в «шпаргалку», написать подобную программу. Если у Вас возникнут вопросы, размещайте их в комментариях.

Глоссарий.

Не забывайте, что в дальнейшем Вам понадобятся следующие понятия:

  1. Среда разработки.
  2. Компонент среды разработки.
  3. Объект.
  4. Имя объекта.
  5. Тип объекта.
  6. Проект.
  7. Форма.
  8. Модуль.

Источник: programlife.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru