Компоненты VisualTech для Lazarus

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Компоненты VisualTech для Lazarus

Сообщение *Rik* » 28.10.2013 16:04:55

Компоненты VisualTech для Lazarus

(Аваст может ругаться на редкиий файл)
http://visual-t.ru/index.php/skachat

Пакет компонентов VisualTech. Содержит:
TFormBar - компонент с помощью которого можно организовать аналог MDI приложения.
TDesignerManager - дизайнер форм, (пока без наворотов, некогда дорабатывать..)
TSynSurSyn - подсветка синтаксиса для TSynEdit для языка Surgy
TxDBGrid - сетка с измененным оформлением и свойствами. У меня часто бывает, что хочется "впихать" в экран побольше информации, для этого сделал сетку, которая может отображать 2 поля в одном столбце (в столбцах смотрите свойства FieldName и xFieldName). Можно задать измененное оформление в стиле 1С7.
TLabeledDBEdit - Компонент на основе TDBEdit но с привязанной лэйблой (TLabel)
TDBEditButton - Компонент на основе TDBEdit но с привязанной лэйблой и кнопкой.

Скриншоты из Linux и Windows, TxDBGrid, TDBButtonEdit, TLabeledDBEdit
ИзображениеИзображение

TxDBGrid Новые свойства
xStyle - xgsNormal, xgsClassic. Задает параметры отрисовки сетки, если xgsClassic - обычная сетка как TDBGrid, xgsNormal - как на рисунке выше.
IncRowHeight: Integer - задает приращение к высоте строки.
ImageList: TImageList - библиотека рисунков, которые могут быть отрисованы в заголовках столбцов и в самих ячейках, в зависимости от значения поля. Для отрисовки изображений, в столбце установить свойство DrawImage := True или xDrawImage := True. Если поле числовое, сетка может использовать значение поля как ImageIndex из ImageList, или можно воспользоваться обработчиком события OnGetImageIndexFromField, в нем можно задать нужное значение ImageIndex в зависимости от значения поля в столбце.
DoubleRowHeight: Boolen - задает двойную высоту строки. Автоматически устанавливается в True, если в одном из столбцов назначено xFieldName.
Options.[xgxAutoSizeColumn] - при включении этой опции, поведение изменено. Сетка автоматически выравнивает ширину столбцов, но в процентном отношении к ширине всей сетки. Процент ширины столбца устанавливается в свойстве TxColumn.PrcWidth: Integer. Сумма PrcWidth всех столбцов не должна превышать 100.
Обработчики событий OnCellClick, OnTitleClick: TxDBGridClickEvent = procedure(Column: TxColumn; CellPos: TCellCursorPos) of object; В обработчик передается ссылка на столбец и позиция в ячейке, где произошло нажатие мышью. Если столбец не имеет второго поля, CellPos будет = ccpTop, если в столбце есть второе поле, CellPos может принимать значение ccpTop или ccpBottom.
Пример:
Код: Выделить всё
procedure TForm1.xDBGrid1TitleClick(Column: TxColumn; CellPos: TCellCursorPos);
begin
  if CellPos = ccpBottom then
    ShowMessage(Column.xFieldName)
  else
    ShowMessage(Column.FieldName);
end;

ThumbTrack: Boolean - разрешает прокрутку протягиванием скролл бара.

TxColumn
Добавлены свойства:
xFieldName - второе поле в столбце
WordWrap, xWordWrap: Boolean - перенос текста в ячейках сетки.
xAlignment - выравнивание текста второго поля в ячейке.
DrawImage, xDrawImage: Boolean - указывает, что в качестве значения поля будет отрисовано изображение из ImageList.

TLabeledDBEdit (см. рисунок выше, компонент TLabeledDBEdit внизу справа)
Компонент на основе TDBEdit но с привязанной лэйблой (TLabel). Лэйбла может быть отображена с любой стороны поля.
property LabelAlignment: TAlignment - выравнивание текста в лэйбле. Если лэйбла по отношению к полю устанавливается справа или с лева, значение игнорируется. Если лэйбла слева от компоненты, выравнивание будет taRightJastify, если справа то taLeftJastify.
property LabelCaption: TCaption - Надпись которую отображает лэйбла;
property LabelVisible: Boolean - Cкрыть показать лэйблу;
property LabelAncorCompanion: TAnchorKind - задает позицию лэйблы. Вернее это свойство показывает где будет основной компонент по отношению к лэйбле. Т.е. Если лэйбла должна быть сверху, то основной компонент DBEDit будет снизу, поэтому значение = akBottom, если лэйбла должна быть снизу, то LabelAncorCompanion = akTop, слева akRight, справа akLeft.

