Таблица лидеров


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

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

  1. 6 баллов
    Кнопка "Добавить в избранное" и соответственно раздел Избранное в профиле очень помогли бы в работе с форумом. Добавлять в избранное хочется отдельные посты. Потому как поиск работает плохо и искать когда то попавшееся на глаза нужное решение найти проблематично.А так бы ткнул на Добавить в избранное, по мере надобности зашел в свое Избранное, увидел разбитое по разделам форума списки избранного и нашел что нужно. Заранее благодарю!
  2. 5 баллов
    Если вы понаблюдаете дальше, то обнаружите что выполняется гораздо больше раз. Попробуйте к примеру повернуть устройство горизонтально, потом опять вертикально - еще пара выполнений. OnUpdateObjects и OnUpdatingObjects выполняется постоянно - при изменении размеров, скрытии и повторном показе, переключении приложений и т.д. В справке так и написано "Occurs immediately after the list view component is updated." Так что надо придерживаться двух правил : 1. При добавлении/изменении TListViewItem отключайте обработку вышеуказанных процедур. Setting.Flags.ListViewUpdating:=True; // Глобальная переменная или ListView.OnUpdatingObjects:=nil; AItem:=ListView.Items.Add; AItem.Data['Type']:='MySuperPuperItem'; AItem.Data['Name']:=AName; AItem.Data['Value']:=AValue; Setting.Flags.ListViewUpdating:=False; // Глобальная переменная или ListView.OnUpdatingObjects:=ListViewUpdatingObjects; AItem.Adapter.ResetView(AItem); // принудительно вызываем ListViewUpdatingObjects ... procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if Setting.Flags.ListViewUpdating then // Если используете глобальную переменную Exit; ... 2. Внутри OnUpdateObjects и OnUpdatingObjects при добавлении TListItemText и прочих элементов, проверяйте их существование, возможно они уже были добавлены вашим кодом ранее.
  3. 4 балла
    Долго мучался отсутствием штатного средства красивого вывода JSON в текст, все что есть в комплекте, в REST к примеру, выводит убогую, не читаемую кашу. Плюнул и на написал свою функцию, на базе REST TSON.Format. function JsonPrettyPrint(AJsonValue : TJsonValue; AIndent : string = ' ') : string; var SourceContent: string; AChar: char; EOL: string; LeftIndent: string; isEOL: boolean; isInString: boolean; isInArray: boolean; isEscape: boolean; begin Result:=''; EOL:=#13#10; AIndent:= ' '; LeftIndent:=''; isEOL:=true; isInString:=false; isInArray:=false; isEscape:=false; SourceContent := AJsonValue.ToString; //This will basically display all strings as Delphi strings. Technically we should show "Json encoded" strings here. for AChar in SourceContent do begin case AChar of '{' : if not isInString and not isInArray then begin Result := Result + AChar + EOL; LeftIndent := LeftIndent + AIndent; Result := Result + LeftIndent; isEOL := true; end; ',' : if not isInString and (AChar = ',') then begin isEOL := false; if isInArray then Result := Result + AChar + ' ' else Result := Result + AChar + EOL + LeftIndent; end; '}' : if not isInString then begin Delete(LeftIndent, 1, Length(AIndent)); if not isEOL then Result := Result + EOL; Result := Result + LeftIndent + AChar; end; ':' : if not isInString and (AChar = ':') then Result := Result + AChar + ' '; else begin isEOL := false; Result := Result + AChar; end; end; isEscape := (AChar = '\') and not isEscape; if not isEscape and (AChar = '"') then isInString := not isInString; if not isEscape and (AChar = '[') then isInArray:=True; if not isEscape and (AChar = ']') then isInArray:=False; end; end; Результат налицо: { "Rig": { "Name": "node07", "Account": "3DQ9fRMVfxHaT7noy7molmuhlCI3RQkxt2y8BB", "PowerCost": [4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43, 4.43] }, "ExcavatorInstance": { "Host": "192.168.0.156", "Port": 38080, "APIToken": "asevsdrbdrtnetyjer34yb435t", "ConnectionType": "HTTP" }, "Devices": { "DeviceType": "", "UseDevices": [0, 1, 2, 3, 4] }, "Algorithms": { "cryptonight": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [32, "M=2", 876], "Speed": 1506138068.81243, "Power": 851 }, "lbry": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [95, 120, -1000], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "pascal": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "decred": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "neoscrypt": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "daggerhashimoto": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "daggerhashimoto_decred": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "daggerhashimoto_sia": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "lyra2rev2": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [95, 120, -1000], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "blake2s": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "equihash": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": ["2", "M=1", "676556"], "Speed": 1506138068.81243, "Power": 851 }, "daggerhashimoto_pascal": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "keccak": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 }, "sia": { "Enable": true, "Devices_TDP_CoreDelta_MemoryDelta": [108, 150, 500], "WorkerPerDevice": 1, "WorkerParameters": [], "Speed": 1506138068.81243, "Power": 851 } } } Конкретно в текущем случае, массивы мне нужны были в одну строку. Кому понадобиться иное - закомментируйте последние 4 строки.
  4. 3 балла
    krapotkin

    fgActivityDialog

    В любом случае, вам придется вносить изменения в программу, т.к. 10.2 имеет новый подход к потокам в приложении. Вы можете либо изменить свой код, либо код fgActivityDialog. В вашем случае можно попробовать так: fgActivityDialog1.Message: = 'Проверка подключения к Интернету.'; fgActivityDialog1.Show; TTask.Run(procedure var result :string; begin try CM.DSRestConnection1.Host: = 'my.server.com'; // Пример CM.DSRestConnection1.TestConnection (); Result: = 'S'; except Result: = 'N'; End; tthread.synchronize(NIL, procedure begin F_Result := result; fgActivityDialog1.hide; end); end); F_Result - это поле формы
  5. 3 балла
    kami

    Разница в вызовах Synchronize

    Разница есть. И она не только в вызове Synchronize, но и Queue. Указание потока в качестве источника метода синхронизации позволяет вам впоследствии сделать TThread.RemoveQueuedEvents(myThread) перед его удалением. Вызов RemoveQueuedEvents необходим, если в синхронизируемых методах может идти обращение к полям и методам уничтожаемого потока. Потому что с удалением потока то, что подлежало синхронизации, никуда не пропадет, а раз поток уже не существует - у вас вылезет AV на ровном месте. Или же ваш код испортит чью-то память, что еще труднее отловить.
  6. 2 балла
    Механизм, который позволяет использовать иконку символьного шрифта вместо картинки на кнопках. Уж очень мне не нравится стандартный механизм добавления картинки на кнопку, поэтому, пару лет назад, начал искать альтернативу и остановился на символьных шрифтах (таких как FontAwesome). Вот что из этого получилось: IconicFontGlyph.zip Под Windows работает без проблем - на других системах не пробовал. Как это работает Добавляем в проект модуль UIExt.IconicFont.pas Добавляем в проект модули описания шрифтов, которые будут использоваться (см. ниже) Описываем символ, который будет использоваться в качестве иконки (см. ниже) В обработчике события OnApplyStyleLookup кнопки пишем одну строчку - TIconicFont.ApplyButtonStyle(TCustomButton(Sender)); Модули описания шрифтов UIExt.IconicFont.FA.pas - Font Awesome UIExt.IconicFont.IM.pas - IcoMoon UIExt.IconicFont.IML.pas - IcoMoon Lindua UIExt.IconicFont.IMLN.pas - IcoMoon Linear UIExt.IconicFont.MDI.pas - Material Design Icons UIExt.IconicFont.WHHG.pas - WebHostingHub Glyphs Описание символа Для описания символа используется свойство StyleName (не знаю как остальные - лично я его нигде не использую). Само описание - это строка в определённом формате: [Короткое имя шрифта];[код символа];[размер шрифта];[цвет] 2 первых поля - обязательны. Короткое имя шрифта можно увидеть в его модуле описания (TIconicFont.Short) Примеры можно увидеть на скриншотах выше (текст над кнопками). Ну и напоследок - небольшая демка IconicFontDemo.zip
  7. 2 балла
    В модуле FMX.Helpers.Win есть две чудные функции: function GetDCScale(const DC: HDC): Single; function GetWndScale(const Wnd: HWnd): Single; причём вторая из них учитывает особенности, начиная с восьмерки.
  8. 2 балла
    Приложение для наглядного обучения работы некоторых механизмов автомобиля и автобуса. Работает в OS Windows. Есть возможность записи процесса в формате AVI. Можно изменять прозрачность и посмотреть что внутри. СпасиБО EMBARCADERO! Автор: Олег Киреев - ведущий инженер-конструктор. kireevoleg@gmail.by тел. +375 29 676 13 84. Республика Беларусь г.Минск. 3D Работа механизмов.rar
  9. 2 балла
    x11

    XML

    здесь есть примеры http://docwiki.embarcadero.com/CodeExamples/Berlin/en/Code_Examples_by_Functionality#Xml.XMLDoc
  10. 2 балла
    var Reg:TRegistry; begin Reg:=TRegistry.Create; reg.RootKey:=HKEY_CURRENT_USER; reg.openKey('SOFTWARE\Microsoft\Windows\DWM',true); value:=reg.ReadInteger('ColorizationColor'); Reg.CloseKey; Reg.Free; TAlphaColorRec(Value).R:=Round(TAlphaColorRec(Value).R /100 *35); TAlphaColorRec(Value).G:=Round(TAlphaColorRec(Value).G /100 *35); TAlphaColorRec(Value).B:=Round(TAlphaColorRec(Value).B /100 *35); Color:=Value; Я делаю так!
  11. 2 балла
    Евгений Корепов

    fgActivityDialog

    Подумал и сделал более изящно - изменил метод Show. procedure TForm1.Button1Click(Sender: TObject); begin fgActivityDialog.Message := 'Teste'; fgActivityDialog.Show(3000); end; procedure TForm1.Button1Click(Sender: TObject); begin fgActivityDialog.Message := 'Teste'; fgActivityDialog.Cancellable:=True; fgActivityDialog.Show; end; Вот код :
  12. 2 балла
    Евгений Корепов

    fgActivityDialog

    В Токио изменена логика работы приложения на Андроид - пользовательский интерфейс выполняется в основном потоке приложения, возможно проблема из за этого. Вот похожая тема
  13. 2 балла
    krapotkin

    [Android]как бороться с ShowMessage?

    реально, столкнувшись с проблемами, я перешел к использованию собственных окон. просто пустая форма, в которой ректангл и все остальное. тогда не надо ждать когда пофиксят (никогда)
  14. 2 балла
    x11

    FMXComponents

    Может, кому пригодится, здесь набор open-sourced компонент для FMX https://github.com/zhaoyipeng/FMXComponents
  15. 2 балла
    Alex7wrt

    Не получается запустить эмулятор

    Чтобы не было красного крестика, нужно не только создать эмулятор в AWD менеджере, но и запустить его там же. В итоге на экране увидите окно, в котором запускается интерфейс Android. Когда он запустится, и появится рабочий стол Android, можно запускать установку приложения на эмулятор. Только учтите, что на относительно слабых системах эмулятор может запускаться довольно долго. Ну и Вообще для проверки работоспособности (работает/ не работает) легче воспользоваться установкой на реальный девайс.
  16. 2 балла
    GASCHE

    Canvas,

    Application.ProcessMessages; Это костыль для решения вашей проблемы, я бы вместо panel.Repaint; очищал так panel.Canvas.Clear(TAlphaColorRec.White); Тогда Application.ProcessMessages не нужен.
  17. 2 балла
    krapotkin

    Разница между Push и Сервисом

    пуш работает на уровне системы и не требует никаких сервисов
  18. 2 балла
    я выкладывал рабочий пример для берлина, как и что создается
  19. 2 балла
    с чего бы мелочь. несколько (а не стандартные текст/детейл) элементов с разным оформлением и раскладкой, зависящих от данных, управление высотой итема, рисование самодельных элементов, иконок, реакция на клики
  20. 2 балла
    FeLDMARShaL

    Изменение стиля TfgActivityDialog №2

    После упорных попыток, не получилось подружить компонент с созданной темой, возможно ее ид как то не так получаю и ниже приведенный код возвращает что то не то themId := TAndroidHelper.Context.getResources.getIdentifier(StringToJString('styles_dialog'), StringToJString('layout'), TAndroidHelper.Context.getPackageName) Но реализовать нужно было пришлось пофиксить немного стандартные компоненты, и именно в части const UndefinedThemeID = -1; Теперь компоненты считаю что ThemeID=0 - это кастомная тема. После чего, вот такой код (и измненная стандартная тема приложения): if not Assigned(fg_my) then begin fg_my := TfgActivityDialog.Create(nil); fg_my.Theme := TfgDialogTheme.Custom; fg_my.ThemeID := 0; end; fg_my.Show; sleep(3000); fg_my.Hide; Приводят вот к такому результату (разумеется индикатор крутится как надо):
  21. 1 балл
    По-моему вообще некорректно. Внешне-то будет выглядеть как надо, а вот логики работы не будет вообще. Ведь стиль - это только описание того, как контрол должен выглядеть, а не как работать. Кстати, копию стиля легче получить так MainControl := FindStyleResource('ScreenFogStyle', True);
  22. 1 балл
    dnekrasov

    Вертикальное смещение юникодных шрифтов

    Ну почему же: var F: TFont; PD: TPathData; begin F := TFont.Create; try F.Family := 'Kozuka Gothic Pr6N B'; F.Size := 60; with TBitmap.Create do try Canvas.Font.Assign(F); PD := TPathData.Create; try if Canvas.TextToPath(PD, RectF(0, 0, 10000, F.Size), '字字字 AsD АыЩ', False, TTextAlign.Leading, TTextAlign.Leading) then begin PathLabel.Width := PD.GetBounds.Width; PathLabel.Data := PD; end; finally PD.Free; end; finally Free; end finally F.Free; end; end;
  23. 1 балл
    dnekrasov

    formatter options

    Tools->Options - Formatter->Delphi->Line breaks - General->Right margin
  24. 1 балл
    krapotkin

    [THTTPClient] Как скачать файл с System.Net.HttpClient?

    var resp:IHttpResponse; resp := h.get(...) там в resp все что нужно
  25. 1 балл
    x11

    XML

    я понял, нужно начинать отсюда http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_TXMLDocument
  26. 1 балл
    Помогло! Даже под XP теперь всё красиво. Собственно, проблему я сам на себя навлек, когда по чьему-то совету вставил в файл проекта GlobalUseGDIPlusClearType := True для повышения быстродействия. Причем, нельзя сказать, чтобы быстродействие после этого ощутимо повысилось. Наверняка этот параметр принимает False по умолчанию, но пусть на всякий случай присвоение останется. Спасибо!
  27. 1 балл
    krapotkin

    [THttpClient] Как работать с Cookie в HTTPClient?

    кстати
  28. 1 балл
    krapotkin

    [THttpClient] Как работать с Cookie в HTTPClient?

    http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Net.HttpClient.TCookieManager_Methods тут только один метод что-то делает с куками, так что думаю, он и подойдет
  29. 1 балл
    Евгений Корепов

    fgActivityDialog

    Тогда в вашем случае проще доработать сам компонент fgActivityDialog. Я добавил метод fgActivityDialog.ShowWithAutoClose(3000) : procedure TForm1.Button1Click(Sender: TObject); begin fgActivityDialog.Message := 'Teste'; fgActivityDialog.ShowWithAutoClose(3000); end; Вот измененный исходный код unit FGX.ProgressDialog : Добавлен метод procedure ShowWithAutoClose(AAutoCloseTimer : Integer); и TTimer Прошу прощение у Ярослава, за топорное вмешательство в его код :-)
  30. 1 балл
    Евгений Корепов

    fgActivityDialog

    В своем коде вы останавливаете работу приложения, не давая отрисовать Диалог. Попробуйте вот так: procedure TForm1.Button1Click(Sender: TObject); begin fgActivityDialog1.Message := 'Teste'; fgActivityDialog1.Show; Timer.Interval:=3000; Timer.Enabled:=True; end; procedure TForm1.TimerTimer(Sender: TObject); begin Timer.Enabled:=False; fgActivityDialog1.Hide; end;
  31. 1 балл
    krapotkin

    AutoSize работает иначе под Tokyo!

    control.controls[i]
  32. 1 балл
    Freezer_86

    WebBrowser + ComboBox = ошибка ?

    Это не очень относиться к теме но оставлю это здесь, вдруг кому пригодиться. В моей задаче нужно было еще отслеживать на какой странице находиться пользователь, а как оказалось свойство URL тоже работает некорректно. Пришлось "накостылять" следующее: В WebBrowser.Android.pas добавляем: function TAndroidWebBrowserService.originalUrl: string; begin if FJWebBrowser = nil then Result := FURL else Result := JStringToString(FJWebBrowser.getOriginalUrl); end; В WebBrowser.Win.pas добавляем: function TWindowsWebBrowserService.LocationUrl: string; begin Result := FUrl; if FInstance <> nil then Result := FInstance.LocationURL; end; В WebBrowser.pas изменим: function TKCustomWebBrowser.GetURL: string; begin if (csDesigning in ComponentState) or (FWeb = nil) then Result := FURL else {$IFDEF MSWINDOWS} Result := (FWeb as TWinWBMediator).WB.LocationUrl; {$ELSE} Result := (FWeb as TAndroidWebBrowserService).originalUrl {$ENDIF} end; Как результат - корректная работа панели навигации.
  33. 1 балл
    Freezer_86

    WebBrowser + ComboBox = ошибка ?

    Натыкался на такую проблему, смог обойти написанием своей копией TWebBrowser. Основное изменение для обхода именно ошибки с CoboBox'ом это в начале процедуры TCustomWebBrowser.FormHandleCreated вставкой кода: {$IFDEF MSWINDOWS} exit; {$ENDIF} После этого никаких проблем с пересозданием. Правда у меня все браузера создаются в Runtime. Не знаю или это подойдет для нормальной работы с загрузкой из DFM.
  34. 1 балл
    krapotkin

    Разница между Push и Сервисом

    какую еще разницу нужно, если мне нужно либо ПИСАТЬ сервис и устанавливать его на девайс или НЕ ПИСАТЬ сервис ?
  35. 1 балл
    Andrey Efimov

    Сохранение кириллицы в юникоде

    Обратите внимание на модуль http://docwiki.embarcadero.com/Libraries/Tokyo//en/System.IOUtils.TFile
  36. 1 балл
    Евгений Корепов

    Item has been already purchased

    Вот https://play.google.com/intl/ru/about/monetization-ads/payments/ Платежи Приложения, через которые можно делать покупки, должны соответствовать следующим требованиям: Покупки в магазине. Плата за приобретение и скачивание приложений в Google Play должна взиматься через систему оплаты Google Play. Покупки через приложение. Для продажи цифровых продуктов через игру, представленную в Google Play, необходимо использовать систему оплаты контента Google Play. При продаже цифровых продуктов через другие виды приложений, представленные в Google Play, необходимо также использовать систему оплаты контента Google Play. Исключения составляют следующие случаи: продажа нецифровых товаров; продажа цифрового контента, который может использоваться вне приложения (например, треков, которые можно воспроизводить в других проигрывателях). Виртуальную валюту можно использовать только в приложении, через которое она была приобретена. Запрещается вводить пользователей в заблуждение относительно приложений, а также услуг, товаров, контента и функций, которые можно через них приобрести. Если за доступ к функциям, указанным в описании приложения в Google Play, взимается плата, вы обязаны предупредить об этом пользователей. Удивительно если бы было по другому. Не думаю что Гугль откажется от своих 30% от продаж.
  37. 1 балл
    mmover

    Memory TreeView

    Самое простое : https://github.com/davidberneda/GenericTree Сам не пробовал, но давно использую похожую конструкцию.
  38. 1 балл
    вот кусок из рабочего кода. если протрассировать по FindObject, то можно найти все элементы, которые создаются автоматом при создании итема и заполнить тут, в коде
  39. 1 балл
    kami

    Разница в вызовах Synchronize

    Поправка: RemoveQueuedEvents вызывается само в деструкторе TThread. Если важно, чтобы все синхронизируемые события отработали - при уничтожении TThread в главном потоке нужно вызывать System.Classes.CheckSynchronize(0) до того момента, как оно вернет False.
  40. 1 балл
  41. 1 балл
    Alex7wrt

    TPath Как программно указать TPathData

    Например так: var path: TPathData; .......... Path:=TPathData.Create; Path.Clear; Path.MoveTo(PointF(x[0],y[0])); for i:=1 to N do Path.LineTo(PointF(x[i],y[i])); Path.ClosePath;
  42. 1 балл
    как-то так, но это наверное сложно для понимания) LVStars.rar
  43. 1 балл
    как то так наверное AutoSizeImage.rar
  44. 1 балл
    Евгений Корепов

    ListView в Берлине и в Токио

    Вот так сделайте: procedure TForm1.LsvObjectsUpdateObjects(const Sender: TObject; const AItem: TListViewItem); var ... oConnectImage: TListItemImage; r: integer; begin r:=Random(ImageList1.Count); oConnectImage:=aItem.Objects.FindDrawable('ConnectImage') as TListItemImage; if (oConnectImage<>nil) then begin oConnectImage.OwnsBitmap:=True; oConnectImage.ImageIndex:=r; end; ... end; Добавьте строчку oConnectImage.OwnsBitmap:=True. В соседней теме я долго бился над этим.
  45. 1 балл
    Nik

    Seattle Android Ошибка exited with code 1

    Задался тут вопросом обновления версии Android NDK... Delphi 10.2 Tokio: - android-ndk-r14b-windows-x86_64 - скомпилировалось, но при запуске приложения на андроиде сбоит и виснет; - android-ndk-r15-beta1-windows-x86_64 - полёт нормальный.. всё работает ) P.S> может кому пригодится
  46. 1 балл
    Euvene

    Кнопка с картинкой

  47. 1 балл
    Кто ищет, тот найдёт... Вот вы статью нашли, полазили бы в блоге, например в разделе "Список всех сообщений" и ... Как создавать обёртки для JAVA-кода Как подключить и использовать свой JAVA-класс Как добавить jar библиотеку в проект Дальше, воспользовались бы поиском на этом форуме и ... Поиск по запросу "обёртки": Утилита генерации pas файлов для AndroidAPI из jar файлов + ещё множество полезных тем Ну и наконец: Полностью транслированное Android API 7-23 уровня И чуть не забыл, есть же справка официальная Help for RAD Studio Berlin p.s. Всё уже давно разжёвано, вопросы задают по каким-то конкретным моментам.
  48. 1 балл
    Равиль Зарипов (ZuBy)

    Custom Font

    Шаблон проекта с кастомным шрифтом FontAwesome Намного удобней и менее затратно использовать Шрифт с Иконками, чем заботиться о качестве картинок, скейлах, их хранении и загрузке Поэтому давно перешел на шрифты, пару скриншотов (без использования картинок) Seattle CustomFont.7z Berlin CustomFont(Berlin).zip WINDOWS/MACOS - установить шрифт в систему IOS - в деплой добавить шрифт и с помощью IOS9Fix прописать в .plist следующее: ANDROID - в деплой добавить шрифт (Remote Path -> assets\internal) и подключить к проекту измененные файлы FMX.FontGlyphs.Android.pas, FMX.FontGlyphs.pas
  49. 1 балл
    Andy

    Маршалинг/ДеМаршалинг в System.JSON

    Можно и без сеттеров и геттеров и тоже будет работать: TTelegaUser = Class FID: Integer; FFirst_Name: String; FLast_Name: String; FUsername: String; End;
  50. 1 балл
    Посмотрел. В Андроид АПИ это поле вроде как не описано, но в исходниках Андроида оно есть, правда приватное, называется LOCK_SCREEN_OWNER_INFO (тип string). В интернете нашёл вот такое решение (не проверял): Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCK_SCREEN_OWNER_INFO); Если не заработает, то 99%, что извлечь вообще не получится. p.s. Посмотрел ещё раз АПИ, скорее всего решение не рабочее, т.к. поля "Settings.Secure.LOCK_SCREEN_OWNER_INFO" попросту нет в АПИ, а значит возникнет ошибка уже на стадии написания кода.
Эта таблица лидеров рассчитана в Москва/GMT+03:00