Massdomain.ru

Хостинг и домены
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Можно ли скрывать исходный код компонента

Можно ли скрывать исходный код компонента

SwiftListTreeDataSource. Пакет для отображения древовидных данных в виде списка и возможностью поиска.

Демонстрация работы в приложениях TreeView (iOS) и FileViewer (macOS)

Демонстрация работы в приложениях TreeView (iOS) и FileViewer (macOS)

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

Создание диаграммы классов

Процесс проектирования приложения обычно подразумевает как минимум наличие схемы классов, которые будут созданы, и описание их взаимодействия. Среда Visual Studio 2013 имеет область проектирования Class Designer, в которой можно формировать диаграмму классов. Затем в классы можно добавлять поля, свойства и методы, а также устанавливать взаимоотношения между ними.

Несмотря на то что этот объект называется диаграммой классов, он поддерживает классы, структуры, перечисления, интерфейсы, абстрактные классы и делегаты. Существует несколько способов, с помощью которых разработчик может добавлять диаграмму классов в свой проект. Например, он может открыть диалоговое окно Add New Item, чтобы создать новую пустую диаграмму классов в проекте:

Добавление диаграммы классов в проект

Новую диаграмму классов можно добавить в проект, щелкнув на кнопке View Class Diagram инструментальной панели в окне Solution Explorer или щелкнув правой кнопкой мыши на проекте или классе, а затем выбрав команду View Class Diagram в контекстном меню. Если при этом проект был выделен, то система Visual Studio автоматически добавит все типы, определенные в проекте, в начальную диаграмму классов. Хотя в некоторых случаях это может оказаться удобным, для проекта, содержащего большое количество классов, процесс создания и уточнения такой диаграммы может оказаться слишком долгим.

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

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

Надстройку Class Designer можно разделить на четыре компонента: область проектирования (design surface), инструментальная панель Toolbox, окно Class Details, сетка свойств. Изменения диаграммы классов сохраняются в файле с расширением *.cd, который в сочетании с исходными файлами используется для генерации схемы, демонстрируемой в области проектирования Class Designer.

Как устроен компонент Select

Компонент Select построен с использованием HTML, CSS и JavaScript.

HTML код компонента Select:

Элемент с классом select определяет этот компонент. В нём находится вся HTML-структура селекта. Тег <button> с классом select__toggle и атрибутами data-select=»toggle» , data-index предназначен для отображения выбранного значения и открытия при нажатии на него выдающего списка с опциями. Само выпадающее меню реализовано посредством элемента select__dropdown . Оно с помощью CSS настраивается так, чтобы оно было расположено под <button> . Список вариантов ( .select__options ) организован посредством маркированного списка. Выбранный элемент в нём отмечается посредством добавления к нему класса select__option_selected .

Кроме непосредственной вставки HTML кода на страницу, предоставим также возможность создавать его автоматически с помощью JavaScript. Таким образом, на страницу будет достаточно поместить пустой элемент и инициализировать его как CustomSelect. Как устроен JavaScript код приведём ниже.

Читайте так же:
Можно ли пользоваться планшетом без сим карты

Классы элементов будем использовать в CSS для добавления к ним стилей, а data атрибуты — в JavaScript.

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

Элемент с классом select__toggle стилизуем в виде кнопки (текущий вариант в ней будем выводить как её содержимое).

Иконку к кнопке добавим через псевдоэлемент ::after :

По умолчанию dropdown меню не будет показываться. Включение его отображения будем осуществлять посредством добавления к нему класса select_show :

При этом при показе dropdown меню иконку будем поворачивать на 180 градусов посредством CSS трансформации:

CSS код для стилизации dropdown меню:

Стилизация при наведении на пункт меню:

JavaScript код компонента доступен на GitHub. Его можно открыть, используя эту ссылку.

Код написан с использованием класса:

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

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

Nuxt.js — быстрый старт

После вводного рассказа о положении дел на рынке, пришла пора попробовать нашего монстрика в деле. Сделать это совсем несложно — нам нужен только установленный Node.js. Дальше идём на nuxtjs.org/guide/installation и читаем, что нужно сделать.
Внимание, сайт хостится на Digital Ocean, который переодически блокируется нашим грозным РКН, так что вам может потребоваться VPN. Лично я читаю документацию в Opera — VPN там встроенный.