TDBEditButton (см. рисунок выше, компонент TDBEditButton внизу слева)
Компонент на основе TLabeledDBEdit но с привязанной кнопкой. Можно управлять шириной кнопки, надписью, позицией иконки. Событие OnButtonClick можно вызвать не прибегая к мыши, (когда фокус в TDBEDitButton) нажатием Ctrl + Enter.
property ImageList библиотека рисунков.
property ImageIndex - иконка на кнопке
property DownImageIndex - иконка, которая отрисовывается когда кнопка нажата.
property ButtonWidth - ширина кнопки
property ButtonSpacing - Если есть текст и рисунок, ширина между ними (по умолчанию 4)
property ButtonLayot - позиция иконки на кнопке.
property ButtonCaption - надпись на кнопке
property CanceledFlat - работает совместно со свойством Flat. Если Flat = True и CanceledFlat = True, при получении фокуса Flat отменяется, при потере фокуса Flat снова = True.

Добавлено спустя 19 часов 35 минут 11 секунд:
Добавил TlabeledDBECombo, TLabeledDBLookupCombo
Последний раз редактировалось *Rik* 11.12.2013 13:40:31, всего редактировалось 5 раз(а).
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Компоненты VisualTech для Lazarus

Сообщение *Rik* » 21.11.2013 15:41:57

21.11.2013. обновлены компоненты VisualTech, добавлен новый компонент TFrameBar, с помощью него можно организовать аналог MDI приложения на основе фреймов. Пример прилагается (папка ..Visualtech\Examples). Обновлена компонента FormDesigner, добавлены опции "Вырезать", "Копировать", "Вставить" (пока через контекстное меню дизайнера, Ctrl+C и т.д. пока не работает), группу компонентов можно выбрать протягиванием мыши, удерживая "Ctrl". Обновлен CrossDBEngine, который ребрендился в "P-Plus", добавлены сервисы: использовать модуль (подключает имя модуля в раздел uses), мастер форм (создание формы и фрейма по шаблону). Расположение и размер элементов Главное окно, инспектор, редактор и менеджер проекта можно сохранить через меню Опции->Сохранить расположение элементов.
Последний раз редактировалось *Rik* 11.12.2013 13:30:58, всего редактировалось 1 раз.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Компоненты VisualTech для Lazarus

Сообщение *Rik* » 26.11.2013 13:17:35

Компонент TXMLDocument в Lazarus, на сегодняшний день, позволяет читать документы только в UTF-8.
XMLCyrDecoder, позволяет расширить функционал для чтения в кодировке windows-1251 и cp866, без использования сторонних библиотек.
В архиве модуль с декодером, подключите его к своему проекту и добавьте в раздел uses одного из модулей.

ps:
CP866 взят из примера из Lazarus wiki..

Модуль XMLCyrDecode.pas можно взять здесь:
http://visual-t.ru/index.php/skachat
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Компоненты VisualTech для Lazarus

Сообщение hovadur » 30.11.2013 18:12:51

*Rik* писал(а):Модуль XMLCyrDecode.pas можно взять здесь:
http://visual-t.ru/index.php/skachat

The requested URL /files/xmlcyrdecod.zip was not found on this server.
На самом деле нужно дописать "e", чтобы получилось /files/xmlcyrdecode.zip
hovadur
постоялец
 
Сообщения: 116
Зарегистрирован: 31.01.2013 15:50:41

Re: Компоненты VisualTech для Lazarus

Сообщение *Rik* » 30.11.2013 20:01:18

hovadur писал(а):На самом деле нужно дописать "e", чтобы получилось /files/xmlcyrdecode.zip

Спасибо, исправил!
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Компоненты VisualTech для Lazarus

Сообщение *Rik* » 11.12.2013 13:29:20

