Как написать редактор форм? - PullRequest
0 голосов
/ 26 ноября 2008

Я пытаюсь написать редактор макетов для печати на VB6 или VB.Net и ищу несколько справочных статей, которые помогут мне начать работу.

Идея состоит в том, что редактор будет использоваться для определения «областей» печати для макетов счетов-фактур или выписок, позволяя пользователю нарисовать поле для адреса клиента, номера счета-фактуры, строк, итогов и т. Д. Затем программа определит как преобразовать размеры и позиции различных полей в места печати для сохранения в файле определения макета, который впоследствии используется системой учетных записей для печати различных отчетов. Обратите внимание, что по разным причинам (главным образом, из-за того, что система учетных записей не является Windows), размещение текста в Word или аналогичных продуктах и ​​распечатка документа невозможны. Конечно, я могу редактировать файл макета документа вручную, но он не очень удобен для пользователя.

Как вы можете себе представить, поиски «редактор форм», «редактор макетов» и т. П. Приносят много сотен несущественных результатов. Огорчает то, что я увидел очень важную статью, но потерял закладку.

Надеюсь, у кого-то есть указатели.


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

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

Ответы [ 2 ]

1 голос
/ 26 ноября 2008

Прежде всего, вы должны хорошо знать язык / API, которые вы используете, и на самом деле вы действительно должны указать, используете ли вы Windows.Forms, WPF, GTK # и т.д. Убедитесь, что вы очень хороши в этом.

Тогда вам следует подумать о формате, в котором ваш редактор форм будет хранить формы. Обычно редакторы форм используют XML. Если вы также хотите следовать этой тенденции, вы ДЕЙСТВИТЕЛЬНО должны изучить хороший XML API для VB.

Наконец, тщательно спланируйте свои шаги:

  1. Хотите ли вы использовать настраиваемые элементы управления текстовым полем, предоставляемые вашим API, или вы хотите нарисовать их вручную (если это так, вам нужно будет изучить API рисования)?
  2. Убедитесь, что вы хорошо понимаете формат файла определения макета.

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

Если вам нужно что-то еще (включая более конкретные инструкции), просто спросите.

0 голосов
/ 11 июля 2011

Я помню, как разрабатывал именно этот вид редактора форм распечаток в vb6, около 10 лет назад, iirc. Я не уверен, что все еще могу найти источники, к сожалению: действительно, я нашел этот вопрос, потому что мне нужно написать другой и надеялся найти какой-то код для запуска вместо того, чтобы делать это с нуля еще раз. во всяком случае, способ, которым я это реализовал, более или менее, был таким:

  • один пользовательский элемент управления для фона страницы, отображающий световую сетку и реагирующий на события мыши (например, отображать меню при щелчке правой кнопкой мыши);
  • каждое поле представляло собой пользовательский элемент управления без окон, отображающий также световую сетку, по одной ячейке на каждый символ (фиксированной ширины). он также реагировал на события мыши, так что его можно было перемещать и изменять его размер; когда я говорю «без окон», я имею в виду «не иметь hwnd», своего рода оптимизацию, которая позволила разместить множество экземпляров управления, не беспокоясь о влиянии на ресурсы; если вы собираетесь использовать .net, вам все равно, но если вы используете vb6, это действительно имеет значение;
  • одна сетка свойств, подобная сетке vb6, показывающая свойства выбранных полей. в моем случае я мог бы установить стиль текста (сжатый, расширенный, полужирный) и выражение, используемое во время выполнения для получения значения, которое будет напечатано;
  • загрузка файла макета приведет к увеличению размера страницы и созданию элемента управления полем для каждого поля в файле;
  • сохраняя записанные свойства страницы (размер, имя и т. Д.), Затем перечисляет коллекцию полей и записывает их свойства;
  • я не использовал xml, потому что формат файла уже был исправлен, так как он использовался механизмом, который выполнял фактическую печать; XML только сделал бы мою жизнь проще, не нужно писать собственный анализатор для формата файла данных.
  • требовалось работать только с матричными принтерами, но, к счастью, я не обрезал углы и мог легко адаптировать его для более точного размещения и размеров полей. я имею в виду, что я не поддался соблазну использовать координаты строк и столбцов и использовал вместо них твипы; потребовалось немного больше думать о математике, но, безусловно, никакой ракетостроения.

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

В настоящее время я бы не советовал vb6 много, если только это не то, что вы знаете лучше всего, и вам нужно создавать .exe вне зависимости от .net framework, установленного на целевых машинах.
если вместо этого вы решите использовать .net, я думаю, что это был бы хороший шанс изучить wpf, если вы его еще не знаете, это создает впечатляющую графику даже больше, чем windows.forms.

...