-
Постов
2 124 -
Зарегистрирован
-
Посещение
-
Победитель дней
390
Весь контент Brovin Yaroslav
-
[Отклонение] Не перерисовываются границы в TGrid
Brovin Yaroslav ответил PandoraBoxes вопрос в TGrid
Добрый день, Ошибку завел в трекере. Временный Workaround: Открыть файл FMX.Grid.pas Найти TCustomGrid.DoContentPaint Предположительно 2292 строчка. Найти код: if TGridOption.RowLines in Options then begin W := Content.Width - 1; P := TPointF.Create(0, TopRow * FRowHeight); P := Content.LocalToAbsolute(P); P := TControl(Sender).AbsoluteToLocal(P); P.Offset(0.5, -0.5); for I := 0 to VisibleRows do // no -1 begin Canvas.DrawLine(P, PointF(P.X + W, P.Y), LAbsoluteOpacity); P.Offset(0, FRowHeight); end; end; Добавить после P.Offset(0.5, -0.5) P.X := P.X + ViewportPosition.X; Добавить исправленный файл в ваш проект. -
Как правильно написал haword, да, такая ошибка есть в XE7. Она уже была локально устранена. Решения для всех у кого XE7. Найти файл FMX.SearchBox.pas, заменить код: procedure TSearchBoxModel.DoChangeTracking; var Lower: string; begin inherited; Lower := Text.Trim.ToLower; if SearchResponder <> nil then SearchResponder.SetFilterPredicate( function (X: string): Boolean begin Result := Lower.IsEmpty or LowerCase(X).Contains(Lower); end); end; На: procedure TSearchBoxModel.DoChangeTracking; var Lower: string; begin inherited; Lower := Text.Trim.ToLower; if SearchResponder <> nil then SearchResponder.SetFilterPredicate( function (X: string): Boolean begin Result := Lower.IsEmpty or X.ToLower.Contains(Lower); // <-- заменить LowerCase на ToLower end); end; И добавить этот файл в ваш проект
-
Memo не дает такой возможности. Внутри он действительно знает всю информацию обо всех линиях. Но этот код открыт только для наследников.
-
[TGrid] Не могу загрузить jpg из ресурсов в TImageColumn
Brovin Yaroslav ответил anst вопрос в TGrid
TGrid не хранит значения в отличии от TStringGrid. Поэтому TGrid запрашивает данные в тот момент, когда они необходимы для отображения ячейки через событие: TGrid.OnGetValue. В качестве параметров передается запрашиваемые данные для строки Row и столбца Col, а так же непосредственно параметр для передачи самого значения Value. Поэтому, чтобы вам задать значение для любого столбца, вам нужно написать обработчик для события OnGetValue. И в Value поместить значение. Например, чтобы для столбца типа TImageColumn присвоить значение нужно написать следующий код: procedure TForm4.Grid1GetValue(Sender: TObject; const Col, Row: Integer; var Value: TValue); var Bitmap: TBitmap; begin // загружаем любое изображение Bitmap := TBitmap.CreateFromFile('image.png'); // Конвертируем изображение в универсальный тип TValue из RTTI Value := TValue.From<TBitmap>(Bitmap); end; -
Добрый день, Приложение с GUI нельзя запустить в фоновом режиме. Так как операционная система может его выгрузить в любой момент времени (даже при установленных флагах в манифесте не делать этого). Для того, чтобы сделать фоновую работу. Используются Андроид Сервисы. Они как раз могут работать в фоновом режиме. Но они пока не поддерживаются в FMX. Еще есть механизм AlarmManager. Его можно использовать. Суть которого заключается в отложенном выполнении какой-нибудь задачи. Например, вы хотите сделать приложение проверки новых новостей на каком-то ресурсе. Вы можете сделать проверку наличия новых новостей каждый интервал времени. Например, каждые 5 минут, вы проверяете новости. AlarmManager позволяет поставить в очередь ваше задание с указанием либо интервала времени (через который должна вызваться ваша задача) или конкретного времени. При этом не важно, запущено ваше приложение или нет. Вызов происходит не зависимо от этого.
-
На сколько я понял, вы хотите сделать слайдер. Два года назад я писал две статьи о двух способах создания такого слайдера. Слайдер изображений своими руками при помощи FMX 2.0. Часть 1 Слайдер изображений своими руками при помощи FMX 2.0. Часть 2 Более того, раньше был рабочий пример, наглядно демонстрирующий это. Посмотрите, эти статьи, я думаю они помогут вам. Пример реализации слайдера MetropolisUIFlipViewDemo.zip Этот пример убрали из поставки среды начиная с XE6
-
Тут есть варианты определения пересечения 1. Проверить, что хотя бы одна из вершин контрола находится в области расположения другого. Для этого нужно: Получить абсолютные координаты вершин контрола И проверить попадание каждой вершины в область другого контрола TControl.PointInObject. Если хотя бы одна вершина будет в области другого, значит контролы пересекаются. 2. Воспользоваться известными алгоритмами поиска пересечения двух выпуклых многоугольников Например: "Пересечение: Два выпуклых многоугольника"
-
1 Заголовок А) выдвигаемая кривая линия. Я бы взял статическую картинку с кривой или векуторную кривую в TPath. Положил бы кривую TPath в контейнер. Например в TLayout. Для контейнера задал бы отрезание чилдов ClipChildren = True. B задал бы анимацию ширины контейнера. Что в итоге, на каждом шаге анимации у меня просто растет область отрисовки изображения/пути. При постоянном размере пути/изображения. Б) Появляемый текст Я бы применил бы тот же подход, что и в пункте А. В) Уход Делается так же, как и пункт А 2 Предупреждение А) Появление. Анимация изменения размера картинки/пути и позиции Анимация поворот картинки после разворачивания круга. Б) Работа Мигание через прозрачность надписи В) Скрытие Аналогично пункту А, но в обратном порядке
-
На всякий случай, продублирую: function MakeScreenshotOfForm(const AForm: TForm): TBitmap; begin Assert(AForm <> nil); Result := TBitmap.Create(AForm.Width, AForm.Height); AForm.PaintTo(Result.Canvas); end; procedure TForm4.Button1Click(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := MakeScreenshotOfForm(Self); try Image1.Bitmap.Assign(Bitmap); finally Bitmap.Free; end; end; Еще есть статья [XE7] Создание PrintScreen'ов полных и части экранов, в ней рассказывается, как сделать скриншоты в том числе и чужих окон, правда только под Windows
-
Сделал отдельную ветку на форуме TGridPanelLayout Пользователь не может создавать подфорумы. На будущее, если нету подходящей ветки форума пишите в более общую. Я в дальнейшем распределю темы. P.S. Согласно правилам, нужно прикрепить рабочий проект, на котором воспроизводится описанное вами исключение.
-
TScrollBar Как узнать ширину ползунка у TScrollBar?
Brovin Yaroslav ответил antarey вопрос в TScrollBox
Использовать, когда стиль для TScrollBar загружен. type TOpenScrollBar = class(TScrollBar); TOpenCustomTrack = class(TCustomTrack); function GetThumbWidth(const AScrollBar: TScrollBar): Single; var Track: TCustomTrack; Thumb: TThumb; ThumbWidth: Single; begin ThumbWidth := 0; Track := TOpenScrollBar(AScrollBar).Track; if Track <> nil then begin Thumb := TOpenCustomTrack(Track).Thumb; if Thumb <> nil then ThumbWidth := Thumb.Width; end; Result := ThumbWidth; end; procedure TForm4.Button1Click(Sender: TObject); begin ShowMessage(GetThumbWidth(ScrollBar1).ToString); end; -
Добрый день, Не пишите руками обертки, это долгий труд. В XE7 появилась специальная утилита для генерации всех оберток по jar файлу. Утилита генерации pas файлов для AndroidAPI из jar файлов Я думаю она избавит вас от необходимости думать о том, как транслировать java классы.
- 3 ответа
-
- java
- использование
-
(и ещё 1 )
C тегом:
-
Исходя из ваших предпочтений в какую область у вас должен быть вписан текст. Если у вас нету ограничения, то поставьте этот размер большим. Я для примера взял 1000 пикселей для высоты.
-
Нужно использовать TTextLayout для этого. Это будет быстрее, чем создавать TText, TLabel, которые по сути в конечном итоге используют тот же TTextLayout. В приведенном ниже коде, нужно правильно задать требуемые настройки текста: шрифт, переносы, выравнивание и тд. uses FMX.TextLayout; {$R *.fmx} procedure TForm3.Button1Click(Sender: TObject); var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(Width, 1000); TextLayout.WordWrap := WordWrap; TextLayout.Font := Font; TextLayout.HorizontalAlign := TextAlign; TextLayout.VerticalAlign := VertTextAlign; finally TextLayout.EndUpdate; end; // TextLayout.TextRect; <- Здесь будет размер текста finally TextLayout.Free; end; end; Когда получите размер текста в TEdit, не забудьте, что нужно учесть размер рамки эдита и возможное наличие кнопок, что корректно задать ширину. Обновлять ширину надо в события OnChange и OnChangeTrtacking, в зависимости от требуемой вам ситуации.
-
Добрый вечер, В обработчике события OnPaint не нужно вызывать BeginUpdate/EndUpdate. Вместо Repaint у формы есть Invalidate.
- 20 ответов
-
Ответ от Estra: