Tera Опубликовано 23 октября, 2015 Поделиться Опубликовано 23 октября, 2015 (изменено) Компоненты TSevSeg - семисегментный индикатор и TSeparator - разделитель. Переписал компоненты с VCL. Может, кому пригодится. Пример использования: Для разового использования можно просто подключить к проекту как модуль. SevenSegment.zip Изменено 23 декабря, 2016 пользователем Tera zairkz, AngryOwl, Andrey Efimov и 6 других 9 Цитата Ссылка на комментарий
Администраторы Brovin Yaroslav Опубликовано 23 октября, 2015 Администраторы Поделиться Опубликовано 23 октября, 2015 Добрый день, Юрий, Красота. Хороший компонент. Возможно вам пригодятся пара замечаний по портированию с VCL на FMX, которые помогу вам сделать ваш компонент еще лучше. Когда вы выполняете отрисовку в перекрытом методе TControl.Paint, не надо вызывать BeginScene и EndScene. Так как этими методами руководит сцена, обычно это форма. procedure TSeparator.Draw(px1, py1, px2, py2: Single; pColor: TAlphaColor; Opac: Single); var MyRect: TRectF; begin MyRect := TRectF.Create(px1, py1, px2, py2); with Canvas do begin [b] BeginScene; // <!--- Не нужно[/b] Fill.Kind := TBrushKind.Solid; Fill.Color := pColor; FillRect(MyRect, 0, 0, AllCorners, Opac); [b]EndScene; [/b][b]<!--- Не нужно[/b] end; Canvas end; Дополнительно: 1. Инициализацию точек для полигона можно сделать сразу на прямую. Было: // Установить точки, определяющие многоугольник p1 := TPointF.Create(px1, py1); p2 := TPointF.Create(px2, py2); p3 := TPointF.Create(px3, py3); p4 := TPointF.Create(px4, py4); p5 := TPointF.Create(px5, py5); p6 := TPointF.Create(px6, py6); // Создать полигон SetLength(MyPolygon, 6); MyPolygon[0] := p1; MyPolygon[1] := p2; MyPolygon[2] := p3; MyPolygon[3] := p4; MyPolygon[4] := p5; MyPolygon[5] := p6; Стало: MyPolygon := [TPointF.Create(px1, py1), TPointF.Create(px2, py2), TPointF.Create(px3, py3), TPointF.Create(px4, py4), TPointF.Create(px5, py5), TPointF.Create(px6, py6)]; При этом для динамических массивов перед присваивание не нужно вызывать функцию SetLength. Экономия места и 6 переменных. 2. Сравнение вещественных чисел должно осуществляться при помощи функции System.Math.SameValue. Это касается всех мест в этом юните. В противном случае у вас могут быть фантомные ложные срабатывания условий, которые найти будет сложно. Было: procedure TSevSeg.SetCellSpace(const Value: Single); begin if Value = CellSpace then exit; FCellSpace := Value; end; Стало: procedure TSevSeg.SetCellSpace(const Value: Single); begin if SameValue(Value, CellSpace) then exit; FCellSpace := Value; end; Равиль Зарипов (ZuBy), AngryOwl, Kitty и 3 других 6 Цитата Ссылка на комментарий
Tera Опубликовано 23 октября, 2015 Автор Поделиться Опубликовано 23 октября, 2015 (изменено) Спасибо Brovin Yaroslav за советы. Все исправил. Я совсем недавно стал изучать FireMonkey. SevenSegment.zip Изменено 23 декабря, 2016 пользователем Tera zairkz, AngryOwl и Kitty 3 Цитата Ссылка на комментарий
Tera Опубликовано 23 октября, 2015 Автор Поделиться Опубликовано 23 октября, 2015 Brovin Yaroslav, может вообще не стоит использовать Single, ведь пиксели все равно не делятся и где-то округляются. zairkz 1 Цитата Ссылка на комментарий
Администраторы Brovin Yaroslav Опубликовано 23 октября, 2015 Администраторы Поделиться Опубликовано 23 октября, 2015 Стоит. Так как FireMonkey использует вещественную координатную сетку, и поэтому особенно на устройствах с нестандартным скейлом около 1,33 вещественная сетка позволит избежать "прыганья" контрола при изменении его позиции Цитата Ссылка на комментарий
Администраторы Brovin Yaroslav Опубликовано 23 октября, 2015 Администраторы Поделиться Опубликовано 23 октября, 2015 В вашей новой версии SameValue так же нужно использовать для сравнения с 0 или 1. По факту - все сравнения вещественных чисел только с SameValue Цитата Ссылка на комментарий
Tera Опубликовано 27 октября, 2015 Автор Поделиться Опубликовано 27 октября, 2015 (изменено) Доработал компонент под Андроид. Исправил некоторые ошибки. В архиве есть примеры (без исходников). Индикатор можно подвигать мышкой или пальцем. SevenSegment.zip Изменено 23 декабря, 2016 пользователем Tera zairkz 1 Цитата Ссылка на комментарий
Tera Опубликовано 5 ноября, 2015 Автор Поделиться Опубликовано 5 ноября, 2015 Добавил несколько свойств. Text – позволяет вводить значение '-0', CodeSym – позволяет отображать некоторые буквы, для чего свойство Style необходимо установить в sCode. Добавил компонент TDegree – градус. SevenSegment.zip zairkz и rareMax 2 Цитата Ссылка на комментарий
david_yusupov Опубликовано 19 ноября, 2015 Поделиться Опубликовано 19 ноября, 2015 Спасибо классная штуку, очень помогло Цитата Ссылка на комментарий
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.