Лидеры
Популярный контент
Показан контент с высокой репутацией 27.07.2016 во всех областях
-
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 балла
-
3 строчки рушат апликацию на старте
Labian и ещё один отреагировал Brovin Yaroslav за вопрос
Там строгий знак неравенства. Так что вычитать единицу не нужно.2 балла -
DeviceInfo - модуль для получения информации о девайсе
Brovin Yaroslav отреагировал Равиль Зарипов (ZuBy) за вопрос
DeviceInfo - модуль для получения информации о девайсе Android || Windows || IOS || MAC OS Intel планшет для Андроида нужно включить разрешения (permission) Ссылка на GitHub1 балл -
[Android] WebBrowser и Javascript
Евгений Корепов отреагировал Rusland за вопрос
Оказывается есть возможность вызывать javascript: WebBrowser1.EvaluateJavaScript('alert("OK")');1 балл -
Очищение памяти
kami отреагировал Равиль Зарипов (ZuBy) за вопрос
то что создается, должно быть убито. вот и всё1 балл -
1. Выбираю android-19 — чтобы сохранить поддержку Android 4.4.2 и выше 2. Самые новые инструменты построения проектов — в моем случае 24.0.1. 3. Без понятия, на что это влияет — выбираю тоже android-19. 4. Не знаю. 5. Зачем, догадываюсь — Embarcadero поддерживает корректную работу приложений, начиная с версии API 14. Я компилирую проекты под API 19. Как управлять этой строчкой в манифесте? — не знаю 6. ... но ее содержимое существенным образом влияет на фильтры Google.1 балл
-
Старая неизлечимая до сих пор проблема. В одном из проектов мне помог такой код: void __fastcall TMainForm::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }1 балл
-
Передача объекта в результат функции
Равиль Зарипов (ZuBy) отреагировал Евгений Корепов за тема
Операция Result := lApiResponse.ResultObject; копирует в Result ссылку на тот же самый объект. И логично что при попытке освободить его функция вернет пустоту, так как вы освобождаете и результат функции. Как вариант можно использовать функцию Assign - копирование объекта в Result, тогда освобождение lApiResponse.Free не затронет результат возвращаемый функцией.1 балл -
И все же, это подходящая ветка для обсуждения настроек 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 балл
-
Некорректный вывод текста под Андроид.
Равиль Зарипов (ZuBy) отреагировал Кривяков Виталий за вопрос
Итак, год спустя описываю решение проблемы. Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий. 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 балл -
Слежка за утечкой памяти.
Равиль Зарипов (ZuBy) отреагировал rareMax за вопрос
ReportMemoryLeaksOnShutdown := true;1 балл -
Доступ к отфильтрованным элементам ListView
Равиль Зарипов (ZuBy) отреагировал Евгений Корепов за вопрос
Решил проблему следующим образом: ListViewItem создаю в массиве ListViewItemArray : TArray<TListViewItem>, вот таки образом ListViewItemArray[I]:=AListView.Items.Add; В итоге имею массив для доступа к ListViewItem, вне зависимости от текущего состояния фильтрации в ListView. Костыль конечно, но другого способа не нашел. Да и вроде по ресурсам и памяти нагрузки никакой, добавился только массив ссылок на объекты.1 балл -
Добрый день, уважаемое сообщество. Возник такой вопрос, по нажатию на маркер на карте нужно показывать свой 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 балл
-
[TPopupBox] Как программно открыть PopupBox?
Евгений Корепов отреагировал Brovin Yaroslav за вопрос
Странно, что у компонента TPopupBox нету публичного метода для этого. Добавим. Однако, пока открыть можно только так: type TOpenPopupBox = class(TPopupBox); procedure TForm1.Button1Click(Sender: TObject); begin TOpenPopupBox(PopupBox1).DoPopup; end;1 балл -
[TWebBrowser] [iOS] Открытие прикрепленной html страницы в TWebBrowser
Pax Beach отреагировал Brovin Yaroslav за вопрос
Добрый день, Прикрепляю проект, где все загружается корректно (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 балл -
Чтобы в рантайме (runtime) работал перенос, нужно просто сбросить настройку: ListBoxItem.StyledSettings := ListBoxItem.StyledSettings - [TStyledSetting.ssOther]; В дизайн тайме, при установке свойства WordWrap y TListBoxItem, автоматически сбрасывается опция TStyledSettings.ssOther у StyledSettings, которая означает, что настройки переноса нужно брать из контрола, а не из стиля. В рантайме - нет. Свойство TListBoxItem.StyledSettings отвечает за то, какие настройки брать из стиля, а какие из самого контрола. Так отсутствие значения ssOther говорит о том, что значение варианта переноса будет браться из контрола, а не из стиля. Обратите внимание еще на тему: Почему не изменяется Font.Style и Font.Size?1 балл
-
Почему не изменяется Font.Style и Font.Size?
Pax Beach отреагировал Brovin Yaroslav за вопрос
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_FireMonkey1 балл