среда, 30 марта 2011 г.

Урок 1. Hellow World с изюминкой (блокировка запуска второй копии приложения Delphi)



Вот уже много лет я руковожу небольшим коллективом программистов, принимая непосредственное участие в написании кода на различных языках программирования. Последние лет 7-8 упор сделан на среду разработки Студия Борланд Дельфи (Delphi), а точнее – на язык, используемый в этой среде – Паскаль (Pascal).
О чем будет этот курс?
Мне не хотелось бы говорить об азах, расписанных во множестве учебников. Так же как не хотелось бы касаться вопросов управления средой разработки. Это приходит с практикой. За многие годы у меня накопился богатый опыт создания приложений с использованием баз данных. Вот этими знаниями и находками я и хотел бы поделиться.
В связи со сказанным, можно сделать вывод, что мой курс рассчитан на подготовленных пользователей.
А начну я, пожалуй, с обзора… нет, не литературы как таковой, а тематических сайтов.
  • Сайт wosoft.ru, где, кроме всех прочих полезностей и прелестей, в разделе Программы, образование, Справочники и энциклопедии, Вы можете найти книжку для начинающих, которая так и называется: «Учебник по Дельфи для чайников». Это – для тех, кто еще… сами понимаете…
  • Сайт delphibook.com, на котором также можно найти книги. В частности, я бы рекомендовал книги Архангельского. Вообще-то, всегда при выборе книги, рекомендую читать аннотацию, расположенную на обороте самой первой страницы. Там всегда указывается для кого предназначена эта книга: для начинающих или для профессионалов.
  • Очень много книг и статей на сайте RSDN.ru. Здесь Вы найдете весьма и весьма полное руководство «Программирование на языке Delphi». (Очень надеюсь, что авторы пошутили, поскольку такого языка не существует). Здесь подробно и наглядно рассказывается, как управлять средой разработки Дельфи, например в разделе «Проект приложения».
  • На следующем сайте, озаглавленном warayg.narod.ru (имеет ли название какое-то отношение к варягам не знаю), также можно найти неплохие, очень компактные, без воды пособия для начинающих и профи.
  • Настоятельно рекомендую вот эту ссылку: HelloWorld.ru – справочник по функциям. Аналогичная книга Сергея Свистунова уже много лет не переиздавалась, к сожалению. Здесь все удобно разложено по категориям. Множество хороших примеров.
  • Сайт SQL.ru просто не могу обойти вниманием. Это – копилка, это мощнейший живой форум. Однако, будьте готовы к тому, что на поиск ответа на любой вопрос вам придется потратить уйму времени.
  • DelphiExpert.ru – как Вы можете судить из меню слева – книги, программы, исходники, компоненты. Я же хочу обратить Ваше внимание на пункт меню «Видео уроки». Это как раз то, что нужно начинающим. Хотя материал неважно систематизирован, нарушен принцип от простого к сложному, но посмотреть не помешает.
  • И последняя ссылка на сайт Dcomponents.nsrod.ru – неплохой справочник (не учебник) по созданию компонентов.
Есть еще сайт с Базой  знаний по Delphi, через поисковик вы его найдете самостоятельно без труда. На этом сайте действительно собрана уникальная коллекция интересных решений. Но, как всегда и везде, мастера чуть-чуть чего-то не договаривают и Ваши попытки повторить их успех, зачастую могут привести к неудачным результатам.
На этом прелюдия закончена. В путь, по которому я предполагаю двигаться весьма условно от простого к сложному, но в результате которого, Вы будете уметь создавать  полноценные приложения с использованием баз данных, включающие графические иллюстрации, отчеты и контекстную справочную систему.
Но, прежде, чем я открою среду разработки и создам новый проект: «Хело ворлд с изюминкой :-) », я расскажу историю из жизни.
Мои коллеги – пользователи результатов моего повседневного труда – обычные люди, которым свойственно нажимать на иконку программы один раз, ну иногда – два раза и редко – три раза… Им даже не приходит в голову, что на каждый их клик компьютер реагирует – запускает одну и ту же программу по 2-3 копии одновременно.  А потом получалось так: оператор ввел какие-то важные данные, сохранил их, закрывает программу, а на экране… опять она, но уже без только что введенных цифр. Через пару столов невооруженным глазом было видно, как у коллеги в этот момент волосы вставали дыбом от шока. А посему призываю всех разработчиков: не пугайте ваших пользователей! Относитесь к ним бережно. Подумайте заранее, пользователь может оказаться беспечным и кликать на все подряд без видимой причинно-следственной связи.
Вот, чтобы исключить одну из подобных ситуаций, я и предлагаю создать программу, которая сама не допустит запустить себя же второй и тем более – третий раз.
Итак, создадим новый проект, закинем в него «чтобы было» одну кнопку,

напишем под ней простенький обработчик события нажатия кнопки:
procedure TForm2.Button1Click(Sender: TObject);
begin
// Вывод сообщения по нажатию кнопки
ShowMessage(‘Hello World!!!’);
end;
Но, не за этим я собрал Вас, дорогие читатели. Это все – прописи. Это – материал с «пятой» страницы любого из учебников.
Найдите в проводнике результат работы компиллятора – файл *.exe и запустите его. И еще раз запустите, и еще…
Да, да, да… Это можно делать, пока у компьютера ОЗУ не треснет:




Чтобы избавиться от этой проблемы, давайте откроем страницу исходного кода проекта:
program HW_Proj;
uses
Forms,
HW in ‘HW.pas’ {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
и вмешаемся в ее работу:
program HW_Proj;
uses
Forms,
windows,
HW in ‘HW.pas’ {Form2};
var
HM: THandle;
{$R *.res}
function Check: boolean;  {проверка на запуск второй копии программы}
begin
HM := OpenMutex(MUTEX_ALL_ACCESS, false, ‘MyProg’);
Result := (HM <> 0);
if HM = 0
then
HM := CreateMutex(nil, false, ‘MyProg’);
end;
begin
if Check
then Exit;
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Я использовал описание объекта Windows и функцию Check.
Попробуйте вновь открыть проводник и запустить несколько копий Вашей программы? Получилось?