Перейти к содержанию
Fire Monkey от А до Я

Brovin Yaroslav

Администраторы
  • Постов

    2 124
  • Зарегистрирован

  • Посещение

  • Победитель дней

    390

Весь контент Brovin Yaroslav

  1. Добрый день, Ошибку завел в трекере. Временный 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; Добавить исправленный файл в ваш проект.
  2. Как правильно написал 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; И добавить этот файл в ваш проект
  3. Memo не дает такой возможности. Внутри он действительно знает всю информацию обо всех линиях. Но этот код открыт только для наследников.
  4. 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;
  5. var CursorPos: TPointF; begin CursorPos := Edit1.Caret.Flasher.Pos; end; Это позиция каретки в локальных координатах TEdit. Если нужно в коринатах формы, то читаем О видах координат в FireMonkey и конвертации между ними
  6. А как вы полагаете Windows 8 перелистывает изображения? Ну и это не говорит о том, что это таймер? Или я не очень понял, о чем вы.
  7. Добрый день, Приложение с GUI нельзя запустить в фоновом режиме. Так как операционная система может его выгрузить в любой момент времени (даже при установленных флагах в манифесте не делать этого). Для того, чтобы сделать фоновую работу. Используются Андроид Сервисы. Они как раз могут работать в фоновом режиме. Но они пока не поддерживаются в FMX. Еще есть механизм AlarmManager. Его можно использовать. Суть которого заключается в отложенном выполнении какой-нибудь задачи. Например, вы хотите сделать приложение проверки новых новостей на каком-то ресурсе. Вы можете сделать проверку наличия новых новостей каждый интервал времени. Например, каждые 5 минут, вы проверяете новости. AlarmManager позволяет поставить в очередь ваше задание с указанием либо интервала времени (через который должна вызваться ваша задача) или конкретного времени. При этом не важно, запущено ваше приложение или нет. Вызов происходит не зависимо от этого.
  8. На сколько я понял, вы хотите сделать слайдер. Два года назад я писал две статьи о двух способах создания такого слайдера. Слайдер изображений своими руками при помощи FMX 2.0. Часть 1 Слайдер изображений своими руками при помощи FMX 2.0. Часть 2 Более того, раньше был рабочий пример, наглядно демонстрирующий это. Посмотрите, эти статьи, я думаю они помогут вам. Пример реализации слайдера MetropolisUIFlipViewDemo.zip Этот пример убрали из поставки среды начиная с XE6
  9. Тут есть варианты определения пересечения 1. Проверить, что хотя бы одна из вершин контрола находится в области расположения другого. Для этого нужно: Получить абсолютные координаты вершин контрола И проверить попадание каждой вершины в область другого контрола TControl.PointInObject. Если хотя бы одна вершина будет в области другого, значит контролы пересекаются. 2. Воспользоваться известными алгоритмами поиска пересечения двух выпуклых многоугольников Например: "Пересечение: Два выпуклых многоугольника"
  10. 1 Заголовок А) выдвигаемая кривая линия. Я бы взял статическую картинку с кривой или векуторную кривую в TPath. Положил бы кривую TPath в контейнер. Например в TLayout. Для контейнера задал бы отрезание чилдов ClipChildren = True. B задал бы анимацию ширины контейнера. Что в итоге, на каждом шаге анимации у меня просто растет область отрисовки изображения/пути. При постоянном размере пути/изображения. Б) Появляемый текст Я бы применил бы тот же подход, что и в пункте А. В) Уход Делается так же, как и пункт А 2 Предупреждение А) Появление. Анимация изменения размера картинки/пути и позиции Анимация поворот картинки после разворачивания круга. Б) Работа Мигание через прозрачность надписи В) Скрытие Аналогично пункту А, но в обратном порядке
  11. Динамическую нельзя. Но не обязательно смотреть на черный экран. Так как начиная с XE7 FireMonkey поддерживает установку заставки, вместо черного экрана Для пользователей предыдущих версий есть другое решение
  12. На всякий случай, продублирую: 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
  13. Сделал отдельную ветку на форуме TGridPanelLayout Пользователь не может создавать подфорумы. На будущее, если нету подходящей ветки форума пишите в более общую. Я в дальнейшем распределю темы. P.S. Согласно правилам, нужно прикрепить рабочий проект, на котором воспроизводится описанное вами исключение.
  14. Использовать, когда стиль для 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;
  15. Добрый день, Не пишите руками обертки, это долгий труд. В XE7 появилась специальная утилита для генерации всех оберток по jar файлу. Утилита генерации pas файлов для AndroidAPI из jar файлов Я думаю она избавит вас от необходимости думать о том, как транслировать java классы.
  16. Надо смотреть вкладку Code. Найдите требуемую версию студии и нажмите наверху кнопку DownloadSnapshot.
  17. Исходя из ваших предпочтений в какую область у вас должен быть вписан текст. Если у вас нету ограничения, то поставьте этот размер большим. Я для примера взял 1000 пикселей для высоты.
  18. Убедительная просьба к авторам вопросов, если вы нашли ответ, то не поленитесь дать ответ, чтобы ваши знания могли пригодиться и помочь другим. Спасибо
  19. Нужно использовать 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, в зависимости от требуемой вам ситуации.
  20. Добрый день, Только создание своего собственного компонента аниматора, который будет добавлять точки по одной в TPath. На подобии TBitmapListAnimation или TColorKeyAnimation
  21. Добрый вечер, В обработчике события OnPaint не нужно вызывать BeginUpdate/EndUpdate. Вместо Repaint у формы есть Invalidate.
  22. Добрый вечер, Ответ на ваш вопрос есть тут: Включение своих файлов в приложение
  23. Когда вы выполняете отрисовку в событии OnPaint не надо вызывать BeginScene/EncScene. Это делает за вас сама форма. Так как это создает новую сцену и по сути у вас не будет рисоваться форма.
  24. На всех платформах OnKeyDown и OnKeyUp получает в конечном итоге виндовые коды клавиш. За конвертацию родных клавиш платформы в общие (видновы) отвечает модуль FMX.KeyMapping.pas
×
×
  • Создать...