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

Поиск сообщества

Показаны результаты для тегов 'Berlin'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

  1. Товарищи, здравствуйте. Хотел бы проконсультироваться с вами на довольно сложно для меня тему. Имеется клиентское мобильное приложение на Андроид. Принцип его просто, загружает фирмы из БД в scrollbox. За счёт того, что сразу загрузка всех данных из сервера занимает длительное время, было принято решение загружать с сервера только ключевую информацию (название фирмы), а остальную информацию загружать из локальной БД. При этом, т.к. файл БД можно легко вытащить из apk файла любому человеку, размещать всю БД на локалке нельзя. Только информацию в целом не представляющую большой значимости в отдельности от названия фирмы и не только. Вопрос, правильная ли схему построения была выбрана с точки зрения защиты данных (если это так можно назвать), и оптимизации загрузки информации. Приветствуются ваши советы, как лучше построить схему взаимодействия приложения с БД, или как лучше защитить данные. В идеале для быстродействия, загнать побольше данных в локальную БД.
  2. Начал переносить проекты из XE8 в Berlin, столкнулся с странным затыком в простеньком коде - делаем запрос на сайт, получаем куки, делаем post авторизацию, получаем редирект, если все хорошо, то октрываем страницу из header Location. Выяснилось что не смотря на HTTPClient.AllowCookies:=True, в HTTPResponse.Cookies всегда пустота. Пришлось копать исходники. Вот что обнаружилось в source\rtl\net\System.Net.HttpClient.pas: procedure THTTPClient.ExecuteHTTPInternal(const ARequest: IHTTPRequest; const AContentStream: TStream; const AResponse: IHTTPResponse); var LRequest: THTTPRequest; LResponse: THTTPResponse; State: THTTPState; LExecResult: TExecutionResult; LClientCertificateList: TCertificateList; OrigSourceStreamPosition: Int64; OrigContentStreamPosition: Int64; OrigContentStreamSize: Int64; Status: Integer; LCookieHeader: string; begin LResponse := AResponse as THTTPResponse; LRequest := ARequest as THTTPRequest; OrigSourceStreamPosition := 0; if LRequest.FSourceStream <> nil then OrigSourceStreamPosition := LRequest.FSourceStream.Position; if AContentStream <> nil then begin OrigContentStreamPosition := AContentStream.Position; OrigContentStreamSize := AContentStream.Size; end else begin OrigContentStreamPosition := 0; OrigContentStreamSize := 0; end; State := Default(THTTPState); LClientCertificateList := TCertificateList.Create; try while True do begin LRequest.DoPrepare; // Add Cookies if FCookieManager <> nil then begin LCookieHeader := FCookieManager.CookieHeaders(LRequest.FURL); if LCookieHeader <> '' then LRequest.AddHeader('Cookie', LCookieHeader); // do not localize end; if not SetServerCredential(LRequest, LResponse, State) then Break; if not SetProxyCredential(LRequest, LResponse, State) then Break; if LRequest.FSourceStream <> nil then LRequest.FSourceStream.Position := OrigSourceStreamPosition; if LResponse <> nil then begin LResponse.FStream.Position := OrigContentStreamPosition; LResponse.FStream.Size := OrigContentStreamSize; end; LExecResult := DoExecuteRequest(LRequest, LResponse, AContentStream); case LExecResult of TExecutionResult.Success: begin if not SameText(LRequest.FMethodString, sHTTPMethodHead) then LResponse.DoReadData(LResponse.FStream); Status := LResponse.GetStatusCode; case Status of 200: begin Break; // Если запрос удачен, то выходим из цикла end; 401: begin State.Status := InternalState.ServerAuthRequired; end; 407: begin State.Status := InternalState.ProxyAuthRequired; end; else begin case Status of 301..304, 307: if FHandleRedirects and (LRequest.FMethodString <> sHTTPMethodHead) then begin Inc(State.Redirections); if State.Redirections > FMaxRedirects then raise ENetHTTPRequestException.CreateResFmt(@SNetHttpMaxRedirections, [FMaxRedirects]); end else Break; else end; State.Status := InternalState.Other; if DoProcessStatus(LRequest, LResponse) then Break; end; end; end; TExecutionResult.ServerCertificateInvalid: begin DoValidateServerCertificate(LRequest); end; TExecutionResult.ClientCertificateNeeded: begin DoNeedClientCertificate(LRequest, LClientCertificateList); end else raise ENetHTTPClientException.CreateRes(@SNetHttpClientUnknownError); end; if AllowCookies then UpdateCookiesFromResponse(LResponse); // Вот эта, критически важная процедура, при Status=200 никогда не выполняется end; // После выхода из цикла попадаем сюда if LRequest.FSourceStream <> nil then LRequest.FSourceStream.Seek(0, TSeekOrigin.soEnd); LResponse.FStream.Position := OrigContentStreamPosition; finally LClientCertificateList.Free; end; end; Т.е. разработчики исключили выполнение UpdateCookiesFromResponse(LResponse), которая помещает куки из ответа в HTTPClient. А вот код из XE8 который нормально работает с Cookies: function THTTPClient.ExecuteHTTPInternal(const ARequest: IHTTPRequest; const AContentStream: TStream): IHTTPResponse; var LRequest: THTTPRequest; LResponse: THTTPResponse; State: THTTPState; LExecResult: TExecutionResult; LClientCertificateList: TCertificateList; OrigSourceStreamPosition: Int64; OrigContentStreamPosition: Int64; OrigContentStreamSize: Int64; Status: Integer; LCookieHeader: string; begin Result := nil; LResponse := nil; LRequest := ARequest as THTTPRequest; OrigSourceStreamPosition := 0; if LRequest.FSourceStream <> nil then OrigSourceStreamPosition := LRequest.FSourceStream.Position; if AContentStream <> nil then begin OrigContentStreamPosition := AContentStream.Position; OrigContentStreamSize := AContentStream.Size; end else begin OrigContentStreamPosition := 0; OrigContentStreamSize := 0; end; State := Default(THTTPState); LClientCertificateList := TCertificateList.Create; try while True do begin LRequest.DoPrepare; // Add Cookies if FCookieManager <> nil then begin LCookieHeader := FCookieManager.CookieHeaders(LRequest.FURL); if LCookieHeader <> '' then LRequest.AddHeader('Cookie', LCookieHeader); // do not localize end; if not SetServerCredential(LRequest, LResponse, State) then Break; if not SetProxyCredential(LRequest, LResponse, State) then Break; if LRequest.FSourceStream <> nil then LRequest.FSourceStream.Position := OrigSourceStreamPosition; if LResponse <> nil then begin LResponse.FStream.Position := OrigContentStreamPosition; LResponse.FStream.Size := OrigContentStreamSize; end; LExecResult := DoExecuteRequest(LRequest, LResponse, AContentStream); case LExecResult of TExecutionResult.Success: begin if not SameText(LRequest.FMethodString, sHTTPMethodHead) then LResponse.DoReadData(LResponse.FStream); Status := LResponse.GetStatusCode; case Status of 200: begin Break; end; 401: begin State.Status := InternalState.ServerAuthRequired; end; 407: begin State.Status := InternalState.ProxyAuthRequired; end; else begin case Status of 301..304, 307: if FHandleRedirects and (LRequest.FMethodString <> sHTTPMethodHead) then begin Inc(State.Redirections); if State.Redirections > FMaxRedirects then raise ENetHTTPRequestException.CreateResFmt(@SNetHttpMaxRedirections, [FMaxRedirects]); end else Break; else end; State.Status := InternalState.Other; if DoProcessStatus(LRequest, LResponse) then Break; end; end; end; TExecutionResult.ServerCertificateInvalid: begin DoValidateServerCertificate(LRequest); end; TExecutionResult.ClientCertificateNeeded: begin DoNeedClientCertificate(LRequest, LClientCertificateList); end else raise ENetHTTPClientException.CreateRes(@SNetHttpClientUnknownError); end; end; if LRequest.FSourceStream <> nil then LRequest.FSourceStream.Seek(0, TSeekOrigin.soEnd); if AllowCookies then UpdateCookiesFromResponse(LResponse); // Здесь все верно, процедура за пределами цикла и выполняется всегда когда нужно. finally LClientCertificateList.Free; Result := IHTTPResponse(LResponse); end; end; А теперь вопрос: ну как так то? В продукте за 54 тысячи рублей сильно обидно исправлять такие косяки. Такое ощущение что разраб подрабатывал на стороне в проектах на php и забыл переключится на другой язык, там break прерывает работу аналога case и код работал бы правильно.
  3. Господа и товарищи, помогите тупому мне! Столкнулся с странным. Под windows все отлично работает, а под android не могу добиться загрузки картинок. Мозг уже сломал. Собрал тестовый проект - в ListView (DynamicAppearance) добавляем 4 ListViewItem, в ListViewUpdatingObjects все создаем и грузим картинки из инета (потоки и прочее убрал для упрощения). Картанка слева, текст (URL) справа, проще некуда. Прилагаю к сообщению архив проекта и код. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, FMX.ListView, System.Net.HTTPClient, FMX.Objects; type TFormMain = class(TForm) ListView: TListView; procedure ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } ListViewUpdate : Boolean; procedure MyListViewUpdateObjects(const AListView: TListView; const AItem: TListViewItem); procedure InitListView(AListView : TListView); function LoadImageFromURL(AURL : String) : TBitmap; end; var FormMain: TFormMain; implementation {$R *.fmx} procedure TFormMain.FormCreate(Sender: TObject); begin ListViewUpdate:=False; end; procedure TFormMain.FormShow(Sender: TObject); begin InitListView(ListView); end; procedure TFormMain.InitListView(AListView : TListView); Var AListViewItem : TListViewItem; AImageURL : String; begin AImageURL:='http://kayfolom.ru/images/test/'; ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + 'logo.png'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '000487806d3a2ab98aeb2c47b810fc8b.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '0012ef6cb42e95268a4cd1d832a2b93a.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '0022454ccb4f81a701cb3a3c89d52d2f.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); end; procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if Not ListViewUpdate then begin MyListViewUpdateObjects(Sender as TListView, AItem); AHandled:=True; end; end; procedure TFormMain.MyListViewUpdateObjects(const AListView: TListView; const AItem: TListViewItem); Var AName : TListItemText; AImage : TListItemImage; AvailableWidth, ImageWidth, ImageHeight : single; function SetupTextObject(const AName, AText : String; AFontSize : Single; AFontStyles : TFontStyles; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign; ATextAlign, ATextVertAlign: TTextAlign) : TListItemText; begin Result:=TListItemText(AItem.View.FindDrawable(AName)); if Result=Nil then Result:=TListItemText.Create(AItem); Result.Name:=AName; Result.Width:=AWidth; Result.WordWrap:=True; Result.Font.Size:=AFontSize; Result.Font.Style:=Result.Font.Style + AFontStyles; Result.Trimming:=TTextTrimming.None; Result.Text:=AText; Result.PlaceOffset.X:=X; Result.PlaceOffset.Y:=Y; Result.Align:=AAlign; Result.VertAlign:=AVertAlign; Result.TextAlign:=ATextAlign; Result.TextVertAlign:=ATextVertAlign; Result.Height:=AHeight; end; function SetupImageObject(const AName : String; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign) : TListItemImage; Var AImageURL : String; begin Result:=TListItemImage(AItem.View.FindDrawable(AName)); if Result=Nil then begin Result:=TListItemImage.Create(AItem); AImageURL:=AItem.Data['ImageURL'].AsString; Result.Bitmap:=LoadImageFromURL(AImageURL); end; Result.Name:=AName; Result.Width:=AWidth; Result.Height:=AHeight; Result.PlaceOffset.X:=X; Result.PlaceOffset.Y:=Y; Result.Align:=AAlign; Result.VertAlign:=AVertAlign; Result.ScalingMode:=TImageScalingMode.StretchWithAspect; end; begin AvailableWidth:=AListView.Width - AListView.ItemSpaces.Left - AListView.ItemSpaces.Right; // Изображение размещаем слева ImageWidth:=AvailableWidth / 3; ImageHeight:=AvailableWidth / 3; AImage:=SetupImageObject('Image', ImageWidth, ImageHeight, 0, 0, TListItemAlign.Leading, TListItemAlign.Leading); // Текст справа AName:=SetupTextObject('Name', AItem.Data['ImageURL'].AsString, 14, [], AvailableWidth - ImageWidth, ImageHeight, ImageWidth, 0, TListItemAlign.Leading, TListItemAlign.Leading, TTextAlign.Center, TTextAlign.Center); AItem.Height:=Round(ImageHeight + AListView.ItemSpaces.Top + AListView.ItemSpaces.Bottom); end; function TFormMain.LoadImageFromURL(AURL : String) : TBitmap; Var AHTTPClient : THTTPClient; AStream : TMemoryStream; HTTPResponse : IHTTPResponse; begin Result:=Nil; AHTTPClient:=THTTPClient.Create; AStream:=TMemoryStream.Create; try HTTPResponse:=AHTTPClient.Get(AURL, AStream); finally if HTTPResponse.StatusCode=200 then Result:=TBitmap.CreateFromStream(AStream); end; end; end. test092 ListView with Image.7z
  4. Добрый день господа. Уже несколько часов не могу разобраться с медиаплеером, не могу воспроизвести mp3 файл, прошу помощи. В Deployment файл добавлен. uses System.IOUtils; MediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, 'Correct.mp3'); MediaPlayer1.Play; Ошибка: Не поддерживаемый медиа файл. Делал так MediaPlayer1.FileName:=System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath(),'Correct.mp3'); и та же ошибка. А так работает: MediaPlayer1.FileName := 'D:\PRG\app\Slide #11\Sound\Correct.mp3'; Что изменилось в Berlin-е?
  5. rakhmet

    Update 2 + iOS 10.2

    Оказался в крайне идиотской ситуации: единственный iPhone 5s был обновлён до 10.2. Даже не спрашивайте как - рассказать всё равно не смогу, один глаз уже и так дёргается В общем, Xcode 8.0 не работает с iOS 10.2. Обновить старенький Xcode 8.0 я не могу, потому что с обновлённым Xcode 8.2, в свою очередь, не работает Delphi Berlin Update 2. При этом откатить iOS могу максимум до 10.1, но мне нужна минимум iOS 10.0 - просто чтобы хотя бы заткнуть Xcode 8.0 Что можно сделать?
  6. Доброго времени суток. Пишу мобильное приложение на Delphi Berlin. Добавил вибрацию при нажатии на кнопку. На Андроид 4.4.2 все работает нормально, на Андроид 6 при нажатии на кнопку приложение вылетает. Проблема точно в вибрации, так как при отсутствии вибрации все работает нормально. В качестве процедуры вибрации использую следующий код: procedure Vibr; //Процедура вибрации var VibratorObj: JObject; Vibrator: JVibrator; begin VibratorObj := SharedActivity.getSystemService(TJActivity.JavaClass.VIBRATOR_SERVICE); Vibrator := TJVibrator.Wrap((VibratorObj as ILocalObject).GetObjectID); if Vibrator.hasVibrator() then Vibrator.vibrate(200); end; Как по Вашему, в чем может быть причина?
  7. Как избежать повторных нажатий/ закликиваний на кнопку? Имеется следующий код: procedure Tfm.ButtonPrevCardClick(Sender: TObject); begin ButtonPrevCard.Enabled := false; Application.ProcessMessages; // здесь код по смене карты + пауза в 2 секунды ButtonPrevCard.Enabled := true; Application.ProcessMessages; end; Под Windows повторных нажатий/закликиваний при этом не происходит. А под Андроид, если пользователь быстро подряд нажал несколько раз, то сработает также несколько раз.
  8. Pulsarius

    Сортировка в Tool Palette

    Всем привет! У меня такой вопрос. Я настроил порядок сортировки групп компонентов в Tool Palette через Tools -> Options -> Environment Options -> Component Toolbar, но при сохранении настроек и перезапуске студии никаких изменений в Tool Palette не наблюдается, всё равно остаётся дефолтная сортировка. RAD Studio Berlin.
  9. Добрый день. Решил сегодня сделать некоторые доработки в приложение написанное на XE7 под Андроид и столкнулся со следующей проблемой: приложение не получает информацию через связку TIdTCPClient/TIdTCPServer. До этого все работало. Отправляю сообщение с компьютера через TIdTCPClient: try form2.IdTCPClient1.Connect; form2.IdTCPClient1.IOHandler.WriteLn(ss,enUTF8); form2.IdTCPClient1.Disconnect; except showmessage('Error'); end; end;//try получаю (вернее не получаю) на телефоне под Андроид: procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); begin l := AContext.Connection.IOHandler.ReadLn(enUTF8); showmessage(l); end; В чем может быть проблема и как решить?
  10. Доброго времени суток. Есть приложение на Windows (сервер) и есть от 1 до 4 приложений (клиенты) на Андроид. Все устройства в сети. IP адреса клиентов не известны серверу, а адрес сервера клиентам. Приложения после того как узнают адреса друг друга, будут обмениваться сообщениями через TIdTcpClient и TIdTcpServer. Как лучше реализовать распознавание клиентов в сети? Делаю сейчас используя Tethering, но способ мне не нравится.
  11. Ссылка на скачивание (Только для RAD Studio Berlin?fgx_0.7.1.118.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" Описание Эта версия включает в себя следующий набор компонентов: Дизайнер итемов - дизайнер итемов. TfgToast (UPDATED) - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink TfgProgressDialog (UPDATED) - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog (UPDATED) - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet (UPDATED) - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit (UPDATED) - Компонент выбора градиента. TfgLinkedLabel - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. (UPDATED) Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений TfgActionSheet: Добавлен новый вариант темы Theme = Custom и свойство ThemeID, позволяющий для андроида указать идентификатор своей темы диалога. Теперь доступна возможность создать свой вариант диалога для андроида. Изменен порядо срабатывания событий OnCancel, OnHide в реализации на iOS. Раньше срабатывали OnHide -> OnCancel, Теперь: OnCancel -> OnHide Обновлен пример Общие улучшения в читабельности кода TfgProgressDialog, TfgActivityDialog: Добавлен новый вариант темы Theme = Custom и свойство ThemeID, позволяющий для андроида указать идентификатор своей темы диалога. Обновлен пример Общие улучшения в читабельности кода TfgGradientEdit: Добавлено событие OnPointRemoved, срабатывающее, когда точка удалена из градиента. Обновлен пример TfgToast: Исправлена ошибка на iOS, приводящая к AV при многочисленном отображении тостов. (Спасибо Сергею Пьянкову за найденную ошибку) Регистрация стилевых объектов: Теперь регистрируются только те объекты, которые не добавлены в палитру.
  12. Переработал и запустил один из проектов в Берлине. Все хорошо кроме странного бага - не работает перемотка. Оттягивается список и возвращается на место как приклеенный. Всю голову уже сломал, не понимаю как победить. Может кто знает как добиться такого эффекта? Так я пойму как его устранить ;-) Видео прикладываю: https://www.youtube.com/watch?v=R3ESp5RweEY
  13. База mssql 2008 r2 Если кинуть на форму компонент tUniTable (или tUniQuery ) и настроить их на таблицу в которой хоть одно поле integer или float Ошибка bus error. Только под Андроид. В Delphi xe 8 работает без проблем. У кого-то есть такая же проблема ?
  14. Ссылка на скачивание (Только для RAD Studio Berlin): fgx_0.7.1.114.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" FGX - Donate: QIWI: 4890 4941 7671 0929 Yandex.Money: 4100175510891 Описание Эта версия включает в себя следующий набор компонентов: Дизайнер итемов - дизайнер итемов. TfgToast - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink TfgProgressDialog - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений Общие изменения: Пакет для iOS не компилировался из-за использования старого API. Это устранено. (Спасибо StanE не только за сообщенную проблему, но так же и за патч, который он любезно предоставил с исправлением)
  15. Откомпилировав тестовый проект в Berlin для Android (4.3, 5.1), обнаружил, что событие OnSelectCell стало "нестабильным". Т.е. если я делаю Tap по ячейкам StringGrid, то OnTap отрабатывает всегда, а OnSelectCell - не всегда. К тому же иногда нарушается последовательность вызова событий. Последовательность обработки событий в Android была такой (в Seattle и более ранних версиях): 1). OnTap; 2). OnSelectCell. Как лечить? test_SelectCell.rar
  16. Ссылка на скачивание (Только для RAD Studio Berlin): fgx_0.7.1.112.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" FGX - Donate: QIWI: 4890 4941 7671 0929 Yandex.Money: 4100175510891 Описание Эта версия включает в себя следующий набор компонентов: Дизайнер итемов - дизайнер итемов. TfgToast - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink TfgProgressDialog (UPDATED) - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog (UPDATED) - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet (UPDATED) - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents (UPDATED) - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений TfgActionSheet: Добавлены и реализованы события TfgActionSheet.OnShow, TfgActionSheet.OnHide, TfgActionSheet.OnItemClick. Добавлены свойство TfgActionSheet.Theme, позволяющее выбрать вариант темы: Auto - выбирает темную или светлую тему автоматически на основании текущего стиля; Light - использует светлую тему; Dark - темную Обновлен пример ActionSheetDemo. TfgApplicationEvents - добавлены новые событии: OnActivityResult (Андроид) - позволяет получить результаты/интенты из других приложений. OnFormBeforeShown - вызывает непосредственно до момент отображения формы OnFormActive - Вызывается, когда форма активируется. OnFormDeactivate - Вызывается, когда форма деактивируется OnFormCreate - Вызывается после создания экземпляра формы OnFormDestroy - Вызывается до разрушения формы OnScaleChanged - Вызывается, когда меняется скейл у формы. Например, при перетаскивании формы с одного экрана с одним скейлом на другой с другим скейлом (Больше актуально для OSX) TfgProgressDialog, TfgActivityDialog: Добавлены свойство Theme, позволяющее выбрать вариант темы: Auto - выбирает темную или светлую тему автоматически на основании текущего стиля; Light - использует светлую тему; Dark - темную. Общие изменения: Ассерты перенесены в скоп TfgAssert.
  17. Решил выделить в отдельную ветку форума. Набор ссылок 13 разработчиков компонентов для FMX (и не только). Может кому пригодиться! Скачу сразу, как ни странно, половину не знал. Есть заслуживающие внимания! http://community.embarcadero.com/blogs?view=entry&id=8514
  18. Специально создал новый проект чтобы продемонстрировать ошибки (Delphi Berlin). Положил на форму кнопку, зашел в Edit custom style и меняю стиль на такой Добавляю к text-у GlowEffect1. Закрываю редактор, выдается запрос на Сохранение стиля и я его сохраняю. Открываю редактор (StyleBook1), удаляю GlowEffect. После этого чтобы я не редактировал в стиле, то при его закрытии запроса на Сохранение стиля не выдается и он не сохраняется! (отдельной кнопки сохранение/применения стиля я не вижу) Что бы я не делал, ничего не меняется и после начинают валиться ошибки, после которых Delphi приходится полностью перезагружать, но и ее перезагрузка не помогает, в проекте стили уже поменять нельзя! Возможно это происходит и при добавлении удалении других эффектов, не знаю. Что делать непонятно. BadStyle.zip
  19. Установил вчера (19.05.16) официальный Delphi 10.1 Berlin - IDE жутко тормозит на любые действия. При нажатии на меню выпадает через аж 45секунд! проверил на других машинах - также. Скомпилировал проект разработанный на Delphi10 Satelitte - тоже жутко стал тормозить. Особенно при выпадании пунктов меню MenuBar ~50сек. Открытие окна ~20сек! Через несколько минут вся винда стала тормозить - все окна липнут. Памяти свободной много, процессор не жрет. Попробовал закрыть IDE. Просто запустил своё скомпилированное приложение exe - такие же тормоза. Запустил старое приложение exe (скомпилированное на Delphi10 Seattle) - все шустро, как и было. снова запустил новый проект (exe)- тормоза. снова запустил старый - все шустро. У кого такая же ситуация?
  20. Проблема очень странная. На этой недели стал полностью переносить свое приложение для десктопов (Win и Mac) на Berlin. В одном из модуле использую стандартную grid. В сиэтле работало как часы. Тут откомпилировал, вроде все работает. Программирую на маке, windows 7 стоит в виртуальной. Шло все хорошо. Сегодня запустил на работе, там windows XP. И каково было мое удивление, что после ряда манипуляций прога просто уходит в какой то ступор. Поясняю. Открываю место в программе, где показывается grid. Строк много в grid. Проверял и на 7000 и на 3000. Это перечень закупленных медикаментов. При открытии данных, все они помещаются в grid. Но стоит несколько раз сходить вниз и снова вверх по данным (через NavigatorBindSourceDB), сетка теряется (белый лист). Причем это всего через1-2 нажатие. Если я в XP открываю приложение из Сиэтла, такого не происходит! Код один и тот же! И если я запускаю в Windows 7 или 10, такого тоже не происходит (хоть Сиэтл хоть Берлин). Причем, что интересно, в рабочий комп с XP я поставил тоже виртуалку и туда Window 7. Так так все работает!!! То есть это не зависит от видеокарты и мощности процессора. В маке тоже работает как часы. Хоть 10000 тыс строк! То есть проблема именно в XP. Параллельно к тому, что теряется grid еще и приложение глючит. То есть теряются label и надписи у кнопок, а верхняя панель, где кнопки закрыть, свернуть, тоже теряется. Вот так выглядит нормальное приложение: Вот так, если сделать навигацией взад-вперед: Потом, после нескольких кликов по пустой сетки, теряются надписи (вверху, нет надписей у закладок): А потом у родителя верхняя панель: Такое ощущение, что ресурсов не хватает! Я в растерянности. Что делать? Подскажите!
  21. При простом GET-запросе на эти URL: https://accounts.google.com/AddSession?hl=ru&continue=https://www.google.com/%3Fgws_rd%3Dssl https://accounts.google.com/Logout?hl=ru&continue=https://www.google.com/%3Fgws_rd%3Dssl&timeStmp=1463418874 Возникает исключение: В инди такой проблемы нет, она отдаёт контент HTML страницы, как и положено. Потестить можно через C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpAsyncDownload Это очередной баг? (использую Delphi 10.1 Berlin)
  22. Статья: http://community.embarcadero.com/blogs/entry/timagelist101ru-1 Автор: Сергей Рощин Обзор новых возможностей, которые появились в компоненте и редакторе TImageList для Delphi R101 (2016 год, Version 24)
  23. Вот я указал ItemAppearance = DynamicAppearance Добавил 3 текста и один Image (имя Image2). Тексты присваиваю так: Item :=LsvAlarms.Items.Add; Item.Data['Text1']:='Текст1'; Item.Data['Text4']:='Текст4'; Item.Data['Text3']:='Текст3'; Как в рантайме добавить картинку в Image2? Изначально у меня к ListView был прикреплен ImageList и я просто указывал Item.ImageIndex:=0 - а как поступать теперь? Куда присваивать bitmap?
  24. Rusland

    Смена Image в ListView

    В проекте 2 Image, 2 Button, 1 ListView. Вид ListView: Пытаюсь менять картинку в Item. Делаю это следующим образом: for k := 0 to LsvAl.ItemCount-1 do begin if (k mod 2)=0 then begin TListItemImage(LsvAl.Items[k].Objects.FindDrawable('Imp1')).Bitmap.Assign(Image2.Bitmap); // <- иногда зависает на Android TListItemText(LsvAl.Items[k].Objects.FindDrawable('TxtNum')).TextColor:=$FFFF2346; end else begin TListItemImage(LsvAl.Items[k].Objects.FindDrawable('Imp1')).Bitmap.Assign(Image1.Bitmap); TListItemText(LsvAl.Items[k].Objects.FindDrawable('TxtNum')).TextColor:=$FF009DFE; end end; Во-первых, часто, но не всегда, на Андройде ловлю Segmentation fault (при обращении к памяти). Во-вторых, раскрашивается всё, вплоть до самого Image1 из которого я беру картинку (отчего я вообще в шоке ). Как делать правильно? До: После: PS. Прикладываю готовый проект LsvAl.zip
  25. Rusland

    Редактор ListView

    Можно ли в RadStudio 10.1 Berlin через редактор ListView добавлять дополнительные объекты? Например, мне нужно добавить дополнительную картинку. Можно ли это сделать?
×
×
  • Создать...