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

Лидеры

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

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

    Модераторы


    • Баллы

      13

    • Постов

      2 517


  2. Rusland

    Rusland

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


    • Баллы

      4

    • Постов

      1 204


  3. rareMax

    rareMax

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


    • Баллы

      4

    • Постов

      553


  4. krapotkin

    krapotkin

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


    • Баллы

      2

    • Постов

      2 185


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

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

  1. rareMax

    Генерация QR-кода на Android

    Добавьте это {$ZEROBASEDSTRINGS ON} Инфа: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Zero-based_strings_(Delphi)
    2 балла
  2. могу подсказать в какую сторону копать. строки в ANDROID/IOS начинаются с 0, а там не заметил чтобы это учитывалось. Если сделаете, выложите. Всем будет полезно
    2 балла
  3. угу, посмотрел, раньше вроде не было этого я думаю, это просто лень ему было написать тип PtrInt и еще парочку надо написать автору на гитхабе, он быстро исправляет ошибки
    2 балла
  4. Не согласен, тут просто нужно запомнить что: A - Array I - Integer S - String B - Boolean и т.д. Очень даже просто и логично )
    2 балла
  5. Я отказался от родного в пользу XSO, посмотрите как компактно выглядет код который я привел выше. И стабильно и читабельно, скорость тоже на высоте
    2 балла
  6. Я вижу решение таким, реализуйте. Каждый пиксель нужно отрисовать примерно 4 раза, тогда квадрат будет не 1х1, а 4х4. Картинка станет четкой т.к. увеличится холст
    2 балла
  7. rareMax

    LiveTile

    Во времена Win8, согласно легенде, позволял добавить свою плитку в меню "пуск". У меня правда не получилось это сделать, но это совсем другая история
    1 балл
  8. enatechno

    Cancel в InputQuery

    и не только... What's New - Berlin: Simplified Dialog API Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services that provide support for synchronous and asynchronous dialog boxes, respectively. The following table summarizes the API changes: Deprecated Members New Members FMX.Dialogs.ShowMessage* FMX.Dialogs.ShowMessageFmt* FMX.Dialogs.ShowMessagePos ShowMessageAsync ShowMessageSync FMX.Dialogs.MessageDlg FMX.Dialogs.MessageDlgPos FMX.Dialogs.MessageDlgPosHelp FMX.Platform.IFMXDialogService.MessageDialog MessageDialogAsync MessageDialogSync FMX.Dialogs.InputBox FMX.Dialogs.InputQuery FMX.Platform.IFMXDialogService.InputQuery InputQueryAsync InputQuerySync * ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync or ShowMessageSync instead nonetheless. Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper classes provide class methods and functions that allow you to call the new procedures and functions for dialog boxes without the need of an instance of the corresponding dialog box platform service. Other FireMonkey
    1 балл
  9. похоже на правду, но сейчас нет времени проверить. думаю Pax Beach примет это к сведению
    1 балл
  10. rareMax

    Генерация QR-кода на Android

    Ну ладно... {$IFNDEF MSWINDOWS} {$ZEROBASEDSTRINGS OFF} {$ENDIF} И обращаю внимание что это только для проверки. Я код не видел - но скорее всего придется много переделывать для кроссплатформенности.
    1 балл
  11. я про это в курсе, но тогда на Windows отвалится. я не проверял, но в коде видел циклы со строками начинающиеся с 1
    1 балл
  12. Pax Beach

    Генерация QR-кода на Android

    я неправильно сделал, что не добавил строчку: Canvas.Stroke.Kind := TBrushKind.Solid; рисовать квадратами, тоже хорошо получилось. Модуль в моей редакции (в архиве выше) под Windows хорошо с UTF8 работает, а вод под Android разбираюсь. Спасибо за указание на ошибку.
    1 балл
  13. Кроме того, проверьте стандартную библиотеку System.JSON на утечку памяти (ReportMemoryLeak), каждый раз TJSONvalue надо освобождать и уничтожать.
    1 балл
  14. Rusland

    Всплывающая подсказка

    Еще посмотрите на компонент CalloutPanel
    1 балл
  15. немного неправильно сделали, вот так: procedure TfmMainQRShare.ImageQRPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var Row, Column: Integer; xPos, yPos, RectSize: Single; pixelColor: TAlphaColor; Img: TImage; begin Img := (Sender as TImage); if Assigned(QRCode) and (not QRCode.Data.IsEmpty) then begin RectSize := Min(Img.Width, Img.Height) / QRCode.Columns; if RectSize > 0 then begin try Canvas.BeginScene; for Row := 0 to QRCode.Rows - 1 do begin for Column := 0 to QRCode.Columns - 1 do begin if (QRCode.IsBlack[Row, Column]) then pixelColor := TAlphaColors.Black else pixelColor := TAlphaColors.White; xPos := Column * RectSize + 0.5 * RectSize; yPos := Row * RectSize + 0.5 * RectSize; Canvas.Fill.Color := pixelColor; Canvas.FillRect(RectF(xPos, yPos, xPos + (RectSize + 1), yPos + (RectSize + 1)), 0, 0, AllCorners, 1); end; end; finally Canvas.EndScene; end; end; Img.Bitmap.SetSize(Canvas.Width, Canvas.Height); Img.Bitmap.Assign(Canvas.Bitmap); end; end; procedure TfmMainQRShare.Update; begin QRCode.Free; QRCode := TDelphiZXingQRCode.Create; QRCode.Data := edtText.Text; QRCode.Encoding := TQRCodeEncoding(cmbEncoding.ItemIndex); QRCode.QuietZone := StrToIntDef(edtQuietZone.Text, 2); QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns); ImageQR.Repaint; end; но проблема в другом, проблема в самом модуле, он не правильно работает со строками
    1 балл
  16. Посмотрите на реализацию JSON парсера в библиотеке https://github.com/synopse/mORMot немного о быстродействии http://blog.synopse.info/post/2015/02/16/Benchmarking-JsonDataObjects-JSON-parser пример кода { "glossary":{ "title":"example glossary", "GlossDiv":{ "title":"S", "GlossList":{ "GlossEntry":{ "ID":"SGML", "SortAs":"SGML", "GlossTerm":"Standard Generalized Markup Language", "Acronym":"SGML", "Abbrev":"ISO 8879:1986", "GlossDef":{ "para":"A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso":[ "GML", "XML" ] }, "GlossSee":"markup" } } } } } // Synopse direct record access Check(gloss.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso[0]='GML'); // Synopse TDocVariant with properties Check(DocVariantData(doc.GetValueByPath(['glossary','GlossDiv','GlossList','GlossEntry','GlossDef','GlossSeeAlso'])).Value[0]='GML'); // Synopse TDocVariant with late binding Check(doc.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso._(0)='GML'); // DBXJSON check(((((((obj.GetValue('glossary') as TJSONObject).GetValue('GlossDiv') as TJSONObject).GetValue('GlossList') as TJSONObject).GetValue('GlossEntry') as TJSONObject).GetValue('GlossDef') as TJSONObject).GetValue('GlossSeeAlso') as TJSONArray).Get(0).Value='GML');
    1 балл
  17. AV выходит только при не правильной JSON структуре. А остальные данные можно не проверять, на существование. Он сам съест ошибку и вернет пустоту. а если учесть что данные идут от сервера (в данной теме) нужно всего ишь проверить правильность начальных символов. дело в кол-ве строчек, а в количестве символов и в понимании работы с JSON
    1 балл
  18. я всеже предложу вам посмотреть реализацию через XSO там реализован правильный фильтр JSONParse.zip
    1 балл
  19. Огромное спасибо, Вы меня сильно выручили!
    1 балл
  20. Вот получение данных с type=1: function TFormMain.ParseJSONArray(AJSONString : String) : TStringList; // для удобства функция возвращает TStringList, так будет проще закинуть результат в Memo Var AJSONArray : TJSONArray; AJSONValue : TJSONValue; I : Integer; begin Result:=TStringList.Create; // Создаем результат фозвращаемый функцией AJSONArray:=TJSONArray(TJSONObject.ParseJSONValue(AJSONString)); // Зная что на входе TJSONArray парсим его, пропуская парсинг TJSONObject if Not Assigned(AJSONArray) then // Если парсинг удался, то AJSONArray<>Nil Exit; for I := 0 to AJSONArray.Count-1 do // Работаем как с обычным массивом begin if AJSONArray.Items[I].TryGetValue('type',AJSONValue) Then // Получаем type if Not AJSONValue.Value.Equals('1') then // если type<>1 переходим на следующую итерацию (код ниже пропускается) Continue; if AJSONArray.Items[I].TryGetValue('number',AJSONValue) Then //Здесь используем полезную функцию TryGetValue, защищая себя от некорректных или отсутствующих 'number' Result.Add(AJSONValue.Value); // Если успешно, то добавляем полученную строку в результирующий StringList end; end; "адресс вайолэйшн" потому что код с XSuperObject не безопасный, будет работать до первой ошибки в входных данных, далее крах приложения.
    1 балл
  21. Не-не-не, поддержка Linux и Intel Atom будет не раньше версии "Delphi 99.9 Uhta"
    1 балл
  22. Для работы с JSON в Delphi есть все что нужно - штатная библиотека System.JSON. Быстрая и удобная, работать с ней одно удовольствие. Вот накидал проект, ваш JSON загружаю из файла. unit UnitFormMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.IOUtils, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, System.JSON; type TFormMain = class(TForm) Memo: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } function ParseJSONArray(AJSONString : String) : TStringList; end; var FormMain: TFormMain; implementation {$R *.fmx} procedure TFormMain.FormCreate(Sender: TObject); Var AJSONString : String; begin AJSONString:=TFile.ReadAllText('D:\Embarcadero\Projects\Test\test062 JSON Array\input.json'); // Загружаем JSON в строку Memo.Lines.Assign(ParseJSONArray(AJSONString)); // Вызываем функцию парсинга, если все удачно - Memo заполнится значениями, если нет - останется пустым. end; function TFormMain.ParseJSONArray(AJSONString : String) : TStringList; // для удобства функция возвращает TStringList, так будет проще закинуть результат в Memo Var AJSONArray : TJSONArray; AJSONValue : TJSONValue; I : Integer; begin Result:=TStringList.Create; // Создаем результат фозвращаемый функцией AJSONArray:=TJSONArray(TJSONObject.ParseJSONValue(AJSONString)); // Зная что на входе TJSONArray парсим его, пропуская парсинг TJSONObject if Not Assigned(AJSONArray) then // Если парсинг удался, то AJSONArray<>Nil Exit; for I := 0 to AJSONArray.Count-1 do // Работаем как с обычным массивом if AJSONArray.Items[I].TryGetValue('number',AJSONValue) Then //Здесь используем полезную функцию TryGetValue, защищая себя от некорректных или отсутствующих 'number' Result.Add(AJSONValue.Value); // Если успешно, то добавляем полученную строку в результирующий StringList end; end. P.S. работает под всеми платформами. Скорость для такого небольшого файла JSON можно принять за мгновенную даже на стареньких телефонах. Мне вот тут один сервис отдавал JSON размером в 6 мегабайт. Онлайн парсер http://pro.jsonlint.com/ которым удобно смотреть структуру зависал наглухо. А в Delphi все отлично и быстро работало
    1 балл
  23. если использовать XSuperObject var aJSON: string; xJS, xObj: ISuperObject; j: integer; begin xJS := SO(aJSON); // данные with xJS.A['data'] do // имя массива begin for j := 0 to length - 1 do begin xObj := O[j]; TStringList.Add(xObj.S['number']); // собираем в стринг лист нужное поле end; end; end;
    1 балл
  24. ruslan

    Освобождение памяти TListViewItem

    при Add тебе возвращается указатель(!) на новый итем. смотри TListViewItems.AddItem(Index: Integer) в FMX.ListView в TListViewItems.Delete(Index: Integer) вызывается FreeAndNil итема а вот в TListViewItems.Clear просто чистится TList<TListViewItem>. как известно TList это просто список указателей. так что сама память при ListView.Items.Clear как я понимаю не освободится. как альтернатива: while ListView.Items.Count > 0 do ListView.Items.Delete(0);
    1 балл
  25. В вашем случае вы не задали тип кисти Canvas.Stroke. Более, чем уверен, что на устройстве там стоит TBrushKind.bkNone. Вашу проблему решит задание типа кисти TBrushKind.bkSolid. procedure TForm5.Image14Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var EllipseRegion: TRectF; begin Canvas.Stroke.Kind := TBrushKind.bkSolid; Canvas.Stroke.Color := TAlphaColorRec.Red; EllipseRegion := TRectF.Create(TPointF.Create(100, 100), 20, 20); Canvas.DrawEllipse(EllipseRegion, 1); end; Хорошая практика отрисовки в FMX полагает, что вы полностью инициализируете все кисти, необходимые вам для отрисовки. Так же обратите внимание, что канва для формы и всех контролах, размещенных на ней, всегда существует в одном экземпляре. И правилом хорошего тона, является использовать канву, переданную через параметры события отрисовки.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...