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

Barbanel

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

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

  • Посещение

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

    36

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

  1. Haha
    Barbanel получил реакцию от FREEFAR в TWebBrowser. Убрать горизонтальный скрол, убрать вертикальный скрол   
    Рендерьте браузер в картинку, и показывайте вместо него это картинку. Выделение не будет работать, скролл тоже)))
  2. Like
    Barbanel получил реакцию от Ingalime в TTabControl не коректно растягивает меню на широкоформатных экранах(18:9)   
    Попробуйте посмотреть стиль с максимальным разрешением (scale=3.0) для Табов. Возможно там что-то съехало.
    Берлин вообще грешит такими сдвигами в стилях.
  3. Like
    Barbanel отреагировална x11 в Ориентация SDK на Android 8 и выше   
    Надеюсь, что кому-нибудь пригодятся статьи о том, как сделать приложение с поддержкой новых версий Андроида:
    Ориентация на Android 8 и выше
    http://delphiworlds.com/2018/05/targeting-android-8-and-higher/
    http://delphiworlds.com/2018/06/targeting-android-8-and-higher-continued/
     
  4. Like
    Barbanel получил реакцию от Ingalime в IOS: Exception class 6   
    Порвался сначала сказать: да легко, у меня стоят разные версии)
    Ан нет. Стоят только разные версии Command Line Tools, а сем xCode - актуальной версии.
    Полагаю что если нужны разные версии - то через виртуалку.
    PS Не эксперт, все имхо.
  5. Like
    Barbanel отреагировална r@di0 в Специальные разрешения   
    Вы вообще пробовали приведенный код? Он не имеет отношения к WakeLock, а как раз добавляет приложение в WhiteList.
    Если Вы хотите сделать "неубиваемое" приложение, то Вам не получится обойтись каким-то легким решением. Особенно если приложению необходимо использовать сеть. Почитайте про doze mode.
    Можете ещё посмотреть эту статью: http://delphiworlds.com/2018/01/monitoring-location-updates-on-android/
    Там предпринята попытка сделать подобное "неубиваемое" приложение.
  6. Haha
  7. Like
    Barbanel отреагировална krapotkin в Мультивопрос по мобильным платформам: хранение изображений, загрузка изображений из сети, правильная организация приложения (создание форм, фреймов, объектов)   
    идея в том, что если сложная (+-) формочка, то она не очень предсказуемо скроллится. тогда мы можем сделать скриншот любого компонента, или всей формы в mouseDown
    далее например так
    выводим TImage c полученным скриншотом поверх всего
    на заднем плане меняем фрейм или что там еще на новый
    тем временем по mouseMove сдвигаем TImage. Получается эффект листания страницы как в читалке, но без применения TabControl
  8. Like
    Barbanel отреагировална krapotkin в Мультивопрос по мобильным платформам: хранение изображений, загрузка изображений из сети, правильная организация приложения (создание форм, фреймов, объектов)   
    так PageControl же )) грубый вариант - это просто отлавливать жест и по окончанию жеста делать ActionNextTab
    если повозиться - с помощью мгновенно изготовленного скриншота можно добиться эффекта свайпа для любого фрейма.
  9. Like
    Barbanel получил реакцию от Ingalime в IOS: Exception class 6   
    А в симуляторе работает?
  10. Like
    Barbanel получил реакцию от Alex7wrt в Мультивопрос по мобильным платформам: хранение изображений, загрузка изображений из сети, правильная организация приложения (создание форм, фреймов, объектов)   
    Я бы сам присоединился к такому вопросу.
    Советовать не стану, расскажу лишь как мы сделали.
    Иконки для кнопок, их цвета и прочее что относится к внешнему виду/интерфейсу мы вставили в стили, конкретнее - прямо на битмап темы приложения.
    Изображения же, типа там фоток, примеров из "что нового" вставили в imageList, причем все используемые imageList вынесены в отдельный DataModule.
    Мы получаем только текст и сразу парсим, соотв. храним в оперативке, нам нет смысла писать на диск. 
    Тут можно разводить холивары.
    Мы перенесли опыт настольной разработки - создаем формы по мере необходимости. Плюс очевиден, но он же автоматически имеет и минус - когда вам эта форма понадобится, ее создание занимает время, и иногда это заметно.
    В целом у нас одна главная форма с табконтролом и отключенными вкладками, по мере необходимости мы переключаем табы и их порядок, это позволяет анимировать переходы с одной "формы" т.е. вкладки на другую.
    Ембаркадеро советует использовать object.DisposeOf() вместо object.Free() так и делаем. Минусов не обнаружили (или не заметили).
    Попробуйте поэкспериментировать с другими контролами, ListView или ListBox. Они все позволяют использовать стили для элементов списка (имхо, могу ошибаться).
    Мы используем TListBox (что не рекомендуется данным форумом) и кидаем стили на элементы списка (лид сказал оставляем так, потом будем решать).
    Ну, это не запрещено)))
    Попробуйте дженерики, удобная фича. Пример нужен?
     
    PS. это все имхо, я с удовольствием послушаю коллег.
  11. Like
    Barbanel получил реакцию от Ingalime в Мультивопрос по мобильным платформам: хранение изображений, загрузка изображений из сети, правильная организация приложения (создание форм, фреймов, объектов)   
    Я бы сам присоединился к такому вопросу.
    Советовать не стану, расскажу лишь как мы сделали.
    Иконки для кнопок, их цвета и прочее что относится к внешнему виду/интерфейсу мы вставили в стили, конкретнее - прямо на битмап темы приложения.
    Изображения же, типа там фоток, примеров из "что нового" вставили в imageList, причем все используемые imageList вынесены в отдельный DataModule.
    Мы получаем только текст и сразу парсим, соотв. храним в оперативке, нам нет смысла писать на диск. 
    Тут можно разводить холивары.
    Мы перенесли опыт настольной разработки - создаем формы по мере необходимости. Плюс очевиден, но он же автоматически имеет и минус - когда вам эта форма понадобится, ее создание занимает время, и иногда это заметно.
    В целом у нас одна главная форма с табконтролом и отключенными вкладками, по мере необходимости мы переключаем табы и их порядок, это позволяет анимировать переходы с одной "формы" т.е. вкладки на другую.
    Ембаркадеро советует использовать object.DisposeOf() вместо object.Free() так и делаем. Минусов не обнаружили (или не заметили).
    Попробуйте поэкспериментировать с другими контролами, ListView или ListBox. Они все позволяют использовать стили для элементов списка (имхо, могу ошибаться).
    Мы используем TListBox (что не рекомендуется данным форумом) и кидаем стили на элементы списка (лид сказал оставляем так, потом будем решать).
    Ну, это не запрещено)))
    Попробуйте дженерики, удобная фича. Пример нужен?
     
    PS. это все имхо, я с удовольствием послушаю коллег.
  12. Like
    Barbanel отреагировална ENERGY в Индикатор замирает во время создания объектов в ScrollBox'е   
    Лучше не наследоваться в отдельный класс от TThread, как это делалось раньше в Delphi.
    Это громоздкий и запутанный код. 
    Лучше используйте анонимные потоки. Вот вам шаблон:
     
    http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
    TThread.CreateAnonymousThread(     procedure     begin  // выполняется в потоке       TThread.Queue(nil,         procedure         begin   /// выполняется в главном потоке, когда завершиться анонимный поток.         end);     end   ).Start; procedure TForm5.Button3Click(Sender: TObject); begin   TThread.CreateAnonymousThread(procedure ()   begin          // выполняется в потоке         TThread.Synchronize (TThread.CurrentThread,           procedure ()           begin  // выполняется в главном потоке, но при этом анонимный поток еще продолжит работать, но сейчас приостановлен           end);   end).Start; end;
    И помните что с элементами GUI нельзя работать из другого потока, только из главного ( TThread.Queue,  TThread.Synchronize). Иначе будет Access Violation, который будет выскакивать случайным образом.
  13. Like
    Barbanel отреагировална gateofdenied в Данные из ClipBoard с форматированием   
    В общем разобрался. 
    Вдруг кому пригодится
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      buf: array[0..60] of Char;
      n: Integer;
      fmt: Word;
      H: THandle;
      P: PAnsiChar;
      S:UnicodeString;
    begin
      for n := 0 to Clipboard.FormatCount - 1 do
      begin
        fmt := Clipboard.Formats[n];
        Clipboard.Open;
        if GetclipboardFormatName(fmt, buf, Pred(Sizeof(buf))) <> 0 then
          begin
              begin
                 H := Clipboard.GetAsHandle(fmt);
                 P := GlobalLock(H);
                 S:=UnicodeString(P);
                 Memo1.Lines.Add(P);
                 GlobalUnlock(H);
              end;
          end;
        Clipboard.Close;
      end;
    end;
  14. Like
    Barbanel получил реакцию от Равиль Зарипов (ZuBy) в Как сделать чтобы форму нельзя было активировать?   
    Посмотрите пример, о таком поведении я говорил в самом начале.
    В нем есть две формы, главная и второстепенная. На второстепенной я для наглядности отображаю гиф (по рецепту нашего китайского коллеги, да)))
    В главной форме я динамически создаю второстепенную и отключаю в ней реакцию на мышь, при этом гиф продолжает нормально крутиться во второй форме.
    Вы должны сами заботиться о координатах и видимости второстепенной формы.
    процедура SetMouse_Unsenitive - отключает реакцию на мышь,
    процедура SetMouse_Senitive- включает обратно реакцию на мышь.
    TransparentWindow.zip
  15. Like
    Barbanel отреагировална des80 в Как сделать чтобы форму нельзя было активировать?   
    Спасибо большое! Это именно то что нужно, а я уже тут начал менять стандартный модуль FMX.Platform.Win, но ваш способ проще и красивей
  16. Like
    Barbanel получил реакцию от Евгений Корепов в Выполнение операции после скрытия меню   
    Процедура Invalidate не перерисовывает форму немедленно, она лишь добавляет сообщение на перерисовку в очередь сообщений.
    Соотв. форма перерисуется когда не будет других событий в очереди, в данном случае - после всех длительных операций или после вызова .ProcessMessages
  17. Like
    Barbanel отреагировална krapotkin в Выполнение операции после скрытия меню   
    есть более интересный и по-мне, более правильный способ
    по нажатию в меню не сразу выполняете что-то, а ЗАПИСЫВАЕТЕ действие, которое ВЫПОЛНИТСЯ по событию закрытия мультивью
    тогда реакция наступает визуально правильная и дальше крутите колеса, запускайте потоки и все такое
  18. Like
    Barbanel получил реакцию от FREEFAR в Фильтрация по датам полей ???   
    As i understand, compare of two strings with date inside will work  correctly, if date saved in format YYYY-MM-DD
    With Time in format HH:MM:SS it have to be similar.
  19. Like
    Barbanel отреагировална r@di0 в Специальные разрешения   
    Такое поведение на Андроиде с 5 версии.
    function GetPowerManager: JPowerManager; var PowerServiceNative: JObject; begin PowerServiceNative := TAndroidHelper.Context.getSystemService (TJContext.JavaClass.POWER_SERVICE); if not Assigned(PowerServiceNative) then raise Exception.Create('Could not locate Power Service'); Result := TJPowerManager.Wrap((PowerServiceNative as ILocalObject) .GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Power Manager'); end; //Intent: JIntent; if TJBuild_VERSION.JavaClass.SDK_INT >= 23 then begin pw := GetPowerManager; if Assigned(pw) then if not pw.isIgnoringBatteryOptimizations (StringToJString('ВАШ ПАКЕТ')) then begin Intent := TJIntent.Create; try Intent.setAction (TJSettings.JavaClass. ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); Intent.setData(TJnet_Uri.JavaClass.parse (StringToJString('package:ВАШ ПАКЕТ'))); TAndroidHelper.Context.startActivity(Intent); except on e: Exception do fgToast(e.Message, 3); end; end; end;  
  20. Like
    Barbanel отреагировална elxanders в Ошибка linking в 32 бит   
    Если кто столкнется - проблема обнаружилась в наличии статического массива в модуле. Решилась определением массива как динамического и установкой размера в секции инициализации.
  21. Like
    Barbanel отреагировална Fedor K в JAVA и Delphi   
    @Pavel M, Судя по вашей обертке класса и самой JAR:
     Нужно удалить все не статические методы из описания интерфейса наследуемого от JObjectClass: JUserClass = interface(JObjectClass) ['{A4B29440-8C8B-4C1F-A8E7-B7612D4FEEB4}'] function init(uuid : JString; secondName : JString; firstName : JString; inn : JString; phone : JString; pin : JString; roleUuid : JString; roleTitle : JString) : JUser; cdecl; overload; function init(uuid : JString; secondName : JString; firstName : JString; phone : JString; pin : JString; roleUuid : JString; roleTitle : JString) : JUser; cdecl; overload; end; У класса User нету конструктора по умолчанию, поэтому вызов такого кода вызовет ошибку: //неправильный вариант с ошибкой TestClass := TJUser.Create; //правильный вариант TestClass := TJUser.JavaClass.init( StringToJString('uuid'), StringToJString('secondName'), StringToJString('firstName'), StringToJString('phone'), StringToJString('pin'), StringToJString('roleUuid'), StringToJString('roleTitle') );  
    Если к проекту подключаете любые JAR файлы, то следите, чтобы вместе с ними были подключены и все остальные .jar библиотеки с классами, на которые ссылаются исходники. Например, в Вашем примере при вызове вышеприведенного конструктора первым делом выскочит ошибка:
    Вам нужно найти все такие подключения и найти сборки, в которых они валяются:

    Если в проекте в Android Studio включено копирование всех сторонних библиотек в папку libs, то после компиляции всего преокта практически все либы можно найти:
    папка libs; output папке проекта; папка Android SDK. п.с. Тему лучше перенести в раздел Android, так больше шансов получить помощь.
  22. Like
    Barbanel отреагировална krapotkin в деструктор своего компонента   
    тут много чего хочется прямо поправить
    самое первое - убрать в классе TForm1 ссылки на экземпляр этого класса Form1
    2. отказаться от idHTTP в пользу THttpClient
    3. release обычно не требуется. если все написано хорошо, то FreeAndNil() самое то. а если плохо, то до конца все равно не спасет
    4. архитектурно не очень идея визуальному компоненту привинчивать насмерть невизуальный функционал, ну да бог с ним
    5. не надо думать что Potok.Terminate вообще хоть что-то делает, кроме как Potok.Terminated:=True. Это если у вас в Execute цикл, вы можете проверять if Terminated then exit... не  более того.
    6. если вы создаете компоненты динамически, то держите ссылки на них у себя, чтобы не делать for i := Form1.RoomsScrollBox.ComponentCount-1 if ...
    7. концепция потока и его родителя должна быть такова: подразумеваем, что поток может пережить родителя, поэтому почаще надо проверять, if terminated то ничего не делая поскорее выходить из потока...
    8. при уничтожении компонента нужно не только убить его FreeAndNil(component), но сначала compjnent.Parent := NIL;
    при соблюдении этих правил не требуется абсолютно никаких извращений при проектировании 
  23. Like
    Barbanel отреагировална ENERGY в TBitmapListAnimation на iOS не правильно делит картинки   
    Вобщем проблема в том, что при количестве кадров  > 60 - 70, с анимацией на iOS начинают происходить странные вещи.
    В моем случае 120 кадров в одной анимации. Причем можно менять и разрешения каждого кадра, количество raws, это не особо влияет на наличие артефактов, только на их эффекты.
    Решение - делим анимацию на 2 части по 60 кадров. 2 bitmapListAnimation. В OnFinish  первого листа -
    BootAnimation1.Enabled := false;
    BootAnimation1.Parent := nil;
    BootAnimation2.Parent := Image1;
    BootAnimation2.Enabled := true; 
  24. Like
    Barbanel отреагировална elGringo в TListBox. Исключить нажатия на прокрутке. Как?   
    Решил свой вопрос. 
    ListViewItem.Selectable:=false;
    Обработку итемов вынес в OnTap  ListViewItem
     
    Теперь прокручивается без активации итемов. А на тапе по итему - обработка контролов.
     
  25. Thanks
    Barbanel получил реакцию от elGringo в Черная полоса, при выравнивании панели в Bottom или Top   
    К сож. нет примера с момо перед глазами.
    Суть такова: вы перебираете каждый элемент стиля мемо.
    Штука в том, элемент стиля может также использовать стиль.
    Вам нужно найти используемый стиль стиля))) и смотреть его.
     
    ЗЫ. Эмбаркадеро: Мы сделали вам стили, чтобы бы могли применять стили пока разрабатываете стили)))))
×
×
  • Создать...