Лидеры
Популярный контент
Показан контент с высокой репутацией 22.10.2016 во всех областях
-
*** Небольшой обмен опытом *** Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками. 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; --- Также данные функции можно найти в этом юните2 балла
-
В некоторых приложениях под Android, в частности ES проводник, есть возможность быстрой оценки приложения, когда не выходя из него, без перехода на Google Play, можно выбрать от 1 до 5 звезд. Можно ли это организовать с помощью FMX?1 балл
-
К сожалению, это сделает функцию более медленной, я был перед выбором или скорость или точность, учитывая уже имеющиеся тормоза FMX я решил выбрать скорость. Но даже так функция работает весьма не плохо. Да, в будущем расширю обе функции для этого.1 балл
-
Как обратиться к Item в ListView
Равиль Зарипов (ZuBy) отреагировал sinuke за вопрос
если ListView.ItemIndex = -1, тогда элемент не выбран, если <>-1, то это и есть индекс выбранного элемента1 балл -
I think, it's worth paing attention that ItemAppearence includes also Header and Footer.1 балл
-
Как обратиться к Item в ListView
Равиль Зарипов (ZuBy) отреагировал Просто Проги за вопрос
тебе нужно знать какой сейчас элемент выбран в listview тогда так можно попробовать. label.Text:=ListView1.Selected.Index.ToString(); покажет какой элемент сейчас выбран в listView1 балл -
Не претендую на самое лаконичное решение, но проверку можно организовать так: var tmp: TNotifyEvent; // понятно, что тут должен быть нужный тип события, лень смотреть, что там с OnKeyDown begin tmp:=myProc; if (TMethod(OnActivate).Code = TMethod(tmp).Code) and (TMethod(OnActivate).Data = TMethod(tmp).Data) then ;// именно myProc - обработчик события OnActivate1 балл
-
Как создать новый RESTRequest и передать ему полученные ранее куки
zairkz отреагировал Andrey Efimov за вопрос
ТС'у - не надо плодить и поднимать старые темы с одним и тем же вопросом! Все три темы объединил. Выбранный ТС'ом раздел как бы намекал... или ты уже перенёс тему?(вопрос более не актуален, посмотрел историю модерации)1 балл -
Как создать новый RESTRequest и передать ему полученные ранее куки
zairkz отреагировал Равиль Зарипов (ZuBy) за вопрос
каков вопрос - таков ответ. Раскрывайте вопрос полностью, с описанием версии студии, использованных компонентов UPDATE: RESTRequest1.AddAuthParameter('name','value',TRESTRequestParameterKind.pkCOOKIE); UPDATE2: можно использовать альтернативный вариант, куда можно передать куки (как из примера выше)1 балл -
Как обратиться к Item в ListView
Нуржан Актюбинец отреагировал Равиль Зарипов (ZuBy) за вопрос
ListView1.Items[0].Text := 'Сменим текст для Itema под индексом 0'; В ListView нельзя скрывать отдельные Item'ы1 балл -
[TJMediaRecorder] Запись видео в Android. Native и Intent
Pax Beach отреагировал Равиль Зарипов (ZuBy) за вопрос
вот так можно активировать фронтальную камеру VideoRecorder_front.zip1 балл -
Так куда уж подробнее Всё, что может меняться - должно иметь интерфейс подписки. Все заинтересованные объекты должны подписываться и отписываться. А уж реализация и передаваемая информация - это детали. У меня, например, в качестве события об уведомлении используется вот такое: type TNotificationAction = (naAdd, naChange, naDelete); TNotificationEvent<T> = procedure(Sender: TObject; Action: TNotificationAction; const Param: T) of object; Можете глянуть в исходники FMX, фраза для поиска - FreeNotification1 балл
-
Память и поведение приложения
Kitty отреагировал Andrey Efimov за вопрос
Не вдаваясь в подробности - ответ Да. Зачем создавать все контролы, если пользователю доступна только 1 вкладка? Создавайте их когда будет необходимость, т.е. например пользователь перейдёт на другую вкладку. А ещё лучше создавайте фрейм или форму по такому же принципу и будет вам счастье1 балл -
Как поделиться текстом и изображением в Твиттере и Фейсбуке?
Alex7wrt отреагировал Brovin Yaroslav за вопрос
Можно, нужно создать TWTweetComposeViewController, заполнить его текстом и изображением и затем отобразить. Документация TWTweetComposeViewController Class Reference1 балл -
Как поделиться текстом и изображением в Твиттере и Фейсбуке?
Alex7wrt отреагировал Brovin Yaroslav за вопрос
Исходный код примера для RAD Studio XE5: ShareSheet Описание: Taking and Sharing a Picture (iOS and Android) В FireMonkey реализованы стандартные действия для выполнения автоматической отправки данных другим приложениям телефона. Например, такие как: Отправка поста в Twitter или FaceBook Отправка письма Отправка SMS и другие Чтобы воспользоваться этой функцией в FireMonkey создано специальное стандартное действие TShowShareSheetAction, которое открывает стандартное системное окно выбора действия (постинг в Twitter или Facebook и тд). 1. Кидаем на форму TActionList. 2. Двойным кликом на компонент TActionList, открываем дизайнер действий. 3. В левом верхнем углу выбираем создание стандартного действия 4. Среди стандартных действий выбираем в группе "Media Library" действие TShowShareSheetAction. 5. Для созданного действия указываем текст сообщения или изображение (можно указывать как по отдельности эти данные, так и по частям). В зависимости от указанных данных (текст и изображение) действие откроет системное окно выбора действий приложений, которые могут обработать ваши данные. На картинке ниже, я указал текст сообщения и картинку через свойства TextMessage и Bitmap: 6. Подвязываем созданное действие к любой кнопке. 7. На ios и андроид нажатие на кнопку с действием приведет к отображению окна выбора действия: Подробный о том, как пользоваться этой функцией продемонстрирован в этом видео:1 балл