Дальше делаем npx create-nuxt-app и отвечаем на вопросы. Лично я выбираю пакетный менеджер Yarn и UI фреймворк Bootstrap-Vue. Из дополнений тащим Axios для сетевых запросов и поддержку PWA. Линтер и тесты нам пока ни к чему, режим работы — Universal (про это позже).

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

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

Структура проекта

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

  • assets — директория с картинками и стилями. Отсюда они будут импортироваться и включаться в проект.
  • components — тут будут лежать переиспользуемые компоненты, в терминологии MODX это сниппеты и чанки
  • layouts — шаблоны страниц
  • middleware — скрипты, которые запускаются перед рендером страниц, можно сказать, что это плагины в MODX
  • pages — сами страницы сайта (ресурсы), по которым автоматически строятся маршруты
  • plugins — js плагины с любым фнукционалом, расширяющие проект. Например, подключение сторонних компонентов из npmjs.org
  • static — статичные файлы, которые не включаются в проект, а будут доступны по прямым ссылкам, например robots.txt
  • store — хранилище Vuex, по умолчанию отключенное и нам пока не нужное
Читайте так же:
Можно ли перепрошить телевизор samsung

Давайте попробуем что-нибудь написать!

Однофайловые компоненты

  • template — html шаблон, который использует переменные из js
  • script — сам js код компонента, экспортиующий переменные для шаблона
  • style — стили оформления css (можно настроить и компиляцию sassscss)

Давайте поменяем уже наконец файл pages/index.vue :
и на странице вы увидите приветствие с текущим временем.

Что здесь произошло? Мы просто вернули переменную date через функцию data() компонента Vue. Подробнее (и гораздо познавательнее!) можно прочитать в официальном руководстве.

Давайте теперь усложним пример — сделаем запрос на удалённый сервер и выведем результат:

Мы выполнили запрос на фейковый REST API и вернули данные в функции created() , которая срабатывает при создании компонента.

При этом объявили пустую переменную posts заранее, так как ссылаемся на неё в шаблоне.

Компонент создаётся, страница отрисовывается с пустым posts , затем идёт запрос на удалённый сервер, переменная posts заполняется данными и страница их отображает автоматически. Ничего делать не нужно, просто код шаблона связан с переменной и когда она меняется — меняется и готовый HTML. Это называется реактивностью.

Продолжаем усложнять:
На этот раз нижняя часть вообще не изменилась, потому что она как получала данные, так и получает. Всем оформлением занимается шаблон (ну, примерно как Fenom в MODX)

Мы используем проход по массиву v-for , и обращение к его элементам, чтобы отрисовать данные.
Это всё, конечно же, есть в документации Vue.

Реактивность, как вы понимаете, работает в обе стороны. Мы можем менять переменную posts из шаблона:

Здесь мы переносим загрузку заметок в объект methods , который содержит функции нашего компонента. Теперь мы можем дергать loadPosts как при создании компонента, так и при нажатии кнопки.

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

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

Ну и напоследок уже продвинутый пример:

Здесь нужно много пояснений.

Во-первых, мы используем готовый компонент b-table из Bootstrap-Vue, у которого просто огромное количество настроек и параметров. Ближайший аналог — это гриды в ExtJS.

При вызове компонента эти самые параметры указываются ему в теге. Причём, можно указывать как обычные строки, так и переменные через двоеточие, что является сокращением от v-bind. То есть, если мы указали <component param="true"/> , то это строка "true" , а если <component :param="true"/> то это уже булево true .

В моём примере мы так указываем и булево значение, и переменные из функции data() . Обратите внимание, что на странице вызывается еще и второй компонент — b-pagination . Это во-вторых.

Ему нужно передать общее количество выводимых результатов. Но как мы их узнаем, если данные грузятся асинхронно, и на момент рендера страницы массив posts будет пуст? Тут нас выручает еще одна способность Vue — массив переменных computed. Это, по сути, не совсем переменные, а функции, которые дёргаются каждый раз, а потому выдают вычисляемые значения. А нашем случае переменная total будет зависеть от posts и каждый раз возвращать текущее количество элементов массив.

Читайте так же:
Можно ли удалить страницу в инстаграме навсегда

При создании страницы computed переменные смешиваются с обычными из data() , так что их имена не должны повторяться!

На эту же переменную мы завязываем и само отображение компонента через v-if. Как только posts очищается нажатием кнопки, пагинация сразу пропадает со страницы.