Обновлены компоненты VisualTech добавлены компонента TFormsBar, аналог TFrameBar, с помощью которой можно организовать аналог MDI на основе обычных форм с определенными хитростями (идея спизж.. позаимствована в RxMDI, у формы убирается рамка и форма разворачивается на весь Parent.ClientRect). Пример прилагается (папка ..VisualTech/Examples..)
Развитие TFrameBar будет скорее всего прекращено в пользу TFormsBar.

Свойства TFormsBar:
FormsBarParent: TWinControl - определяет Parent для добавленных форм, если не указано то для всех форм Parent будет TformsBar.Parent
ItemDefaultWidth: Integer - ширина кнопок по умолчанию.
ImageList: TImageList - библиотека иконок.
HomeButton: Boolean - показывать или нет домашнюю кнопку (если показывать кнопка отрисовывается после отрисовки кнопок форм, на рисунке ниже - зеленый плюс).
HomeIconIndex: Integer - номер иконки для HomeButton.
HomeAction: TAction - действие для HomeButton.
OnHomeButtonClick: TNotifyEvent - событие, которое происходит при нажатии на HomeButton (Если не задано HomeAction).
SysButton: Boolean - задает системную кнопку, кнопка находится с крайней правой позиции (на рисунке ниже красный крестик).
SysIconIndex: Integer - задает номер иконки для SysButton.
OnSysButtonClick: TNotifyEvent - происходит при нажатии на SysButton, в параметр Sender передается указатель на активную форму, если такой нет, то nil.
CloseBtn: Boolean - задает использование маленьких кнопочек на кнопке формы.
OnCloseBtnClick: TNotifyEvent - событие происходит при нажатие на CloseBtn. в параметр Sender передается указатель на форму которой принадлежит кнопка.
WrapText: Boolean - разрешает перенос текста (Form.Caption) на кнопках.
FormsBarBorders - задает рамку для TFromsbar.
HighLightFont: TFont - шрифт с которым отрисовывается кнопка активной формы.

Items[Index: Integer]: TCustomForm - Получить форму с индексом Index.
FormCount: Integer - количество зарегистрированных форм

Методы TFormsBar:
procedure AddForm(AForm: TCustomForm; IconIndex: Integer); - добавляет форму. IconIndex - иконка из ImageList
procedure InsertForm(AFrom, AfterForm: TCustomForm; IconIndex: Integer) - вставляет форму после AfterForm.
procedure RemoveForm(AForm: TForm) - Удаляет форму.
procedure ActivateForm(AForm: TCustomForm) - делает форму AForm активной.
procedure Clear - очистить.
procedure CloseAll - закрывает все окна.

Скриншоты из Windows и Lunux:

Изображение

Изображение
Последний раз редактировалось *Rik* 13.12.2013 07:38:22, всего редактировалось 1 раз.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Компоненты VisualTech для Lazarus

Сообщение alexs » 11.12.2013 21:27:42

*Rik* писал(а):идея спизж.. позаимствована в RxMDI

О!!
Если разберёшься с коректным закрытием всех окон сразу - буду изучать твой код. У меня иногда появляется AV при CloseAll.
Как я понимаю - событие закрытия окна иногда теряется оконной системой и у формы не срабатывает метод OnClose.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Компоненты VisualTech для Lazarus

Сообщение *Rik* » 12.12.2013 09:34:20

alexs писал(а):
*Rik* писал(а):идея спизж.. позаимствована в RxMDI

О!!
Если разберёшься с коректным закрытием всех окон сразу - буду изучать твой код. У меня иногда появляется AV при CloseAll.
Как я понимаю - событие закрытия окна иногда теряется оконной системой и у формы не срабатывает метод OnClose.

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

Ещё заметил, иконки из TImageList, в которых есть пиксели, в которых цвет идет с наложением альфа канала, в Lunux отрисовываются (TImageList.Draw) криво, эти пиксели рисуются как не полупрозрачные, а полностью не прозрачные, из-за этого иконка выглядит корявой (видно на рисунках выше, в Win нормально, в Lunux нет).
Может я что-то не так делаю?
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Компоненты VisualTech для Lazarus

Сообщение alexs » 13.12.2013 09:38:38

есть такая бяка.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru