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

Rusland

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

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

  • Посещение

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

    26

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

  1. Like
    Rusland получил реакцию от Aleksandr в Звук и вибра при нажатии на кнопку   
    uses AndroidApi.JNI.Media; procedure MakeSound(ADuration: Integer); var Volume: Integer; StreamType: Integer; ToneType: Integer; ToneGenerator: JToneGenerator; begin Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // задаем громкость StreamType := TJAudioManager.JavaClass.STREAM_ALARM; ToneType := TJToneGenerator.JavaClass.TONE_DTMF_0; // тип звука ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume); ToneGenerator.startTone(ToneType, ADuration); end; Типы звука можно посмотреть здесь 
  2. Like
    Rusland получил реакцию от Hevard в Запрос на закрытие приложения при нажатии кнопки Назад   
    Подправил вот так (чтобы работало в Delphi 10 Seattle):
     
    procedure TFormMain.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 begin MessageDlg('Закрыть приложение?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo], 0, procedure(const AResult: TModalResult) begin Case AResult of mrYes: FormMain.Close; mrNo: Exit; end; end); Key:=0; end; end; end; Работает нормально, только в диалоге запроса No стоит впереди. Как бы No и Yes поменять местами? 
    А еще лучше заменить на Да и Нет.
  3. Like
    Rusland получил реакцию от Semitako в Запуск приложения от PUSH-уведомления   
    Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:
    procedure TFormMain.FormActivate(Sender: TObject); var CurNotification : TPushServiceNotification; begin if Length(fPushService.StartupNotifications) > 0 then for CurNotification in fPushService.StartupNotifications do if Assigned(CurNotification) then Memo.Lines.Text := CurNotification.Json.ToJSON; end;  
  4. Like
    Rusland получил реакцию от Anatoliy в Invalid parameter при подключении таблицы   
    Кажется нашел я причину проблем с моим DataSnap проектом - при создании я поставил галочку HTTPS. 
    Сейчас пересоздал проект заново без HTTPS, все заработало.
    PS. Возможно просто нужно найти правильные ssleay32.dll и libeay32.dll
  5. Thanks
    Rusland отреагировална krapotkin в Фреймворк для стандартного ListView   
    Всем привет!
    После долгого творческого запоя я запилил альфу либы, которая позволяет юзать обычный, не-генномодифицированный ListView.
    Данные подаются в виде модели данных, описание раскладки итема лежит в JSON.

    Для работы пишется примитивный наследник класса-адаптера, который биндит данные модели на элементы из JSON. Я решил, что руками делать это дешевле чем через RTTI
    { TMyAdapter } procedure TMyAdapter.SetupDrawableContent(const ADrawable: TListItemDrawable; const AData: TMyData); begin if SameText( ADrawable.Name, 'text') then begin (ADrawable as TListItemText).Text := AData.Text; end else if SameText( ADrawable.Name, 'detail') then begin (ADrawable as TListItemText).Text := AData.Detail; end else if SameText( ADrawable.Name, 'balance') then begin (ADrawable as TListItemText).Text := FormatFloat('0.00', AData.Balance); end else if SameText( ADrawable.Name, 'reserved') then begin (ADrawable as TListItemText).Text := FormatFloat('0.00', AData.Reserved); end end; Главная хитрость и отличие от стандартного DynamicAppearance+LiveBinding - переменная высота итемов ListView и использование арифметики в описании раскладки.
    Можно указать Detail.Y  = Text.Bottom + 5, ItemHeight = Detail.Bottom + 10, Detail.W = ItemWidth/2 - X
    {"Kind":"rect","Name":"BonusRect","Value":"", "Place":{"X":"itemwidth*3/4","Y":"Text.Y","W":"ItemWidth/4-5","H":"50"}, "BorderColor":"#FF005500", "Color":"lime", "LineWidth":3}, {"TextHAlign":2,"TextVAlign":1,"Kind":"text","Name":"Balance","Value":"", "Place":{"X":"BonusRect.x+5","Y":"Text.Y","W":"BonusRect.w-10","H":"50"}, "WordWrap":true, "Color" :"Black", "Font":{"Size":18,"Style":""}} ], "ItemHeight":"detail.bottom+10", Это дает довольно гибкую систему. Не на все случаи жизни, но все, что нужно, можно после автоматической раскладки дополнительно приписать в OnUpdateObjects 
    Код для работы примерно такой
    procedure TForm1.FormCreate(Sender: TObject); begin data:= TMyDataList.CreateFromFile(ExePath()+'data.json'); // загрузка в модель данных Adapter := TMyAdapter.Create(lvWallets, data.Items, ExePath()+'pattern.json'); // создание адаптера и загрузка шаблона Adapter.Pattern.SetupListView(lvWallets); // задать отступы и разную мелочь Adapter.ResetView(); // здесь в цикле из модели данных создается нужное количество итемов ListView end; procedure TForm1.lvWalletsUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin Adapter.SetupContent(AItem); // загрузить текст, картинки и другое содержимое в элементы итема Adapter.Pattern.DoLayout(AItem); // поправить раскладку в соответствии с содержимым элементов итема end; Для использования кроме стандартных - текст, картинка, кнопка - создано несколько дополнительных элементов итема - прямоугольник, круг, уголок, линия.
    Отличие от ModernLV - , 
    1) все происходит без правки системных файлов
    2) пока нет колонок и других особых изысков.
    На результат работы смотреть тут. Исходники пока не причесаны, будут чуть позже
    UPD.
    ссылки на репозитории ниже
     
  6. Like
    Rusland получил реакцию от Евгений Корепов в Webbrowser в Windows   
    В ходе работы с js библиотекой leaflet столкнулся с проблемой некорректной работы стандартного веббраузера на виндоуз. 
    Как известно компонент Webbrowser в Windows использует движок Internet Explorer. Но, как выяснилось, по умолчанию он работает в режиме совместимости IE6, даже если у вас установлена гораздо более новая версия.
    Для того чтобы заставить его работать в нужно вам режиме требуется внести правку в реестр:
    HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BROWSER_EMULATION Project1.exe = (DWORD) 0x00002710 (значения см. ниже) где Project1.exe - это название вашего приложения, а значения параметр принимает следующие:
    Value Description 11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11. 10001 (0x2711) Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive. 10000 (0x02710) Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10. 9999 (0x270F) Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 9000 (0x2328) Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9. Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.   8888 (0x22B8) Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 8000 (0x1F40) Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8 Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.   7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.  
    PS. лично мне помогло исправление ветки HKEY_CURRENT_USER и установка версии IE10
    link
  7. Like
    Rusland отреагировална jornada в Доступ к Yandex.Disk   
    Лучше поздно, чем никогда) Например так
    // RESTRequest1.AddFile(FileName);
     AStream := TMemoryStream.Create();
     AStream.LoadFromFile('D:\1.mp4');   
     RESTRequest1.AddBody(AStream, ctVIDEO_MP4);
  8. Thanks
    Rusland отреагировална FeLDMARShaL в [iOS] Полноценная фоновая работа приложения   
    Расскажу о том как я добился нормальной фоновой работы приложения. В моем понимании нормальная фоновая работа приложения - это сохранять геокоординаты и систематически (по мере их накопления передавать на сервер). По сути у нас получился трекер. Те кто считают что iOS такое не умеет делать, и все что будет написано ниже это фейк лучше закройти эту тему. Итак начнем, по пунктам:
    1) Добавляем к проекту ключ NSLocationAlwaysAndWhenInUseUsageDescription - для новых иОС это обязательно, начиная с 11 или 12 версии уже не помню

    2) Сообщаем приложению о намерении что мы будем использовать геокоординаты в фоне (редактируем ключ UIBackgroundModes выставляя галочку напротив location)

    3) Далее  для того чтобы не поломать другие приложения которые используют геолокацию создаем специальную дерективу, которая будет сообщать о том что наше приложение будет использовать геолокацию в фоне, я ее назвал iOS_RequestAlwaysAuthorization

    4) Дальше намного сложнее, нам нужно исправить исходники самой Delphi, а именно System.iOS.Sensors. Изменять будем процедуру TiOSLocationSensor.DoStart, все что отличается от стандартного у меня в рамках описания моей директивы:
    function TiOSLocationSensor.DoStart: Boolean; var I: Integer; begin {$ifdef iOS_RequestAlwaysAuthorization} if TOSVersion.Check(8) and (FLocater <> nil) then FLocater.requestAlwaysAuthorization; {$else iOS_RequestAlwaysAuthorization} if TOSVersion.Check(8) and (FLocater <> nil) then FLocater.requestWhenInUseAuthorization; {$endif iOS_RequestAlwaysAuthorization} // check authorization if Authorized = TAuthorizationType.atUnauthorized then SensorError(SLocationServiceUnauthorized); // check if location sensor is enabled if not FLocater.locationServicesEnabled then SensorError(SLocationServiceDisabled); // start location updates if (LocationChange = TLocationChangeType.lctLarge) and CanUseSignifChangeNotifs then FLocater.startMonitoringSignificantLocationChanges else FLocater.startUpdatingLocation; // start heading updates if CanUseHeading then begin FLocater.startUpdatingHeading; end; // start monitoring regions if CanMonitorRegions then for I := 0 to Regions.Count - 1 do FLocater.startMonitoringForRegion(ConvLocationRegion(Regions[I])); Result := FLocater.locationServicesEnabled; if Result then Result := Authorized = TAuthorizationType.atAuthorized; {$ifdef iOS_RequestAlwaysAuthorization} FLocater.setAllowsBackgroundLocationUpdates(True); FLocater.setPausesLocationUpdatesAutomatically(False); {$endif iOS_RequestAlwaysAuthorization} end; Собственно усе, можно наслаждаться фоновой работой. Все это работает под Delphi 10.2.3. На телефоне iPhone 6s под управлением iOS 11. Как было сказано выше, работает как геолокация так и инет и вообще все остальные процессы внтури приложения, такие как TTimer
    Собственно вот результат данного трекера:

     
    Если приблизить то можно увидеть насколько точно и часто он обновляет координаты:

     
    И да, огромное спасибо человеку с ником Artyom Karapetyan, именно он натолкнул на мысль того как надо правильно все сделать
  9. Like
    Rusland получил реакцию от AngryOwl в Запуск приложения от PUSH-уведомления   
    Slava Marchenko подсказал что при закрытом приложении получить сам текст можно так:
    procedure TFormMain.FormActivate(Sender: TObject); var CurNotification : TPushServiceNotification; begin if Length(fPushService.StartupNotifications) > 0 then for CurNotification in fPushService.StartupNotifications do if Assigned(CurNotification) then Memo.Lines.Text := CurNotification.Json.ToJSON; end;  
  10. Like
    Rusland получил реакцию от d7d1cd в как показать сообщение?   
    Хм, действительно. Так давно он у меня в проекте, что стал думать что он стандартный ) Однако он маленький и не требует установки, достаточно скопировать в свой проект.
    Вот он, если нужно.
  11. Like
    Rusland получил реакцию от Barbanel в Кнопка Done   
    В этой теме как раз код для отлавливания нажатия кнопки. Используется IFMXVirtualKeyboardService в FormKeyUp. Через дебагер посмотрите что там отлавливается при нажатии Done. 
  12. Like
    Rusland отреагировална x11 в Ориентация SDK на Android 8 и выше   
    Object Pascal Interface Files Of The Android 27 and Android 28 SDKs For Delphi 10.2 Tokyo
    https://www.fmxexpress.com/object-pascal-interface-files-of-the-android-27-and-android-28-sdks-for-delphi-10-2-tokyo/
  13. Like
    Rusland отреагировална ra.eremeev в XCode версия   
    Доброго времени суток!
    Может кому пригодится: конфигурация Berlin отлично работает с MacOS High Sierra + SKD 11
    Виртуалка для Hight Sierra доступна по ссылке
  14. Like
    Rusland отреагировална Камышев Александр в Использование TClientSocket (old school )   
    Задача поднять старый (теплый ламповый) проект CBuilder 6 под Виндовс в RAD Studio.
    Просто открыл файл проекта, практически все подтянулось с небольшими изменениями в путях include. Кроме TClientSocket, нет такого визуального компонента.
    Компонента нет, но библиотеки в RAD Studio оставили. Подключил #include <ScktComp.hpp>, создал динамически TClientSocket, определил события - проект поднялся малой кровью.
    #include <ScktComp.hpp> TClientSocket *сlient = new TClientSocket(NULL); сlient->OnConnect = ClientConnect; сlient->OnDisconnect = ClientDisconnect; сlient->OnError = ClientError; сlient->OnRead = ClientRead; Аналогично можно пользоваться TServerSocket. Может кому пригодится.
  15. Like
    Rusland отреагировална Ingalime в IOS: Exception class 6   
    Судя по форуму, XCode 9.3.1 может решить все вопросы, если на телефоне IOS 11.4:
    https://community.embarcadero.com/forum/installation-issues/9679-ios-11-4-xcode-9-4?limitstart=0
    Пользователь MINAS:
    Anxiously waiting Embarcadero for a solution to our problem with iOS 11.4
    But, i have some good news
    Latest Delphi 10.2.3, MacOS 10.13.4, XCode 9.3.1, iOS 11.4
    works !!!
     
  16. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Горизонтальный TListView с картинками   
    Есть небольшой проект с горизонтальным режимом в статье, если не получится реализовать, то помогу
    http://blog.rzaripov.kz/2016/11/1-modernlistview.html
  17. Like
    Rusland отреагировална Sergiy_83 в Настройки SDK для Токио   
    Распакуйте  в c:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs этот архив https://cloud.mail.ru/public/Kn5h/Fp9634UiK
     
  18. Like
    Rusland отреагировална Mars M в Настройки SDK для Токио   
    В SDK Manager оставляешь всё как есть, идешь в c:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\
    Там запускаешь SDK Manager.exe, обновляешь/устанавливаешь всё что он предложит. После устанавливаешь Android SDK build-tools 22.0.1
    И в принципе всё. Если будет ошибка при компиляции то в Environment Variables > BDSPLATFORMSDKSDIR указываем правильный путь до SDK - C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs
    Если всё равно ошибка то в  Environment Variables > Path вместо C:\ProgramData\Oracle\Java\javapath  указываем прямой путь до Java(к примеру C:\Program Files\Java\jdk1.8.0_60\bin)
  19. Like
    Rusland отреагировална 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, так больше шансов получить помощь.
  20. Like
    Rusland отреагировална Mars M в Embarcadero.... Community Edition!   
    Ну мой коммент был на счет того что там всё урезано по самое нихочу, так что об этом
    Я сам не раз сталкивался когда клиенты говорят что я как то не так ценовую политику устанавливаю, а если бы сделал вот так то круто было бы
    И для каждого круто это как ему дешевле и удобней. Так что можно сколько угодно спорить, но то что вышла эта версия очень хорошо.
    Я знаю пару человек которые вот с такими же словами(ну плюс ещё про то что делфи умер) переходили на другие языки, потом у них что то там не сросталось, понимали что "там" оказывается только на словах всё хорошо было, а в реалиях проблем не меньше, в общем кто плотником в итоге стал, кто ещё кем то. Не жалеют конечно, но беготня за травой которая зеленее не всегда на пользу идет.
    Думаю с ружьём возле каждого программиста никто стоять не будет, так что заработай 10..50000 в год никто и не заметит
    Ведь на пиратских зарабатывают, а сейчас хоть сказать можно, типа не доглядел, забылся
  21. Like
    Rusland отреагировална Gingercat в Embarcadero.... Community Edition!   
    Со всем уважением, но фраза "разработке электроники получаю кратно больше" как бы спрашивает - вы их принципиальных убеждений не покупаете полную версию? Хотя  "софтовые проекты пишу только на qt " - мсье знает толк в извращениях, и к слову, у них, после последнего апдейта лицензирования (там и так был полный караул с лицензированием) далеко не все так гладко - ограничений не меряно. И подписка (новшество) далеко не самая дешевая, или вы оплачиваете подписку? Для меня отсутствие возможности покупки, а только оставленная странная подписка в Qt, была последним гвоздем в их крышку гроба.  Я согласен с тем, что багов и тд в абракадабре с головой - тут готов в голос орать про их криворукость и лень. Но вам, если вы действительно сталкиваетесь с продажами (я сужу не только по своему опыту) должно быть известно - человек, возмущающийся по поводу цены и за бакс не купит - это уже психологиия, такие прямиком в черный список едут.
  22. Like
    Rusland отреагировална Gingercat в Embarcadero.... Community Edition!   
    Неее братцы, с таким настроением слона не продашь. Судя по заметке с их же блога, это вполне не обрезанная версия. Я давно скрестил vs c++ и абракадабру, но новость, хоть и запоздавшая лет так на надцать, не может не радовать.
  23. Like
    Rusland отреагировална Gingercat в Embarcadero.... Community Edition!   
    Доброго времени суток, уважаемые. Случилось то, чего не должно было случиться в принципе (нет, инопланетяне не прилетели, хотя вероятность произошедшего несравненно ниже) - Embarcadero выпустили БЕСПЛАТНУЮ версию Community Edition, как я понимаю, с поддержкой мобильных платформ ??????. Видать грядет всемирный потоп) может есть ссылка на форуме, я не нашел, посему оставлю тут
    https://community.embarcadero.com/blogs/entry/introducing-delphi-cplusplusbuilder-community-edition
    P.S - ушел искать волка в лесу, ну который помер, согласно пословице)
     
  24. Haha
    Rusland получил реакцию от Равиль Зарипов (ZuBy) в Возможно ли работать с OpenGL в FireMonkey?   
    Это сообщение 2014 года
  25. Like
    Rusland отреагировална IVGSoft в Производительность отрисовки текста на мобильных платформах   
    Промежуточный итог. Переписал компонент используя нативный канвас для отрисовки. Скорость на Андроиде на порядок выше. Никаких тормозов.
    Макс, еще раз большое спасибо за наводку! :)
×
×
  • Создать...