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

Kitty

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

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

  • Посещение

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

    16

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

  1. Like
    Kitty получил реакцию от Andrey Efimov в Release Notes for XE8 Update 1   
    Release Notes for XE8 Update 1
    http://docwiki.embarcadero.com/RADStudio/XE8/en/Release_Notes_for_XE8_Update_1
    fix list:
    http://edn.embarcadero.com/article/44470
     
  2. Like
    Kitty получил реакцию от Brovin Yaroslav в Release Notes for XE8 Update 1   
    Release Notes for XE8 Update 1
    http://docwiki.embarcadero.com/RADStudio/XE8/en/Release_Notes_for_XE8_Update_1
    fix list:
    http://edn.embarcadero.com/article/44470
     
  3. Like
  4. Like
    Kitty отреагировална bigjorj в TvPro - телепрограмма   
    Добавлю и я
     
    Телепрограмма. Просмотр текста программы передач на Android.
     
     
    https://play.google.com/store/apps/details?id=com.tvday.TvProMobile
  5. Like
    Kitty отреагировална Кривяков Виталий в Splash Form не отображается   
    Добрый день!
     
    Firemonkey имеет много отличий в работе от VCL. Одно из них связано с порядком создания форм. Когда в модуле проекта вы видите код:
     
    Application.CreateForm(TfrmDM, frmDM);
     
    То это не означает, что форма или модуль будут созданы в в момент исполнения этого вызова, вместо этого программа запомнит, что нужно создать такую форму TfrmDM и поместить указатель на нее в frmDM. Реальное создание форм произойдет при выполнении Application.Run. Поэтому, все обращения к "созданным" формам и модулям в модуле проекта приведет к ошибке.
    Чем еще FM занимается до реального создания основной формы - одним разработчикам известно, и я бы поостерегся выполнять какие либо действия связанные с отрисовкой форм в модуле приложения.
    Набросал пример, посмотрите, возможно такое решение вам подойдет.
    SplashDemo.zip
  6. Like
    Kitty отреагировална Brovin Yaroslav в [Android] Как написать обертку для своих Java классов?   
    Добрый день,
     
    Не пишите руками обертки, это долгий труд. В XE7 появилась специальная утилита для генерации всех оберток по jar файлу. Утилита генерации pas файлов для AndroidAPI из jar файлов
     
    Я думаю она избавит вас от необходимости думать о том, как транслировать java классы.
  7. Like
    Kitty отреагировална Brovin Yaroslav в Целесообразно ли использовать Synchronize для отрисовки   
    Под андроидом нужно понимать, что есть следующие потоки:
    Main Thread - поток в Delphi, в котором все выполняется. Он же UI Thread в Delphi, в котором происходит отрисовка. UI Thread Java - поток на стороне Java, в котором выполняется отрисовка и работа со всеми нативными контролами. UI Thread Java <> UI Thread Delphi. То есть, если вы работаете с нативными контролами из Java, то вам нужно с ними работать из Java UI Thread. Для это нужно использовать методы из FMX.Helpers.Android:
    procedure CallInUIThread(AMethod: TMethodCallback); overload; procedure CallInUIThread(AMethod: TCallBack); overload; procedure CallInUIThreadAndWaitFinishing(AMethod: TMethodCallback); overload; procedure CallInUIThreadAndWaitFinishing(AMethod: TCallBack); overload; Если же вы работаете с FMX графикой, до достаточно выполнять обычный TThread.Synchronize и Queen
  8. Like
    Kitty отреагировална serser в Целесообразно ли использовать Synchronize для отрисовки   
    Исходя из реализации TCanvasGpu:
    function TCanvasGpu.DoBeginScene(const AClipRects: PClipRects; AContextHandle: THandle): Boolean; begin if FGlobalBeginScene = 0 then begin FCanvasHelper.SetContext(Context); FCanvasHelper.BeginRender; TTextLayoutNG.BeginRender; end else begin FCanvasHelper.Flush; FCanvasHelper.SetContext(Context); FContext.SetMatrix(TMatrix3D.Identity); FContext.SetContextState(TContextState.cs2DScene); FContext.SetContextState(TContextState.csAllFace); FContext.SetContextState(TContextState.csZWriteOff); FContext.SetContextState(TContextState.csZTestOff); end; Inc(FGlobalBeginScene); FSaveCanvas := FCurrentCanvas; if Assigned(FSaveCanvas) and FSaveCanvas.FClippingEnabled then FSavedScissorRect := FCanvasHelper.ScissorRect; FCurrentCanvas := Self; Result := inherited DoBeginScene(AClipRects) and Assigned(FContext) and FContext.BeginScene; if Result then begin FClippingEnabled := False; FCurrentClipRect := TRect.Create(0, 0, Width, Height); FCanvasHelper.ResetScissorRect; FCanvasHelper.UpdateDrawingMode; end; end; В частности из условия второго и последующих вхождений в DoBeginScene: if FGlobalBeginScene = 0 then ... else ...
    выходит, что если вошли второй раз, то происходит какой-то FCanvasHelper.Flush куда-то. Возможно и суммарная картинка отобразится. Надо пробовать.
     
    Но скорее всего сначала все-таки промелькнет первая отрисованная сцена, а за ней вторая, но уже без изменений в первой сцене. Да, для одновременного рисования на одной канве наверное нужны методы блокировки части изображения. По-моему такие то ли в winapi, то ли в gdi видел.
  9. Like
    Kitty отреагировална AngryOwl в Целесообразно ли использовать Synchronize для отрисовки   
    Сталкивались. По началу очень много))
     
    Приложение, активно использующее GUI, то бишь всякие прогресс-бары, видео, большое кол-во элементов с картинками и т.д. и т.п., требует обязательного использования TThread.Synchronize.
    Иначе вы можете сначала ничего не заметить, может не быть никаких глюков и т.п.. А потом они могут так же внезапно появиться. Может быть такое, что у Вас их не будет (глюков), а на другом компе - будут. Может зависеть от множества факторов.
    НО!
    Стоит отметить, что если тот или иной элемент интерфейса не требует именно "моментального" отображения информации (например простое отображение нового значения TLabel), и в данный момент у Вас не происходит ничего активного на форме приложения (например - вывод видео или частая смена картинок и т.п.), то, конечно, делать синхронизацию не обязательно. Однако, это может привести в дальнейшем к непониманию возникновения багов, в том случае если ваш код изменится и появится что-то "тяжелое" для отрисовки.
    Эти баги могут быть не явными. Т.е. вы, например, делаете обновление TLabel при "загрузке" чего-либо и обновлении TProgressBar, а текст (новое значение) не отображается. А вот если сделать обновление TLabel и TProgressBar в TThread.Synchronize, то все будет ок.
    Тут есть еще одно НО )))
    Оно заключается в том, чтобы процесс "обновления" был оптимизирован. Это как слишком частый вызов Application.ProcessMessage в процедуре выполняющий вычисления - будут приличные тормоза!
    Пишите код оптимально. Не делайте лишних вызовов TThread.Synchronize, но и не забывайте о них...
     
    Как-то так)
  10. Like
    Kitty отреагировална Равиль Зарипов (ZuBy) в [fmx] XML RPC API   
    XML RPC API - модуль для работы с форумом fire-monkey.ru
     
    Реализованы все методы (спасибо Ярославу Бровину)
     
    модуль кроссплатформенный, для Windows можно использовать MSXML, также поддерживается OXml для мобильных платформ
     
    XML RPC API.zip
  11. Like
    Kitty отреагировална Brovin Yaroslav в Разработка настольной версии клиента для форума по FireMonkey с использованием FireMonkey   
    Пока план такой. Сделать нормальный настольный клиент. А потом адаптировать под мобильный версии. Но адаптация скорее всего будет написание отдельного UI. Так как идеалогии разные. Но для iOS и Android скорее всего клиент будет один.
  12. Like
    Kitty отреагировална zairkz в argument out of range   
    Что то я по описанию не увидел проблему, сделал проект такой же все работает TestLV
     
    Вызываю очищение и добавления ListView по нажатию ListBoxItem'a.
    while ListView1.ItemCount>0 do ListView1.Items.Delete(0);
     
    ListView1.BeginUpdate;
       for i := 0 to 50 do ListView1.Items.Insert(0).Text:='Text - '+i.ToString;
    ListView1.EndUpdate;
     
    На счет удаления из ListView компонента по нажатию, то есть из самого себя, есть проблемка, не сбрасывается ссылка на Item, пришлось обходить её через таймер (1 мс)
    Сохраняю Aitem.index в глобальную переменную и по таймеру удаляю Итем по индексу, потом выключаем таймер. Незнаю на сколько это правильно, но все работает и меня устраивает. В проекте выше есть
  13. Like
    Kitty отреагировална Brovin Yaroslav в Разработка настольной версии клиента для форума по FireMonkey с использованием FireMonkey   
    Приступил к разработке клиента с использованием FireMonkey для форума. В будущем код будет открытым и каждый сможет посмотреть, как реализованы те или иные вещи.
    А пока пара скриншотов:

  14. Like
    Kitty отреагировална Brovin Yaroslav в лицензионное соглашение для компонентов?   
    Модифицируйте на здоровье. Мне не жалко :-)
  15. Like
    Kitty отреагировална enatechno в Как для колонок TStringGrid задавать разные шрифты?   
    по аналогии с этой темой
    procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;   const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;   const Row: Integer; const Value: TValue; const State: TGridDrawStates); var   aTextRect:   TRectF;   aTextLayout: TTextLayout; begin   aTextRect := Bounds;   aTextRect.Right := Round(aTextRect.Right) + 2;  // убираем вертикальную линию сетки   aTextRect.Bottom := Round(aTextRect.Bottom) - 1;   // оставляем горизонтальную   Canvas.FillRect(aTextRect, 0, 0, AllCorners, 1);   if StringGrid1.Selected = Row then     Canvas.ClearRect(aTextRect, claAquamarine); // красим выделенную строку   aTextLayout := TTextLayoutManager.DefaultTextLayout.Create;   try     aTextLayout.BeginUpdate;     try       aTextLayout.WordWrap := False;       aTextLayout.Opacity := Column.AbsoluteOpacity;       aTextLayout.Trimming := TTextTrimming.Character;       aTextLayout.TopLeft := aTextRect.TopLeft;       aTextLayout.Text := Value.ToString;       aTextLayout.MaxSize := PointF(aTextRect.Width, aTextRect.Height);       if Column.Index = 0 then       begin         aTextLayout.Font.Family := 'Times New Roman'; // меняем шрифт колонки         aTextLayout.Color := claBrown;       end;       if Column.Index = 1 then       begin         aTextLayout.Font.Size := 18; // меняем шрифт другой колонки         aTextLayout.Font.Style := [TFontStyle.fsBold];       end;     finally       aTextLayout.EndUpdate;     end;     aTextLayout.RenderLayout(Canvas);   finally     aTextLayout.Free;   end; end;
  16. Like
    Kitty отреагировална Brovin Yaroslav в [Вебинар] Новый подход к разработке компонентов FireMonkey в RAD Studio XE8. Часть 2   
    Выложена запись вебинара. Смотрите предыдущее сообщение.
  17. Like
    Kitty отреагировална Alex Bozhko в Хранения набора данных   
    Действительно, немного странный вопрос. Подключите модуль DB и используйте TDataSet на здоровье. TClientDataSet тоже можно использовать. А можно TFDMemTable из FireDAC.
  18. Like
    Kitty отреагировална Martifan в Как поменять надписи для кнопок в MessageDlg?   
    Извините я сам нашел решение если кому пригодится:
     
    1. находим файл FMX.Consts.pas
    2. Положи его в папку с проектом.
    3. Menu Project->Add to Project - добавь этот файл.
    4. Сохрани проект. Закрой проект. Открой проект заново.
    5. Menu -> Project -> Build All Project
    6. Запускаем.
  19. Like
    Kitty отреагировална Brovin Yaroslav в С чего начать для использования Yandex.Money из Delphi?   
    Возможно.
     
    Но готовой библиотеки я не видел. Поэтому, решение такое:
    Читаем документацию по работе с Yandex.Money Используем существующие в Delphi REST для взаимодействия с Яндекс.Деньгами. Формируем требуемые запросы и разбираем полученные результаты.
  20. Like
    Kitty отреагировална Martifan в [Android] Не отображается карта в приложении   
    я вам вернул проект и причина у вас 2 из за чего не работала у вас проект:
    1) надо правильно создать API KEY я для вас создал и указал проекте
    2) для того чтобы получить результат надо указать координаты у вас не было указана
    в общем там все сделано посмотрите видеть вопросы пишите
    удачного дня
  21. Like
    Kitty отреагировална Andrey Efimov в [Отклонение] ListView1 не отображает данные при старте   
    Замечал подобное в Листбоксе (в XE7 работало нормально, в XE8 всё сломалось), спасался вроде методом "repaint" (нет под рукой проекта, посмотреть)
  22. Like
    Kitty отреагировална Alex7wrt в [Отклонение] ListView1 не отображает данные при старте   
    Здравствуйте.
     
    Если не касаться вопроса глюков самой XE8, то я бы посоветовал попробовать в событии OnResize формы вызывать метод ListView1.Repaint.
     
    P.S. У меня в XE8 тоже глюки, правда другого плана. 
  23. Like
  24. Like
    Kitty отреагировална bigjorj в [Android] Системные кнопки в браузере   
    Лови их на форме OnKeyup и выполняй нужные действия. 
     
    Пример:
    procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); var FService: IFMXVirtualKeyboardService; begin if Key = vkHardwareBack then begin TPlatformServices.Current.SupportsPlatformService (IFMXVirtualKeyboardService, IInterface(FService)); if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then begin // Back button pressed, keyboard visible, so do nothing... end else отрабатываем дальше
  25. Like
    Kitty отреагировална Brovin Yaroslav в [Вебинар] Новый подход к разработке компонентов FireMonkey в RAD Studio XE8. Часть 2   
    Тема: Новый подход к разработке компонентов FireMonkey в RAD Studio XE8. Часть 2 Дата и время: 10 июня 2015 года в 12:00 Участники: Денис Васильев и Бровин Ярослав Регистрация: ссылка Участие бесплатное Запись вебинара будет доступна здесь: http://www.youtube.com/playlist?list=PLNexYoB7XRWZv-6QviwJzdRKthKuBR_dG
    В рамках вебинара продолжим знакомство с новым подходом разработки компонентов FireMonkey "Контрол – Модель – Презентация". Создание нативных представлений для iOS. Разберем несколько примеров. 
    В вебинаре примет участие Ярослав Бровин, ведущий разработчик Embarcadero.
     

×
×
  • Создать...