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

Лидеры

  1. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      6

    • Постов

      2 124


  2. rareMax

    rareMax

    Пользователи


    • Баллы

      5

    • Постов

      553


  3. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      2

    • Постов

      2 517


  4. Евгений Корепов

    Евгений Корепов

    Пользователи


    • Баллы

      2

    • Постов

      738


Популярный контент

Показан контент с высокой репутацией 27.07.2016 во всех областях

  1. program Project12; {$APPTYPE CONSOLE} {$R *.res} uses System.TimeSpan, System.SysUtils; begin Writeln(TTimeSpan.Create(0, 2, 30, 0, 0).TotalMinutes.ToString); Readln; end.
    4 балла
  2. Там строгий знак неравенства. Так что вычитать единицу не нужно.
    2 балла
  3. DeviceInfo - модуль для получения информации о девайсе Android || Windows || IOS || MAC OS Intel планшет для Андроида нужно включить разрешения (permission) Ссылка на GitHub
    1 балл
  4. Оказывается есть возможность вызывать javascript: WebBrowser1.EvaluateJavaScript('alert("OK")');
    1 балл
  5. Равиль Зарипов (ZuBy)

    Очищение памяти

    то что создается, должно быть убито. вот и всё
    1 балл
  6. 1. Выбираю android-19 — чтобы сохранить поддержку Android 4.4.2 и выше 2. Самые новые инструменты построения проектов — в моем случае 24.0.1. 3. Без понятия, на что это влияет — выбираю тоже android-19. 4. Не знаю. 5. Зачем, догадываюсь — Embarcadero поддерживает корректную работу приложений, начиная с версии API 14. Я компилирую проекты под API 19. Как управлять этой строчкой в манифесте? — не знаю 6. ... но ее содержимое существенным образом влияет на фильтры Google.
    1 балл
  7. Старая неизлечимая до сих пор проблема. В одном из проектов мне помог такой код: void __fastcall TMainForm::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }
    1 балл
  8. Операция Result := lApiResponse.ResultObject; копирует в Result ссылку на тот же самый объект. И логично что при попытке освободить его функция вернет пустоту, так как вы освобождаете и результат функции. Как вариант можно использовать функцию Assign - копирование объекта в Result, тогда освобождение lApiResponse.Free не затронет результат возвращаемый функцией.
    1 балл
  9. И все же, это подходящая ветка для обсуждения настроек SDK manager. 1. Какой SDK API-Level выбирать? 2. Какую версию build-tools использовать? 3. Какую версию NDK API выбирать? 4. Для чего в Delphi параметры C++ Builder NDK? 5. Как изменять и зачем в манифесте строчка? <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> 6. На что влияют все эти настройки и с точки зрения функционала приложений на различных версиях Android и, важно, при публикации в Google Play? Кто разобрался в этом? Или давайте вместе разберемся, кидайте ссылки. Обсудим по порядку?
    1 балл
  10. Итак, год спустя описываю решение проблемы. Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий. 1. Ошибка существует в файле FMX.TextLayout.GPU, поэтому копируем его в проект. 2. Убираем мусор при отрисовке кропнутого символа. Ищем в файле следующий фрагмент: ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; и заменяем его на if not R.IsEmpty then begin // Disable draw empty rect ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; end; Пояснение: при расчете области отрисовки R символа, мы можем получить "отрицательный размер", где Bottom будет меньше чем Top. Соответсвенно такой же неправильной становиться область источника SrcR и на экран вылазит мусор. 3. От мусора избавились, но если присмотреться к нижней границе текста, то можно увидеть, что отрезка не ровная, одни символы отрезаны больше, другие меньше. Для этого нужно исправить алгоритм расчета области отсечения. Для этого ищем комментарий //Checking for lines lower than bottom border - с него начинается ветка, в которую нужно внести изменения. Чуть далее ищем код Rec := AddOrGetChar(nil, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - Rec.Glyph.VerticalAdvance * FScaleFactor; и меняем его на Rec := AddOrGetChar(LayoutCanvas, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - ((Rec.SrcRect.Height + Rec.Glyph.Origin.Y) * FScaleFactor); Здесь пояснения дать сложнее, скажу только, что разработчики проигнорировали тот момент, что символы имеют разные размеры (например . и Ж) и считают отсечение не по размеру глифа символа а по экранному размеру символа, т.е. он будет одинаковый для всей строки, что неправильно, так как в дальнейшем данное отсечение применяется к глифу символа. P.S. А куда переехал CodeCentral, не нашел его в Берлине?
    1 балл
  11. ReportMemoryLeaksOnShutdown := true;
    1 балл
  12. Решил проблему следующим образом: ListViewItem создаю в массиве ListViewItemArray : TArray<TListViewItem>, вот таки образом ListViewItemArray[I]:=AListView.Items.Add; В итоге имею массив для доступа к ListViewItem, вне зависимости от текущего состояния фильтрации в ListView. Костыль конечно, но другого способа не нашел. Да и вроде по ресурсам и памяти нагрузки никакой, добавился только массив ссылок на объекты.
    1 балл
  13. Добрый день, уважаемое сообщество. Возник такой вопрос, по нажатию на маркер на карте нужно показывать свой InfoWindow. как тут. Может быть кто-то такое уже делал, прошу помочь кодом. Попытался сделать как здесь. Там на Java, но я переписал на Delphi. Компилится, но в рантайме выдает Segmentation class (11), AV и проч. может кто-нибудь может подсказать в чем проблема. Делаю так ... TMyAndroidInfoWindowAdapter = class (TJavaLocal, JGoogleMap_InfoWindowAdapter) private FMapControl: TAlexAndroidMapView; public function getInfoContents(P1: JMarker): JView; cdecl; function getInfoWindow(P1: JMarker): JView; cdecl; end; ... function TMyAndroidInfoWindowAdapter.getInfoContents(P1: JMarker):JView; var LinearLayout:JLinearLayout; snippet, title:JTextView; begin LinearLayout:=TJLinearLayout.JavaClass.init(TAndroidHelper.Activity); title:=TJTextView.JavaClass.init(TAndroidHelper.Activity); title.setTextColor(TAlphaColorRec.Brown); title.setText(JCharSequence(P1.getTitle)); snippet:=TJTextView.JavaClass.init(TAndroidHelper.Activity); snippet.setTextColor(TAlphaColorRec.Coral); snippet.setText(JCharSequence(P1.getSnippet)); LinearLayout.addView(title); LinearLayout.addView(snippet); result:=LinearLayout; end; function TMyAndroidInfoWindowAdapter.getInfoWindow(P1: JMarker):JView; begin Result:=nil; end; При создании экземпляра JMapView делаю так ... if not Assigned(FWindowsAdapter) then FWindowsAdapter:=TAlexAndroidInfoWindowAdapter.Create; FJMapView.getMap.setInfoWindowAdapter(FWindowsAdapter); ... FWindowsAdapter это поле в моем классе TMyAndroidMapView = class(TDPFANDBaseControl) protected ... FWindowsAdapter:TAlexAndroidInfoWindowAdapter; MapView не использую реализовал свой контрол на базе dpf android native components Романа Янковского. Ошибки валятся после выполнения этого метода function TMyAndroidInfoWindowAdapter.getInfoWindow(P1: JMarker):JView; begin Result:=nil; <------ выполнился и сразу Class Segmentation Fault (11) end; Опишу зачем вообще я это делаю. Мне в InfoWindow по клику на маркер на карте нужно всего навсего отобразить текст в несколько строк (свойство маркера Snippet), но так как перенос строк почему-то не работает взялся за реализацию WindowInfoAdapter. Может быть все это проще можно сделать. Заранее благодарю за помощь.
    1 балл
  14. Странно, что у компонента TPopupBox нету публичного метода для этого. Добавим. Однако, пока открыть можно только так: type TOpenPopupBox = class(TPopupBox); procedure TForm1.Button1Click(Sender: TObject); begin TOpenPopupBox(PopupBox1).DoPopup; end;
    1 балл
  15. Добрый день, Прикрепляю проект, где все загружается корректно (iOS Simulator). WebBrowserLoadLocalFile.zip Внимательно проверьте место назначения развертывания файла и факт того, что он задеплоился: Обязательно слэш в конце: "Startup\Documents\" Строка с файлом в Deployment Manager не должна быть серой! Загрузка идет таким способом: uses System.IOUtils; procedure TForm15.FormCreate(Sender: TObject); begin WebBrowser1.URL := 'file:/' + TPath.Combine(TPath.GetDocumentsPath, 'DemoPage.html'); end; P.S. Сделано все по руководству Включение своих файлов в приложение
    1 балл
  16. Чтобы в рантайме (runtime) работал перенос, нужно просто сбросить настройку: ListBoxItem.StyledSettings := ListBoxItem.StyledSettings - [TStyledSetting.ssOther]; В дизайн тайме, при установке свойства WordWrap y TListBoxItem, автоматически сбрасывается опция TStyledSettings.ssOther у StyledSettings, которая означает, что настройки переноса нужно брать из контрола, а не из стиля. В рантайме - нет. Свойство TListBoxItem.StyledSettings отвечает за то, какие настройки брать из стиля, а какие из самого контрола. Так отсутствие значения ssOther говорит о том, что значение варианта переноса будет браться из контрола, а не из стиля. Обратите внимание еще на тему: Почему не изменяется Font.Style и Font.Size?
    1 балл
  17. Label1.StyledSettings := Label1.StyledSettings - [TStyledSetting.Size]; В FireMonkey все, что отвечает за визуальную часть (отображение контрола) обычно выносится в стиль. Однако, не всегда удобно создавать новый стиль, только, когда нужно, например, поменять размер шрифта в TLabel. Поэтому, чтобы позволить пользователям удобно менять такие настройки, как шрифт. Шрифт выделен в отдельное свойство TLabel.Font. При выделении шрифта отдельным свойством, нужно понимать, что при таком подходе контрол "не знает", откуда ему брать шрифт: то ли из свойства, то ли из стиля. Поэтому, чтобы контрол знал, откуда ему брать шрифт для отображения: из стиля или из свойства Font, введено свойство TLabel.StyledSetting. Которое говорит контролу, какие характеристики шрифта нужно брать из стиля, а какие можно взять из свойства TLabel.Font. По умолчанию, StyledSettings настроены так, что все берется из стиля. В вашем случае, нужно сбросить галку напротив значения ssSize и ssFont. Подробная информация есть на Embarcadero Doc Wiki: http://docwiki.embarcadero.com/RADStudio/XE5/en/Setting_Text_Parameters_in_FireMonkey
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...