![](https://fire-monkey.ru/uploads/set_resources_12/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
Kitty
-
Постов
792 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Активность репутации
-
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
-
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
-
Kitty отреагировална Brovin Yaroslav в Разработка настольной версии клиента для форума по FireMonkey с использованием FireMonkey
Обновил представление темы:
-
Kitty отреагировална bigjorj в TvPro - телепрограмма
Добавлю и я
Телепрограмма. Просмотр текста программы передач на Android.
https://play.google.com/store/apps/details?id=com.tvday.TvProMobile
-
Kitty отреагировална Кривяков Виталий в Splash Form не отображается
Добрый день!
Firemonkey имеет много отличий в работе от VCL. Одно из них связано с порядком создания форм. Когда в модуле проекта вы видите код:
Application.CreateForm(TfrmDM, frmDM);
То это не означает, что форма или модуль будут созданы в в момент исполнения этого вызова, вместо этого программа запомнит, что нужно создать такую форму TfrmDM и поместить указатель на нее в frmDM. Реальное создание форм произойдет при выполнении Application.Run. Поэтому, все обращения к "созданным" формам и модулям в модуле проекта приведет к ошибке.
Чем еще FM занимается до реального создания основной формы - одним разработчикам известно, и я бы поостерегся выполнять какие либо действия связанные с отрисовкой форм в модуле приложения.
Набросал пример, посмотрите, возможно такое решение вам подойдет.
SplashDemo.zip
-
Kitty отреагировална Brovin Yaroslav в [Android] Как написать обертку для своих Java классов?
Добрый день,
Не пишите руками обертки, это долгий труд. В XE7 появилась специальная утилита для генерации всех оберток по jar файлу. Утилита генерации pas файлов для AndroidAPI из jar файлов
Я думаю она избавит вас от необходимости думать о том, как транслировать java классы.
-
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
-
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 видел.
-
Kitty отреагировална AngryOwl в Целесообразно ли использовать Synchronize для отрисовки
Сталкивались. По началу очень много))
Приложение, активно использующее GUI, то бишь всякие прогресс-бары, видео, большое кол-во элементов с картинками и т.д. и т.п., требует обязательного использования TThread.Synchronize.
Иначе вы можете сначала ничего не заметить, может не быть никаких глюков и т.п.. А потом они могут так же внезапно появиться. Может быть такое, что у Вас их не будет (глюков), а на другом компе - будут. Может зависеть от множества факторов.
НО!
Стоит отметить, что если тот или иной элемент интерфейса не требует именно "моментального" отображения информации (например простое отображение нового значения TLabel), и в данный момент у Вас не происходит ничего активного на форме приложения (например - вывод видео или частая смена картинок и т.п.), то, конечно, делать синхронизацию не обязательно. Однако, это может привести в дальнейшем к непониманию возникновения багов, в том случае если ваш код изменится и появится что-то "тяжелое" для отрисовки.
Эти баги могут быть не явными. Т.е. вы, например, делаете обновление TLabel при "загрузке" чего-либо и обновлении TProgressBar, а текст (новое значение) не отображается. А вот если сделать обновление TLabel и TProgressBar в TThread.Synchronize, то все будет ок.
Тут есть еще одно НО )))
Оно заключается в том, чтобы процесс "обновления" был оптимизирован. Это как слишком частый вызов Application.ProcessMessage в процедуре выполняющий вычисления - будут приличные тормоза!
Пишите код оптимально. Не делайте лишних вызовов TThread.Synchronize, но и не забывайте о них...
Как-то так)
-
Kitty отреагировална Равиль Зарипов (ZuBy) в [fmx] XML RPC API
XML RPC API - модуль для работы с форумом fire-monkey.ru
Реализованы все методы (спасибо Ярославу Бровину)
модуль кроссплатформенный, для Windows можно использовать MSXML, также поддерживается OXml для мобильных платформ
XML RPC API.zip
-
Kitty отреагировална Brovin Yaroslav в Разработка настольной версии клиента для форума по FireMonkey с использованием FireMonkey
Пока план такой. Сделать нормальный настольный клиент. А потом адаптировать под мобильный версии. Но адаптация скорее всего будет написание отдельного UI. Так как идеалогии разные. Но для iOS и Android скорее всего клиент будет один.
-
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 в глобальную переменную и по таймеру удаляю Итем по индексу, потом выключаем таймер. Незнаю на сколько это правильно, но все работает и меня устраивает. В проекте выше есть
-
Kitty отреагировална Brovin Yaroslav в Разработка настольной версии клиента для форума по FireMonkey с использованием FireMonkey
Приступил к разработке клиента с использованием FireMonkey для форума. В будущем код будет открытым и каждый сможет посмотреть, как реализованы те или иные вещи.
А пока пара скриншотов:
-
Kitty отреагировална Brovin Yaroslav в лицензионное соглашение для компонентов?
Модифицируйте на здоровье. Мне не жалко :-)
-
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; -
Kitty отреагировална Brovin Yaroslav в [Вебинар] Новый подход к разработке компонентов FireMonkey в RAD Studio XE8. Часть 2
Выложена запись вебинара. Смотрите предыдущее сообщение.
-
Kitty отреагировална Alex Bozhko в Хранения набора данных
Действительно, немного странный вопрос. Подключите модуль DB и используйте TDataSet на здоровье. TClientDataSet тоже можно использовать. А можно TFDMemTable из FireDAC.
-
Kitty отреагировална Martifan в Как поменять надписи для кнопок в MessageDlg?
Извините я сам нашел решение если кому пригодится:
1. находим файл FMX.Consts.pas
2. Положи его в папку с проектом.
3. Menu Project->Add to Project - добавь этот файл.
4. Сохрани проект. Закрой проект. Открой проект заново.
5. Menu -> Project -> Build All Project
6. Запускаем.
-
Kitty отреагировална Brovin Yaroslav в С чего начать для использования Yandex.Money из Delphi?
Возможно.
Но готовой библиотеки я не видел. Поэтому, решение такое:
Читаем документацию по работе с Yandex.Money Используем существующие в Delphi REST для взаимодействия с Яндекс.Деньгами. Формируем требуемые запросы и разбираем полученные результаты. -
Kitty отреагировална Martifan в [Android] Не отображается карта в приложении
я вам вернул проект и причина у вас 2 из за чего не работала у вас проект:
1) надо правильно создать API KEY я для вас создал и указал проекте
2) для того чтобы получить результат надо указать координаты у вас не было указана
в общем там все сделано посмотрите видеть вопросы пишите
удачного дня
-
Kitty отреагировална Andrey Efimov в [Отклонение] ListView1 не отображает данные при старте
Замечал подобное в Листбоксе (в XE7 работало нормально, в XE8 всё сломалось), спасался вроде методом "repaint" (нет под рукой проекта, посмотреть)
-
Kitty отреагировална Alex7wrt в [Отклонение] ListView1 не отображает данные при старте
Здравствуйте.
Если не касаться вопроса глюков самой XE8, то я бы посоветовал попробовать в событии OnResize формы вызывать метод ListView1.Repaint.
P.S. У меня в XE8 тоже глюки, правда другого плана.
-
-
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 отрабатываем дальше -
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.