-
Постов
167 -
Зарегистрирован
-
Посещение
-
Победитель дней
8
Сообщения, опубликованные Error
-
-
Я создал данную тему чтобы выяснить наличие спроса на кастомные FMX компоненты. При наличии спроса будут появляться новые FMX компоненты.
TEsImageSelection
Начну с компонента позволяющего выделать часть изображения или фотографии, может быть полезно для создания аватарки в вашем приложении, графических редакторах, и подобном. Предусмотрен режим контроля границ, пропорционального выделения - к примеру для квадратной\круглой аватараки.
Интересно наличие спроса на данный компонент за цену в $8? (+вы получаете поддержку и новые версии в течении года)
-
19 часов назад, web_warp сказал:
При переносе немаленького проекта с Berlin Architect 24.0.22858.6822 на Berlin Architect 24.0.24468.8770 стал некорректно работать Code Completion (ctrl + space):
Он отрабатывает на собственные подключаемые классы,
меняя типы возвращаемых данных на int,
ни в какую не хочет, например, показывать список компонентов на форме, т.к. тоже всё меняет на int. Создаём UnicodeString CT, а Code Completion думает, что это int CT.
Что делать? Как лечить? Или меня в дурку уже?((
К сожалению на данный момент Code Completion частично сломан, и к сожалению, с каждой версией все хуже
Как можно попробовать починить:
- Возможно у вас в коде есть синтаксическая ошибка, даже одна ошибка может поломать весь Code Completion.
- Попробуйте пересобрать проект (Clean + Build).
- Попробуйте перезапустить IDE.
- Попробуйте пересоздать весь проект перетащив в него все юниты и формы, возможно на новом проекте Code Completion заработает.
-
Это баг, заводите issue в багтрекер
-
1 минуту назад, Ufomaster сказал:
A подскажите примет MVC шаблона
https://habrahabr.ru/search/?q=delphi+mvc#h
Правда чистый MVC в VCL не выйдет\не целесообразен.
-
20 минут назад, Alex7wrt сказал:
1. Функцию FontSizeForBox можно было бы привести к типу single, так как в FMX шрифт может быть нецелым и, кроме того, функция CalcTextSize у вас определяется типом TSizeF
К сожалению, это сделает функцию более медленной, я был перед выбором или скорость или точность, учитывая уже имеющиеся тормоза FMX я решил выбрать скорость. Но даже так функция работает весьма не плохо.
23 минуты назад, Alex7wrt сказал:2. Расширить функциональность FontSizeForBox на случай многострочного текста.
Да, в будущем расширю обе функции для этого.
-
3 минуты назад, Ufomaster сказал:
а как этот или можно еще лучше https://github.com/jimmckeeth/DelphiPatterns/blob/master/Behavioral.Observer/Pattern.pas
На мой взгляд - там все хорошо, и нет утечки памяти
-
*** Небольшой обмен опытом ***
Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками.
function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF;
Функция для расчета размера прямоугольника, занимаемого однострочным текстом.
Параметры:
- Text - Текст
- Font - Шрифт с которым будет выводиться текст
- Size - если 0, то Font.Size будет использоваться из Font, иначе из данного параметра
Исходный код:
uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(9999, 9999); TextLayout.Font.Assign(Font); if not SameValue(0, Size) then begin TextLayout.Font.Size := Size; end; TextLayout.WordWrap := False; TextLayout.Trimming := TTextTrimming.None; TextLayout.HorizontalAlign := TTextAlign.Leading; TextLayout.VerticalAlign := TTextAlign.Leading; finally TextLayout.EndUpdate; end; Result.Width := TextLayout.Width; Result.Height := TextLayout.Height; finally TextLayout.Free; end; end;
function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer;
Функция возвращающая максимально возможный размер шрифта, для текста вписанного в заданный прямоугольник.
Параметры:
- Text - Текст
- Font - Шрифт с которым будет выводиться текст
- Width, Height - Ширина и высота прямоугольника
- MaxFontSize - Максимально возможный размер шрифта
Исходный код:
uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; const cMaxFontSize = 512; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; var Size, Max, Min, MaxIterations: Integer; Current: TSizeF; begin Max := Trunc(MaxFontSize); Min := 0; MaxIterations := 20; repeat Size := (Max + Min) div 2; Current := CalcTextSize(Text, Font, Size); if ((Abs(Width - Current.Width) < 1) and (Width >= Current.Width)) and ((Abs(Height - Current.Height) < 1) and (Height >= Current.Height)) then break else if (Width < Current.Width) or (Height < Current.Height) then Max := Size else Min := Size; Dec(MaxIterations); until MaxIterations = 0; Result := Size; end;
---
Также данные функции можно найти в этом юните
-
1 час назад, Ufomaster сказал:
Изучаю паттерны. Меня интересует почему рабочий паттерн отличается от того который среда генерирует по умолчанию.
Я бы не пользовался данной функцией генерации паттернов, судя по тому что TList здесь создается не дженериковый, а обычный, функционал этот довольно заброшен.
А уж отсутствию(!) у TSubject удаления созданного им TList это еще и говнокод.
IObserver = interface procedure Update(ASubject: TSubject); end; TSubject = class strict private FObservers: TList; public constructor Create; procedure Attach(AObserver: IObserver); procedure Detach(AObserver: IObserver); strict protected procedure NotifyObservers; end; TConcreteSubject = class(TSubject) end; TConcreteObserver = class(TInterfacedObject, IObserver) public procedure Update(ASubject: TSubject); end; constructor TSubject.Create; begin inherited Create; FObservers := TList.Create; end; procedure TSubject.Attach(AObserver: IObserver); begin FObservers.Add(@AObserver); end; procedure TSubject.Detach(AObserver: IObserver); var idx: Integer; begin idx := FObservers.IndexOf(@AObserver); If idx <> -1 Then begin FObservers.Delete(idx); end; end; procedure TSubject.NotifyObservers; var Current: ^IObserver; begin for Current in FObservers do begin Current.Update(self); end; end; procedure TConcreteObserver.Update(ASubject: TSubject); begin // put your code here end;
-
4 часа назад, Ufomaster сказал:
cs:=TConcreteSubject.Create;
co:= TConcreteObserver.Create;
cs.Attach(co);
cs.NotifyObservers;
cs.Free;Я имею ввиду как сам класс получили
-
А как вы его генерируете ?
-
Только что, Steepe_Hare сказал:
менеджер событий - это один таймер на все события? но Interval же у всех разный
Это некий вспомогательный класс, к примеру TEventManager, который хранит список событий в формате <СсылкаНаОбработчик, НеобходимаяЗадержкаПередВызовом>,
Внутри класса молотит 1 таймер, обработчик которого проходит по списку и смотрит какие события необходимо вызвать и удалить из списка, или не удалять если нужна периодичность, а просто перенести НеобходимаяЗадержкаПередВызовом вперед.
Когда нам надо создать событие мы делаем что-то типо EventManager.Add(OnAnoterTimer, 100);
-
Добавлю что менеджер событий - это единственное верное решение, в противном случае (куча таймеров) приложение станет настолько не детерминированным, что глюки будут лезть отовсюду, а нормальная отладка просто невозможна.
-
1 час назад, chaplin.u@gmail.com сказал:
Спасибо Руслан но уровень заряда я знаю. Мне нужно на моей форме дать уровень заряда на удалённом приборе. Значёк батарейки с полосками внутри. Хорошо бы и цветом управлять.
Могу написать соответствующий компонент на заказ, если заинтересовало пишите на почту
-
Цитата
когда выбираешь "Настроить", появляется окошко с ползунком, которое хрен уберешь.
Достаточно еще раз нажать "Настроить"
ЦитатаРеализуй сворачивание в трей
Это противоречит философии приложения - максимальная простота - "в одно нажатие"
-
16 часов назад, ZuBy сказал:
Смотрел код, незнал что можно вызвать через апи.
я делал через .bat
shutdown -s -t <время> shutdown -a
Вконце концов "shutdown" дергает теже самые api
-
19 часов назад, Pax Beach сказал:
А в Android работает? ;-) Это очень актуально.
к сожалению на Android нет возможности выключить устройство программно без рут прав.
-
особой разницы чем стилизовать нет, это известная проблема, и к сожалению нормального решения нет.
-
PowerOff - максимально упрощенное приложение для автоотключения компьютера.
Приложение и исходный код можно загрузить здесь: https://github.com/errorcalc/PowerOff
Полезно если вы перед сном любите включать ролики на YouTube/музыку/сериалы/фильмы, но засыпаете и они продолжают играть всю ночь, вызывая на утро головную боль...
По большому счету утилита была написана и с целью проверить пригодность технологии FireMonkey для разработки - в целом - да, на данный момент, под Windows (и для имитирования UWP интерфейса), это вполне работоспособная технология.
-
-
-
-
Приложите скрин плиз, вполне возможно это баг из-за сглаживания текстур.
-
Лучше не использовать эффекты
-
8 часов назад, d7d1cd сказал:
До 1000 это одну копию программы или суммарно все проданные копии должны быть до 1000?
Насколько я понимаю это суммарный доход при использовании Starter
Спрос на компоненты
в Разработка компонентов
Опубликовано
Планируются все доступные платформы.