Ну и в-третьих, теперь нам нужно как-то связать эти 2 независимых компонента на странице. Как будет нажатие кнопки в пагинации менять вывод таблицы? А вот еще через одну переменную — page . Она указана как :current-page для b-table , и как v-model у b-pagination. Разница в том, что поле v-model может быть у компонента только одно, и оно изменяемо внутри этого компонента.

При переключении страницы пагинации page меняется, это видит b-table и показывает другие данные. Реактивность во всей красе.

Более того, мы можем добавить третью кнопку на страницу и менять page при нажатии на неё — это будет влиять и на таблицу, и на пагинацию. Потому что тут всё связано, не развяжешь.

Ну и последнее, что нужно пояснить — это слоты внутри таблицы. При создании компонента вы можете предусмотреть в нём изменяемые куски оформления, что-то типа плейсхолдеров, чтобы родительский компонент мог их подставить. Таким образом мы можем оформить каждую колонку b-table , даже несуществующую actions
При нажатии она меняет статус специального внутреннего шаблона row-details — это тоже фишка b-table .

И вот результат (gif, 2.5 Mb)

Заключение

Вот так мы и написали простенький проект на Nuxt.js на 60 строк с приличным функционалом.

Теперь можно выключить dev сервер и сгенерировать статическую версию командой yarn generate — и после выполнения команды вы получите всё нужное в директории dist:

Помните, в начале мы выбирали режим Universal? Вот это оно и есть — серверный рендеринг.

А режим SPA собирает только одну стартовую страницу, которая грузит все скрипты и обновляет её в зависимости от ваших действий.
На нашем маленьком приложении разницы особой нет, но если бы это был реальный проект — мы получили бы больше HTML страниц, которые были бы проиндексированы поисковиками. Собственно, для того я и советую сразу делать в режиме Universal.

Итак, сборщик компилирует ваш сайт в статический HTML, и вы можете его выгрузить куда-нибудь типа Github Pages, где он будет спокойно работать без PHP и Node.js. Вот, что получилось у меня — test-nuxt.bezumkin.ru

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

Установка PHP 5

Скачайте с сайта http :// aist . bmstu . ru / component / downloads PHP 5.2.9 для Windows . Распакуйте содержимое архива в папку C:SitePHP.

Некоторые архиваторы могут предложить распаковать архив в папку C:SitePHPphp-5.2.9-Win32, если вы распакуете его в данную папку, ничего работать не будет, будьте внимательны.

Установка PHP в качестве модуля

Установка PHP в качестве модуля немного повышает быстродействие, так как модуль PHP загружается один раз при запуске Web-сервера.

Читайте так же:
Можно ли украсть стим аккаунт

При установке PHP в качестве модуля настройки из php.ini читаются один раз при запуске Web-сервера. Поэтому при внесении изменений в php.ini необходимо перегрузить Apache для того, чтобы внесенные изменения вступили в силу.

Для установки PHP откройте главный настроечный файл Apache httpd.conf на редактирование в любом текстовом редакторе и добавьте строки:

AddType application/x- httpd — php phtml php
LoadModule php5_module c:/Site/PHP/php5apache2_2.dll

Печать из Delphi в Excel по шаблону

Прилагается исходный код компонента ExcelView и процедуры экспорта и печати по шаблону в Excel для Delphi 2010/XE/XE2. Доступна полная версия с примерами использования.

Зачем это нужно?

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

Поэтому вполне закономерно, что Excel широко используется и для разработки различных печатных форм. Хотя по своим возможностям он уступает специализированным генераторам отчетов, уже практически для всех типовых документов можно найти готовые Excel-шаблоны, от коммерческого предложения до товарно-транспортной накладной по форме 1-Т (http://blanker.ru/doc/38)

Что и как экспортировать?

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

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

  • все published свойства формы-владельца
  • все компоненты, принадлежащие форме-владельцу, и их published свойства
  • все наборы данных (наследники TDataSet) обрабатываются специальным образом, в шаблон подставляются значения их полей

Готовые решения на основе шаблонов

Компоненты для вывода в Excel довольно легко найти в интернете, например:

  • TMS Flexcel Studio (http://www.tmssoftware.com/site/flexcel.asp) — $125
  • ARExcelReport (http://www.vector-ski.com/reports/arexcelreport_index.htm) — бесплатный для некоммечерского использования, стоимость исходников — $125
  • Don Excel Report (http://www.don-soft.com.ar/DonExcelReport/products.php) — $75
  • AfalinaSoft XL Report (http://www.afalinasoft.com/download-xl-report.html) — «будет open source через месяц-два», — написано в 2003 году. Увы.
  • FlexCelReport (http://www.freewebs.com/flexcel/) — бесплатный, в исходниках. Для Delphi 5/6/7. Сайт в настоящее время недоступен. При пересборке пакетов под Delphi 2010-XE2 необходимо вносить серьезные изменения.

Do It Yourself

Библиотеки компонентов всем хороши (кроме стоимости, конечно), но даже наличие исходных текстов не всегда спасает от возможных неприятностей. Проблема в том, что кода становится слишком много. Например, один из лучших (на мой взгляд) — FlexCelReport — это 916 Кб в 174 исходных файлах. Переносить этот проект на современные версии Delphi становится проблематично.

В таких случаях остается вариант написания процедуры или компонента самостоятельно. В качестве стартовой точки для ознакомления можно рекомендовать http://www.webdelphi.ru/2009/08/rabota-s-excel-v-delphi-osnovy-osnov/, http://www.codenet.ru/progr/delphi/stat/export-to-excel.php и т.д.

Таблицы и поля в шаблонах

У всех компонентостроителей — свои правила записи переменных в шаблонах. В FlexCelReport — это именованные диапазоны с двумя подчеркиваниями «__MAIN__» и переменные в ячейках вида ##DataSetName##FieldName, в ARExcelReport — <#table:DataSetName> . <#table> и т.д.

Мы хотим еще проще. Только FieldName и ничего лишнего.

Читайте так же:
Можно ли спать после обеда

А где задается DataSet?

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

Еще одно допущение — если мы хотим вывести все записи из DataSet-а в виде таблицы, ставим перед его именем звездочку (*tblOrders). Без звездочки будут выводиться только значения полей текущей записи.

шаблон ExcelView

Свойства и компоненты в шаблонах

Для вывода в шаблоне published свойства текущей формы запишем в ячейке имя этого свойства в квадратных скобках: [Caption], [Tag]. Свойства компонентов формы записываются с именем компонента через точку: [Memo1.Lines]. Поддерживаются (пока) свойства следующих типов: Integer, Int64, String, Double, Boolean, TStrings.

Реализация

Весь код находится в файле ExcelView.pas (7 Кб). Компонент TExcelView имеет единственное published свойство TemplateFileName — это имя файла шаблона. Метод Show открывает Excel и запускает процесс экспорта.

Можно и не устанавливать компонент в палитру, а сразу выполнить процедуру

Обратите внимание на параметр Owner! Это тот компонент (форма, датамодуль), чьи свойства, компоненты, датасеты и будут экспортироваться в Excel.

1 ответ 1

По умолчанию этот компонент не устанавливается в VS 2017. Для установки открываем VS Installer и у установленного экземпляра VS выбираем пункт "Изменить":

В открывшемся окне переходим на вкладку "Отдельные компоненты" и в разделе "Средства для работы с кодом" выбираем компонент "Конструктор классов" и устанавливаем его.

После установки компонента элемент "Диаграмма классов" становится доступен.

Альтернативный вариант

В VS 2017 нажимаем комбинацию Ctrl + Q или в панели быстрого запуска (верхний правый угол) пишем "Конструктор классов" и выбираем появившийся элемент:

Относительно не давно обновил студию, и к моему удивлению я не обнаружил в ней Диаграмм классов. Оказалось что их надо было выбирать при установки студии. Но обо всем по порядку. Диаграмма классов очень похожа на язык UML, но не путайте, это язык DSL— domain specific language это определенный архитектурный слой который описывает бизнес сущности и модель. Применяют его в программировании в основном для визуального представления всех классов и методов проекта и их внутренний логику взаимодействия. Хотя UML был предназначен для конструирования приложения, часть возможностей перетекла и в DSL. Тут таким же образом можно наглядно используя конструктор, создавать, классы, поля и методы, проводить между ними ассоциативные связи итд. Однако мы отошли от нашей проблемы, а именно того как установить класс диаграмм в visual studio 2017.

Для этого зайдем в студию и выберем в пункте Средства>Получить средства и компоненты… как показано на рисунке выше. Запустится Visual Studio Installer в котором необходимо установить галочку в пункте Разработка расширений Visual Studio, а в окне Сводка установить галочку Конструктор компонентов. И нажать кнопку Изменить, не забудьте перед этим закрыть саму студию. Недостающие компоненты будут загружены и когда вы запустите студию сможете воспользоваться классом диаграмм.

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector