уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Школьник Ну что ж, продолжим знакомство с Delphi Prism. Думал с чего бы такого начать, чтобы: а) не переписывать пол MSDN, переводя с русского на…русский только своими словами; б) наиболее полно разобраться с тем, что меня на данный момент интересует, а именно посмотреть, что удобнее для меня как человека долго использующего Delphi – C# или Delphi Prism. Может показаться, что ответ на вопрос заведомо известен и звучит как-то типо “Конечно Prism – он же похож на Delphi!”, но пока, судя по пока ещё первым впечатлениям однозначности нету. Есть интересные моменты и в Delphi Prism и в C# и каждый по своему удобен, красив, элегантен и т.д. и т.п.

В результате чего у меня и родилась такая небольшая идея: зачем мне переписывать в блоге то, что есть в wiki по Delphi Prism, например, правила объявления переменных или как работать с массивами? Кому надо, тот прекрасно найдет эту информацию. Лучше изобрету-ка я для себя небольшой такой “велосипед” :). Дело в том, что первой программой, которую я написал, используя возможности C# была программа для проведения GAP-анализа (не путать с gup:)) – небольшая, простенькая на которой я постигал азы C#. Вот я и решил – в свободное время буду писать точно такую же программку, но на Delphi Prism. Тем самым я смогу однозначно для себя определится с ответом на свой вопрос, а те, кому интересна тема смогут, так сказать, вживую посмотреть на разработку программы. Тем более, что в программке обнаружились кое-какие недочеты – вот заодно их и подправлю, используя Delphi Prism.

Конечно, я буду уделять некоторое время и место на то, чтобы рассказать о том, что есть нового в Delphi Prism, давать пояснения к коду, может быть затрону некоторые моменты по работе с Visual Studio, но в целом работа будет вестись не на простой пересказ того, что есть, а на достижение поставленной цели – разработка работающей программы.

О чем пойдет речь?

В начале пару слов о том, что такое GAP-анализ и как он проводится.

«GAP-анализ» (анализ разрывов) — метод стратегического анализа, с помощью которого осуществляется поиск шагов для достижения заданной цели.

В двух словах суть такого анализа заключается в том, чтобы оценить разрыв между тем, что мы имеем в наличии и тем, что нам необходимо. К примеру, GAP-анализ довольно широко используется как предварительная оценка готовности какого-либо предприятия к внедрению экологического менеджмента согласно мировым стандартам серии ISO 14000.

Простейшая и, наверное самая удачная, форма проведения GAP-анализа – анкетирование. Составляется перечень вопросов, затрагивающих какую-либо сторону деятельности, к каждому вопросу дается на выбор несколько ответов по которым можно охарактеризовать тот или иной “разрыв” или, напротив, сказать о полной готовности объекта исследования. Для оценки используется балльная система – каждый вариант ответа оценивается по-своему, но по всей анкете баллы за ответы обычно распределены равномерно. Человек отвечает на вопросы и получает какое либо количество баллов, скажем Х баллов за все ответы. Максимальное количество баллов – Y. Разница между двумя этими величинами характеризует общий разрыв, если опросник составлен из нескольких разделов, то можно дополнительно дать ответы на вопросы о том, в каких областях деятельности требуется что-либо поменять, улучшить, чтобы максимально быстро разрыв устранить или свести к минимуму.

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

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

Сразу оговорим некоторые моменты по работе программы.

Во-первых, за пример анкеты для GAP-анализа я возьму то, что у меня есть в наличии – анкету для оценки готовности к внедрению экологического менеджмента. Не пугайтесь по поводу “экстравагантности” моего выбора – Вам, скорее всего, даже не придётся  увидеть эту анкету на 90+ вопросов целиком, разве что парочку вопросов чисто для примера того как они вообще выглядят.

Во-вторых, что касается хранения и обработки данных. Можно было бы рассмотреть и работу с базой данных, но по-моему, в данном случае будет проще и удобнее ограничиться использованием XML-файла, в котором будем хранить вопросы, ответы и баллы. Заодно и посмотрим как работать с XML в Delphi Prism.

В-третьих, писать программу будем “по-старинке”, то есть у нас будет проект “Windows Forms Application” без всяких WPF, чтобы не затягивать работу над программой и не вникать ещё до кучи в эту относительно новую технологию.

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

  1. Указываем программе XML-файл, содержащий анкету
  2. Программа грузит список вопросов и поочередно выводит их на экран пользователю
  3. Пользователь отвечает на все вопросы и получает свой балл
  4. Программа выводит на экран отчёт в формате MS Word для дальнейшей его печати и, если необходимо, редактирования.

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

Создаем новый проект в Visual Studio

Вначале познакомимся немного со средой в которой будем работать – Visual Studio 2010. В прошлой статье я говорил как создавать новый проект для Windows – повторяем те же самые операции (Файл – Создать – Проект), но указываем тип проекта “Windows Forms Application”.

Visual Studio создаст для нас новый проект для Windows, содержащий одну пустую форму и необходимые для работы классы и методы. Вот здесь мы впервые познакомимся с Visual Studio в том виде, в котором мы привыкли работать при создании Win-приложений в RAD Studio – т.е. с видом на все окна, элементы и т.д. Вот, что мы получили в итоге:

vs3

В принципе все окна до рези в глазах знакомы – панель элементов управления, окно отладчика, окно свойств элемента управления (он же Object Inspector), обозреватель решений (в RAD Studio – Project Manager). В основном обсуждать-то особенно нечего, за исключением содержимого в окне “Обозревателя решения” – тут мы впервые сталкиваемся с тем, как выглядит простейшее .NET-приложение. Посмотрим, что мы имеем в новом решении:

Модуль Program.pas —  с этого модуля начинается выполнение нашей программы. Именно в нем определен главный метод Main(). В модуле определен статичный класс Program в котором содержится и метод Main(). По большому счёту к этому модулю мы, если и будем обращаться, то очень редко. Если проводить аналогию с Delphi, то этот модуль несет примерно ту же нагрузку, что и в Delphi модуль *.dpr. Поэтому пока просто запоминаем, что в этом модуле содержится главный метод и служит этот модуль для запуска приложения и создания главной формы.

Main.pas ветка в обозревателе содержит два отдельных файлов: Main.Designer.pas и Main.resx. То есть получается, что наша форма описана сразу в трех разных файлах: Main.pas и два файла из ветки.

vs4

В resx-файле хранятся атрибуты файла кода и с этим файлом работает среда разработки. Здесь среда сохраняет параметры формы для внутреннего использования и ресурсы программы. Можете открыть этот файл в любом текстовом редакторе и обнаружите, что это ни что иное как особым образом составленный XML-документ.

Файл Main.Designer.pas содержит код, сгенерированный дизайнером. Вот, что содержит файл на текущий момент:

namespace gap;
 
interface
 
uses
  System.Windows.Forms,
  System.Drawing;
 
type
  MainForm = partial class
  {$REGION Windows Form Designer generated fields}
  private
    components: System.ComponentModel.Container := nil;
    method InitializeComponent;
  {$ENDREGION}
  end;
 
implementation
 
{$REGION Windows Form Designer generated code}
method MainForm.InitializeComponent;
begin
  var resources: System.ComponentModel.ComponentResourceManager :=
new System.ComponentModel.ComponentResourceManager(typeOf(MainForm));
  self.SuspendLayout();
  //
  // MainForm
  //
  self.ClientSize := new System.Drawing.Size(490, 362);
  self.Icon := (resources.GetObject('$this.Icon') as System.Drawing.Icon);
  self.Name := 'MainForm';
  self.Text := 'GAP-анализ';
  self.ResumeLayout(false);
end;
{$ENDREGION}
 
end.

Можете ради интереса сменить, например, свойтво “Name” у формы и посмотреть как измениться содержимое модуля или объявите какое-нибудь событие.

Обратите внимание на ключевое слово partial в объявлении класса MainForm. Partial говорит нам о том, что всё, что описано в классе этого модуля, будет добавлено к конструктору из файла логики приложения – Main.pas.

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

namespace gap;
 
interface
 
uses
  System.Drawing,
  System.Collections,
  System.Collections.Generic,
  System.Windows.Forms,
  System.ComponentModel;
 
type
  ///
 
  /// Summary description for MainForm.
  /// 
 
  MainForm = partial class(System.Windows.Forms.Form)
  private
  protected
    method Dispose(disposing: Boolean); override;
  public
    constructor;
  end;
 
implementation
 
{$REGION Construction and Disposition}
constructor MainForm;
begin
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent();
  //
  // TODO: Add any constructor code after InitializeComponent call
  //
end;
 
method MainForm.Dispose(disposing: Boolean);
begin
  if disposing then begin
    if assigned(components) then
      components.Dispose();
    //
    // TODO: Add custom disposition code here
    //
  end;
  inherited Dispose(disposing);
end;
{$ENDREGION}
 
end.

 

Здесь мы уже видим подключенные по умолчанию пространства имен, которые по разумению IDE нам пригодятся. Здесь же описана вторая часть класса MainForm. Специально для нас в модуле даны поясняющие комментарии, например, недвусмысленно нам дают понять, что любые конструкторы следует вставлять только после того как отработал метод InitializeComponent(), а «убивать» самостоятельно объекты следует ДО вызова метода Dispose(disposing), но это мы с вам и так знаем из того, что умеем c Delphi.

Например, допишем в конструкторе такую строку:

constructor MainForm;
begin
  InitializeComponent();
  Text:="Hello, Visual Studio";
end;

 

Теперь запустите приложение и увидите, что заголовок формы изменился. Кстати, обратите внимание на то, как оформлена строка, мог бы воспользоваться и старым способом, заключив строку в одинарные кавычки и программа бы тоже запустилась, а в C# – нет, потому что там двойные кавычки для строк, а одинарные – для символов. Вот вам на досуге и пища для размышления – где удобнее/правильнее/логичнее объявление строковых констант в Delphi Prism или C#? :)

А я пока закругляюсь. Пойду допиливать одну интересную штуку в Delphi XE о которой скоро отпишусь в блоге ;).

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии