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

brunnengi

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

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

  • Посещение

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

    21

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

  1. Like
    brunnengi получил реакцию от Rusland в 3D приложение   
    Ну в полном объеме, точно так же как и на компе, не сделать конечно. 
    Не смотря на то что мобильные устройства становятся мощнее, всё же им пока еще тяжело догнать ПК. 
    Да, игры становятся красивее, но если присмотреться, то видно как в этих играх, сильно уменьшено количество полигонов, особенно на вторых планах, некоторые части прорисовки рассчитаны заранее, какие то объекты вообще исчезают из виртуального мира во время резких поворотов персонажа в игре. Так что всё это относиться к оптимизации, и она отнимает много времени и даже тогда существует не нулевой шанс что оптимизация не даст нужного эффекта.
    Так что если требуется вывести на планшет/смартфон, то придется много стараться в плане оптимизации. 
    Но если объективно, то с хорошей графикой, плавностью движения, работой света и тени и т.д. - нет, не сделать. Но что то похожее, с заниженным качеством, и высокой информативностью это можно.
     
     
     
  2. Like
    brunnengi получил реакцию от zairkz в 3D приложение   
    Ну в полном объеме, точно так же как и на компе, не сделать конечно. 
    Не смотря на то что мобильные устройства становятся мощнее, всё же им пока еще тяжело догнать ПК. 
    Да, игры становятся красивее, но если присмотреться, то видно как в этих играх, сильно уменьшено количество полигонов, особенно на вторых планах, некоторые части прорисовки рассчитаны заранее, какие то объекты вообще исчезают из виртуального мира во время резких поворотов персонажа в игре. Так что всё это относиться к оптимизации, и она отнимает много времени и даже тогда существует не нулевой шанс что оптимизация не даст нужного эффекта.
    Так что если требуется вывести на планшет/смартфон, то придется много стараться в плане оптимизации. 
    Но если объективно, то с хорошей графикой, плавностью движения, работой света и тени и т.д. - нет, не сделать. Но что то похожее, с заниженным качеством, и высокой информативностью это можно.
     
     
     
  3. Like
    brunnengi получил реакцию от zairkz в [DXBerlin][Android][TMapView] Маячок по центру карты   
    Нельзя положить поверх карты (андроид), я так понимаю что это проблема только программирования на Андроид из под делфи, коли в других программ под андроид нормально идет?
     
    попробую, посмотрю что из этого выйдет.
     
     
    А варианта перерисовывать в самом компоненте нет?
  4. Like
    brunnengi получил реакцию от zairkz в [DX10.1][Android][TMultiView] Как убрать белую полоску у TMutiView?   
    Ну я так раньше делал. 
    Но помогало чуть чуть. Сейчас, поковырявшись, понял что там две линии. Одна от DropLine (она убралась методом указанным Ярославом), а вторая внутренняя линия, и она лечиться margin.right = -1;
    Но все же хотелось узнать что это за линии такие, зачем они нужны?
  5. Like
    brunnengi получил реакцию от Rusland в [Berlin][Android] Index out of range когда ImageList и VertScroll, как исправить?   
    Здравствуйте.
    Не могу понять, или я не правильно делаю или баг.
    Берем чистый проект. Выбираем Style: Android.
    Кидаем на форму TVertScroll, TImageList. В VertScroll накидываем TSpeedButton штук 10. У всех SpeedButton выбираем Images->ImageList1. В наш ImageList грузим любую картинку. И затем у всех SpeedButton'ов выбираем ImageIndex = 0;
    Cужаем VertScroll так чтобы несколько кнопок не было видно, т.е.так что бы для того что бы увидить кнопки приходилось бы прокручивать VertScroll.
    Теперь сохраняем весь проект. Закрываем всё. Открываем проект заново. И получаем ошибку "Error creating form: Index out of range (n). Must be >=0 and <n". Где n - это некоторо число зависящее от количества кнопок включая скрытых в VertScroll'е.
    Причем если выбирать стили SpeedButton (например с радиокнопками), то все нормально.
    Подскажите я что то не так делаю?
  6. Like
    brunnengi получил реакцию от Rusland в Чат со смайлами   
    Хороший вопрос.
    Как ты его будешь решать я не знаю. Да и как остальные решают этот вопрос я тоже не в курсе.
    Однако сейчас я сам начинаю писать чат-программу (чисто для себя, без всякой заявки и претензии).
    Мой вариант реализации будет таков:
    Берем Layout, это у нас будет "облачком" со всей репликой.
    Каждая строчка это тоже TLayout внутри "облачка", тока выравнивание Top (что бы к верху все прижимались).
    Высота таких строчек из Layout 32 пикселя.
    При вставке текста создаем новый TText и вставляем его в первую строчку с выравниванием по левому краю и ставим ему АвтоРасширение ширины в зависимости от содержимого текста. Если место в строчке еще есть (сама строчка не более 40 символов или не более 280 пикселей примерно пока), то при вставке смайлика (этот картинка) создаем TImage и присваиваем ему родителя первую строчку и выравнивание также по левому краю, так что он прижмется к тексту "Привет".
     
    Примерно вот такой план. На днях буду пробовать его реализовывать. Посмотрим что получиться.
     
    Если у какого то есть конструктивные идеи получше, то выслушаю внимательно. А то может мой вариант избыточен и есть более гибкий и изящный вариант. 
  7. Like
    brunnengi получил реакцию от Евгений Корепов в Как узнать какой тип у элемента JSON   
    Не знаю то или не то что ты хочешь, но вот:
    Пример:
    Строка JSON: {"type1":199, "type2":"val2","ar":["arval1","arval2"]}
    первый это число, второе строка, третье массив
     
    Код на кнопку:
    procedure TForm1.Button1Click(Sender: TObject); var s : string; js : TJSONObject; begin s := '{"type1":199, "type2":"val2","ar":["arval1","arval2"]}'; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; memo1.Lines.Add(JS.Pairs[0].JsonValue.ClassName); memo1.Lines.Add(JS.Pairs[1].JsonValue.ClassName); memo1.Lines.Add(JS.Pairs[2].JsonValue.ClassName); end; Запускаем и в memo1 попадают вот такие ответы:
    TJSONNumber TJSONString TJSONArray     Думаю дальше ты знаешь что делать, если конечно я правильно тебя понял и правильно тебе насоветовал тут.
  8. Like
    brunnengi получил реакцию от zairkz в Цена собственной программы   
    Вопрос действительно не простой.
    Я обычно прибавляю 80k (80,000) рублей если в программе используется локальная база. Если еще и серверная часть требуется то плюс еще 80k-120k
    Отчеты вещь не легкая и кропотливая. Так что и тут цена не должна быть низкой. Нет смысла в сборе данных, если нет толкового отчета который покажет прозрачную аналитику.
    Писать за еду, согласен, смысла нет, как бы не хотелось тебе им помочь. Если им надо, пусть ищут средства. Когда им надо могут найти, поверь. А если денег жалко, значит не особо и надо было.
    Я всегда беру 30-ти процентную предоплату по условию что не возвращаю этих денег, даже если клиент откажется или даже если я откажусь через две недели работы над программой.
    Короче нюансов много, но вектор тебе дали тут)))
  9. Like
    brunnengi получил реакцию от Brovin Yaroslav в [DX10] Движене по кругу и Анимация премещения   
    Оки, вроде получилось))
     
    R := 450; x0 := (form1.layout1.Width - form1.Circle1.Width) / 2; y0 := (form1.layout1.Height - form1.Circle1.Height) / 2; Ang := 45; // к примеру x := x0 + (R/2)*cos(ang*pi/180); y := y0 + (R/2)*sin(ang*pi/180); circle1.Position.X := x; circle1.Position.Y := y; где: R - радиус, Ang - угол в градусах от 0 до 360 layout1 я выставил в Align:=Client;
  10. Like
    brunnengi отреагировална Кривяков Виталий в [DX10] Движене по кругу и Анимация премещения   
    Окружность также можно описать с помощью параметрического уравнения:

    высчитываешь центр (X0, Y0) Определяешь угол поворота 2*Pi*Percent  (Percent от 0 до 1) Считаешь координаты точки окружности, только нужно учесть разницу в координате Y (на экране она растет сверху вниз)  
     
  11. Like
    brunnengi получил реакцию от zairkz в Как получить доступ к значениям элементов TJSON?   
    могу только на пример в делфи, ибо С++ не знаю.
    Вот код, будут вопросы задавай, отвечу
    procedure TForm1.Button1Click(Sender: TObject); var JS : TJSONObject; JSAr : TJSONArray; s : string; begin s := Memo1.Text; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; if Assigned(JS) then begin JS := TJSONObject.ParseJSONValue(JS.GetValue('response').ToString) as TJSONObject; JSAr := TJSONObject.ParseJSONValue(JS.GetValue('items').ToString) as TJSONArray; JS := TJSONObject.ParseJSONValue(JSAr.Items[0].ToString) as TJSONObject; Memo1.Clear; Memo1.Lines.Add('id: ' + JS.GetValue('id').Value); Memo1.Lines.Add('owner_id: ' + JS.GetValue('owner_id').Value); Memo1.Lines.Add('player: ' + JS.GetValue('player').Value); Memo1.Lines.Add('title: ' + JS.GetValue('title').Value); JS.Free; end; end;
  12. Like
    brunnengi получил реакцию от zairkz в Как узнать какой тип у элемента JSON   
    Не знаю то или не то что ты хочешь, но вот:
    Пример:
    Строка JSON: {"type1":199, "type2":"val2","ar":["arval1","arval2"]}
    первый это число, второе строка, третье массив
     
    Код на кнопку:
    procedure TForm1.Button1Click(Sender: TObject); var s : string; js : TJSONObject; begin s := '{"type1":199, "type2":"val2","ar":["arval1","arval2"]}'; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; memo1.Lines.Add(JS.Pairs[0].JsonValue.ClassName); memo1.Lines.Add(JS.Pairs[1].JsonValue.ClassName); memo1.Lines.Add(JS.Pairs[2].JsonValue.ClassName); end; Запускаем и в memo1 попадают вот такие ответы:
    TJSONNumber TJSONString TJSONArray     Думаю дальше ты знаешь что делать, если конечно я правильно тебя понял и правильно тебе насоветовал тут.
  13. Like
    brunnengi получил реакцию от AngryOwl в Как получить доступ к значениям элементов 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; Тогда утечек не будет. Это я теперь точно знаю!)))
  14. Like
    brunnengi получил реакцию от zairkz в Как получить доступ к значениям элементов 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; Тогда утечек не будет. Это я теперь точно знаю!)))
  15. Like
    brunnengi получил реакцию от AngalllKt в [Android] [XE7] Какой компонент выбрать для карты?   
    Здравствуйте.
    Хочу загнать карту в приложение. Т.е. сделать ПринтСрин нескольких участков, слить их в одно изображение в фотошопе, а потом иметь возможность просматривать на смартфоне под android. Что бы можно было пальцами приблизить, подвигать карту.
    Какой компонет посоветуете?
  16. Like
    brunnengi получил реакцию от AngalllKt в Как сделать пиксель прозрачным?   
    Здравствуйте.
    Как изменить цвет отдельного пикселя, а точнее сделать его полностью прозрачным?
    Например в image загруженная картинка. И надо пиксель с координатами x75 и y50 сделать невидимым.
  17. Like
    brunnengi получил реакцию от HarrisNuh в Запуск Анимацию по срабатыванию триггера другой анимации   
    Здравствуйте.
    Есть анимация для компонента TRectangle по смене цвета, которая срабатывает по триггерам.
    Но одновременно хочу менять и цвет текста который лежит в TRectangle. 
    Как можно сделать так, чтобы после сработки триггера от TRectangle срабатывала и анимация у TText?
  18. Like
    brunnengi получил реакцию от HarrisNuh в [Отклонение] TMediaPlayerControl не скрывается, если он лежит на вкладке, которая скрывается   
    Здравствуйте.
     
    Есть видео файл. При использование на форме mediaPlayerControl'а он воспроизводит видео поверх всего.
    Т.е. если взять TabContol и создать в нём две вкладки - TabItem1 и TabItem2 и в TabItem2 поместить MediPlayerControl с играющим видео, то даже если мы в процессе переключимся на на вкладку TabItem1, видео все равно будет видно.
    Сам видеоряд состоит из 150 кадров. Размер 600ш на 840в.
    Т.е. я могу конечно раскадрировать файл. 
    Но что мне потом использовать для адекватного отображения на форме?
    Я так понимаю что даже BitmapListAnimation мне тут не помощник, ибо, насколько я помню, у него есть свои ограничения на размеры.
    Так что мне тогда использовать?
  19. Like
    brunnengi получил реакцию от HarrisNuh в [XE7] TTabControl Настройка Анимация Смены Вкладок   
    Здравствуйте.
    Как можно изменить скорость анимация смены вкладок?
    А также очень волнует вопрос о том, можно ли изменить анимацию так, что бы она работала ни как AnimationFloat, а как AnimationFloatWait? Т.е. что бы код исполнялся только после того как завершена анимация перелистывания вкладки.
  20. Like
    brunnengi получил реакцию от xenon54 в [TidHTTP] Скачивание файлов без замораживания пользовательского интерфейса   
    1. Название темы должно отражать суть вопроса.
    2. Если вы новичок, то советую все таки погуглить по теме потоков, ибо в данном случае к FMX это не имеет отношения. 
    О потоках в Delphi в сети интернет очень и очень много инфы и в книжках тоже.
  21. Like
    brunnengi получил реакцию от Brovin Yaroslav в Можно ли использовать один контрол, как дочерний, в более чем одном контроле?   
    Здравствуй.
    Увы, но сделать так, как ты хочешь, нельзя.
  22. Like
    brunnengi получил реакцию от Евгений Корепов в [Android] Как убрать "Вставить" и подчеркивание при фокусе?   
    Дело в том что во всей системе "Вставить" появляется только после некоторого удержания пальцем в области ввода. И только в приложении на FMX он выскакивает сразу.
    CheckSpelling не исправил ситуацию (((
     
    Update 1:
    После перезагрузки телефона (я его просто очень редко перезагружаю его  ибо пашет отлично) подчеркивание вернулось во всех остальных приложениях. Значит оно так и должно быть.
    Но вот что касается "Вставить", а оно все равно выскакивает слишком быстро. Так то что бы оно появилось в других приложениях надо поддержать малость. А тут в приложении на FMX он практически моментально выскакивает.
     
    У меня Андроид 4.4.2 
    Телефон Samsung Note 3
  23. Like
    brunnengi отреагировална Brovin Yaroslav в Плз, помогите найти программу из примеров   
    Если я правильно вас понял вас интересовал слайдер картинок. Этот пример удалили из поставки XE7.
    Пример: MetropolisUIFlipViewDemo.zip
     
  24. Like
    brunnengi получил реакцию от Welchliax в [XE7] Что использовать вместо TFmxObject.AnimateXXX в XE7?   
    Здравствуйте.
    Тестил XE7 и увидел что теперь все Animate (float,  int, delay ...) deprecated, т.е. устарели. Но не могу найти в документации что вместо них теперь использовать. Подскажите пожалуйста.
  25. Like
    brunnengi получил реакцию от Andrey Efimov в FireMonkey: стоит ли начинать проект?   
    У меня уже несколько проектов переведено на чистый fmx, без всяких vcl. Из последних - отчетные формы в приложении на android. В приложении из больше двух десятков. Вот видео http://www.youtube.com/watch?v=x3bOYzP7N6k, в нем две формы отчетности (данные и наименования изменены специально). Первая "упрощенная", вторая более значимая. Работники компании пользуются каждый день и в день по несколько десятков раз. От начальства до среднего персонала. Смарт у меня не рутованый поэтому проект перегнал в Вин и потом снял видео, но на телефоне всё выглядит очень сексуально. Так что не знаю, кому как. Я вот начал и закончил уже много проектов. Да, есть проблемы, но fmx дает гораздо больше возможностей, в плане интерфейса. И это важно. А с проблемами так или иначе со временем справляемся. На VCL некоторых вещей вообще нельзя было сделать, коли на то пошло.
×
×
  • Создать...