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

AngryOwl

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

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

  • Посещение

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

    45

Активность репутации

  1. Like
    AngryOwl отреагировална x11 в Ошибка при подключении к MySQL Windows   
    Я за UniDac!
    Там безо всяких библиотек.
  2. Like
    AngryOwl отреагировална progilic в Ошибка при подключении к MySQL Windows   
    hi, i think its better to use UniDac 
  3. Thanks
    AngryOwl получил реакцию от Шамсуддин в Отпечатки пальцев   
    Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
  4. Like
    AngryOwl отреагировална Pax Beach в Инструкция по установке набора компонентов FGX   
    Сообщение об ошибке справедливое.
    Но, всегда нужно помнить, что циганский поезд, типа Эмбы лучше ставить в отдельную не системную папку, желательно с правами на запись.
     
  5. Like
    AngryOwl получил реакцию от Julia в Отпечатки пальцев   
    Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
  6. Like
    AngryOwl получил реакцию от Anatoliy в Отпечатки пальцев   
    Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
  7. Like
    AngryOwl получил реакцию от Ingalime в TLang + TEdit.TextPrompt?   
    Добрый!
    Никак. Как и многие другие элементы...
    Решение, до сих пор, - создание своего компонента или модуля для мультиязычных приложений.
    Пример - Мультиязычность в андроиде.
    Код, конечно, давно изменился и оптимизировался не раз. Если будет свободное время - выложу как-нибудь последнюю версию.
  8. Like
    AngryOwl получил реакцию от Ingalime в Странное поведение TEdit при вводе на некоторых устройствах   
    Попробуйте установить у TEdit свойство KeyboardType = Alphabet, а не Default.
  9. Like
    AngryOwl отреагировална brunnengi в Как получить доступ к значениям элементов TJSON?   
    Не за что.
    Если что спрашивай. 
    XML формат мне всегда был противен, хоть и понятен, но все равно внутренне я был против него и как следствие принципиально не использовал в своих программах.
    Но вот формат JSON мне очень понравился. Его легко написать от руки, легко читать, даже через регулярки парситься легко, если приспичило. И он не избыточен как XML, а значит по канала связи передается меньше трафика.
     
    Так что не бросай этот формат
     
    И кстати, что касается утечек. Я когда сам только начинал разбираться в формате JSON и с тем как работать с ним в Delphi, у меня тоже были утечки, ибо я использовал JSON для парсинга ответа с сервера, в потоке. Я тогда начал склоняться к всеобщему мнению что просто сама реализация работы с этим форматом в делфи кривая. 
    Но поколебавшись все таки принял во внимание ту мысль, что разработчики Embacadero на девять жизней умнее меня, и вряд ли они выпустили модуль с таким явным глюком. И решил все таки углубиться дальше.
    Как оказалось просто поставить JS.Free в конце не достаточно.
    Т.е. вот так вот делать не стоит:
    var JS: TJSONObject; begin s := '{"jsonString":"ok"}; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; В процессе работы потока с ним может случиться все что угодно - обрыв связи, тайоут сработает, или некорректные данные, или еще что нибудь. И JS объект может не освободиться. Т.е. поток может уже и не существует, но в оперативке созданный объект лежит.
     
    К тому же при таком подходе могут быть и ошибки, например параметра 'jsonString' может и не быть, и все вывалиться в ошибку (но в потоке этого можно и не увидеть) и до JS.Free код никогда не дойдет. А значит будет опять утечка памяти.
     
    Так что правильней всего делать через Assigned:
    var JS: TJSONObject; begin s := '{"jsonString":"ok"}'; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; if Assigned(JS) then begin ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; end; Тогда утечек не будет. Это я теперь точно знаю!)))
  10. Like
    AngryOwl отреагировална mazayhin в Программно развернуть свернутое приложение   
    Вот здесь, когда оборачиваете в PendingIntent, присваиваете ему уникальный номер (в примере выше это 1), этот номер где-то храните.
    PendingIntent := TJPendingIntent.JavaClass.getBroadcast (TAndroidHelper.Context, _ТУТ НОМЕР_, intent, 0); Потом, что бы отменить, создаете идентичный PendingIntent, с номером, с которым запускали, и
    TAndroidHelper.AlarmManager.cancel(PendingIntent);  
  11. Like
    AngryOwl отреагировална Andrey Efimov в TEdit не понятное удаление последнего символа   
    Здравствуйте.
    Это баг, я сообщил о нём ещё в мае (RSP-14928 и RSP-14929), в тех. поддержке предложили временное решение (ответ ниже). (Тема В TEdit стирается предыдущий текст аналогичная).
    find FMX.Platform.Android.pas find procedure TTextServiceAndroid.SetCaretPosition(const Value: TPoint); change code to: procedure TTextServiceAndroid.SetCaretPosition(const Value: TPoint); var SelStart, SelEnd: Integer; begin if FCaretPosition <> Value then begin FCaretPosition := Value; CalculateSelectionBounds(SelStart, SelEnd); if (FTextView <> nil) and not FInternalUpdate then PlatformAndroid.SynchronizeOnUIThread( procedure begin //Fix By [龟山]Aone(1467948783) //https://quality.embarcadero.com/browse/RSP-14928 // if (SelEnd - SelStart) > 0 then // FTextView.setSelection(SelStart, SelEnd) // else FTextView.setCursorPosition(CaretPosition.X); end); end; end;  
     
  12. Like
    AngryOwl отреагировална FREEFAR в Приложение для получения раздражителей в работе Магазинов розничной сети   
    Всем привет.
    Смотрю сегодня тренд на публикацию приложений разработанных на Emb'e.
    Вот наше приложение которое тоже на днях поедет в маркеты
    Регаемся по номеру

     
    подтверждаем эСэМэСиной.

    Придумываем пин код и подтверждаем его

     
    После входа приложение покажет магазины в радиусе 500м


    Заходим в меню магазина

    Выбираем категорию  для жалобы ---- жалуемся , если надо прикладываем фото

    Еще кое что

    подтверждаем отправку жалобы

    PROFIT!
  13. Like
    AngryOwl отреагировална ENERGY в [Отклонение] TFloatAnimation и TFrame   
    Столкнулся с такой же проблемой, если любой компонент (в моем случае TImage ) лежит на фрейме не работает TFloatAnimation вообще.
    Решение: 
    При создании фрейма нужно указывать Self формы, а не  nil.
    : MyFrame := TMyFrame.Create(Self);
  14. Like
    AngryOwl отреагировална ENERGY в Сглаживание при рисовании в буфер bitmap   
    Итак на Android и iOS нет сглаживания при отрисовке примитивов (линий, кругов, вектора).
    Метод 1 (Native Draw, Delphi ONLY ) - лучший и простой. 
    На Canvas PaintBox рисуем как обычно.
    Если нужно нарисовать на Canvas Bitmap'a, а не на PaintBox, тогда нужно правильно подготовить Bitmap: 
    if Scene <> nil then lScale := Scene.GetSceneScale else lScale := 1; // fBitmap.BitmapScale := lScale; //это только для DrawPath fBitmap.SetSize(Ceil(Width * lScale), Ceil(Height * lScale) );  
    Все детали здесь, также там ссылка на сайт (используйте гугл переводчик)
    https://github.com/OneChen/FMXNativeDraw
    Если нужно сохранить в Bitmap, то делаем PaintBox.MakeScreenshot (TControl.PaintTo) в результате получаем сглаженный Bitmap. Кстати вызвать PaintTo не получится в Paint и Afterpaint методах текущего контрола - будет циклический вызов Paint и в результате переполнение стэка, нужно делать это в AfterPaint формы или фрейма. 
    Метод 2.
    http://riversoftavg.com/blogs/index.php/2016/06/09/use-supersampling-for-offscreen-bitmaps-on-delphi-mobile/
  15. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Что невозможно сделать на Delphi для Android?   
    С++ ваше всё, наше всё Делфи
  16. Like
    AngryOwl отреагировална sinuke в Возможно ли сделать такой интерфейс с ЛистВью?   
    да, легко
    вот мое расписание в листвью
     

  17. Like
    AngryOwl отреагировална Akad в Application.ProcessMessages - плохой стиль?   
    Так же плохой для многих стиль - goto, break и continue. А многим коллегам ума не хватает даже использовать  free /release и глобальные переменные, для них созданы всякие диезы с явами. И дальше что? Подстраиваться под всех, не используя возможности полноценного языка?
    Application.ProcessMessages надо просто использовать с осторожностью. Таймеры отключать, за нажатиями на закрытие форм и пр. следить. Если есть какое-то долгое вычисление, которое не предсказуемо через какое время закончится, а таблицу уже начали обновлять, то милое дело запустить его в другом потоке, параллельно в GUI проигрывая анимашку.  Другие варианты  реализаций - это очень сложно, и интерфейс получится не отзывчивым.
    Splash с прогрессом надо делать только так, если максимальной скорости загрузки хотим. Вообще много областей применений есть у  Application.ProcessMessages. Надо помнить об основных нюансах, иначе будут проблемы.
     
  18. Like
    AngryOwl отреагировална ENERGY в Что невозможно сделать на Delphi для Android?   
    Нет как раз таки. Berlin Update 2 более стабильный и там меньше багов FMX чем в Tokyo. В Токио от одного бага со сменой главного потока целая эпопея, с потерей производительности и проблем с анимацией - много что посыпалось. Была, а может еще и будет.  Некоторые программисты с форума EMBT вообще считают Токио самой неудачной версией Delphi, в плане багов за всю ее историю. 
  19. Like
    AngryOwl отреагировална Andrey Efimov в Что невозможно сделать на Delphi для Android?   
    Не обманывай людей . Это что: procedure onReceivePermissionsResult(const ASender: TObject; const AMessage: TMessage); ?
     
  20. Like
    AngryOwl отреагировална DMS в Что невозможно сделать на Delphi для Android?   
    И куда? Пробовал и IDEA, и Eclipse, и Android Studio. Работа в Delphi - самая комфортная.
  21. Like
    AngryOwl получил реакцию от sargon в Sphere Live - мультиплатформенная система c функциями видеоконференцсвязи, файлового обмена, облачного хранилища   
    Проект закрыт (уже около года как), ввиду ряда экономических и юридических вопросов.
  22. Thanks
    AngryOwl отреагировална sinuke в Ошибки при переходе в Токио   
    Как я понимаю модуль FMX.FontGlyphs.Android.pas подключен из Берлинской версии студии. Вам нужен этот файлик для Токио. Как я понимаю, используете что-то типа FontAwesome. Например, на гитхабе Равиля этот файл есть версии и для Берлин и для Токио.
  23. Thanks
    AngryOwl отреагировална ENERGY в Двигать объект по окружности (кругу) - Moving an object in a circular path   
    X := originX + cos(angle)*radius;
    Y := originY + sin(angle)*radius;
     

  24. Thanks
    AngryOwl отреагировална haword в [Андроид]не видно картинки   
    в делфи делается так - 
                        li:= lv.Items.Add;
                        lii:=li.Objects.FindObjectT<TListItemImage>('Image');
                        lii.OwnsBitmap:=True;
    далее можно грузить картинку, если в потоке то 
                TThread.Synchronize(TThread.CurrentThread, procedure()
                begin
                   // присваивание битмапу картинки 
                            lii.Bitmap:= TBitmap.Create;
                            lii.Bitmap.SetSize(ItemBitmap.Width, ItemBitmap.Height);
                            lii.Bitmap.Clear(TAlphaColors.Null);
                            lii.Bitmap.CopyFromBitmap(ItemBitmap);
                   
                end
                );
  25. Like
    AngryOwl получил реакцию от Freezer_86 в Как нарисовать круглый TImage   
    var   BmpNew     : TBitmap; begin     BmpNew := TBitmap.Create;     BmpNew.SetSize({нужный размер}, {нужный размер});     BmpNew.Canvas.BeginScene;     try       BmpNew.Canvas.Fill.Kind := TBrushKind.Bitmap;       BmpNew.Canvas.Fill.Bitmap.WrapMode := TWrapMode.TileStretch;       BmpNew.Canvas.Fill.Bitmap.Bitmap := {ваш битмап};       BmpNew.Canvas.Clear(0);       BmpNew.Canvas.FillEllipse(RectF(0, 0, {нужный размер}, {нужный размер}), 1);     finally       BmpNew.Canvas.EndScene;     end;     TImage{ваш объект}.Bitmap.Assign(BmpNew); end; думаю так
×
×
  • Создать...