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

enatechno

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

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

  • Посещение

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

    26

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

  1. Like
    enatechno получил реакцию от A_l_ex в И снова про ориентацию экрана. Запрет поворота экрана.   
    Задавайте свойство главной формы FormFactor.Orientations для различных представлений (View).
     
  2. Like
    enatechno получил реакцию от A_l_ex в И снова про ориентацию экрана. Запрет поворота экрана.   
    В файле dpoj :
    begin Application.Initialize; Application.FormFactor.Orientations := [TScreenOrientation.Portrait]; Application.CreateForm(.....); Application.Run; end.
  3. Thanks
    enatechno получил реакцию от Anatoliy в Tscrollbox и TLabel   
    Align=Top 
  4. Like
    enatechno отреагировална POV в Возможно ли закруглить углы в выделении ListView   
    В редактировании стиля найди selection, у него SourceLink и перетащи на кружок синий снизу слева. Измени размер и будет щастье... хотя наверняка как-то это тупо, можно правильнее.

  5. Like
    enatechno получил реакцию от Rusland в RAD Studio 10.2.3 Когда и чего ждать?   
  6. Like
    enatechno отреагировална Евгений Корепов в OnUpdateObjects выполняется дважды   
    Если вы понаблюдаете дальше, то обнаружите что выполняется гораздо больше раз. Попробуйте к примеру повернуть устройство горизонтально, потом опять вертикально - еще пара выполнений. 
    OnUpdateObjects и OnUpdatingObjects выполняется постоянно - при изменении размеров,  скрытии и повторном показе, переключении приложений и т.д. В справке так и написано "Occurs immediately after the list view component is updated."
    Так что надо придерживаться двух правил :
    1. При добавлении/изменении TListViewItem отключайте обработку вышеуказанных процедур. 
    Setting.Flags.ListViewUpdating:=True; // Глобальная переменная или ListView.OnUpdatingObjects:=nil; AItem:=ListView.Items.Add; AItem.Data['Type']:='MySuperPuperItem'; AItem.Data['Name']:=AName; AItem.Data['Value']:=AValue; Setting.Flags.ListViewUpdating:=False; // Глобальная переменная или ListView.OnUpdatingObjects:=ListViewUpdatingObjects; AItem.Adapter.ResetView(AItem); // принудительно вызываем ListViewUpdatingObjects ... procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if Setting.Flags.ListViewUpdating then // Если используете глобальную переменную Exit; ... 2. Внутри OnUpdateObjects и OnUpdatingObjects при добавлении TListItemText и прочих элементов, проверяйте их существование, возможно они уже были добавлены вашим кодом ранее.
  7. Like
    enatechno получил реакцию от x11 в [ListView]пример от embarcadero   
    По умолчанию в DynamicAppearance есть только один объект - Text. Соответственно, из кода вы должны убрать все упоминания AItem.Objects.TextObject, AItem.Objects.AccessoryObject и изменить заполнение текста в ListViewItem (например так):
    for Item in [1..10] do ListView1.Items.Add.Data['Text1']:= Format('Regular item %d.%d', [Group, Item]); Как добавить свои объекты в LIstViewItem читайте Using the DynamicAppearance Value или смотрите видео.
     
  8. Like
    enatechno получил реакцию от Anatoliy в Чтение текста   
  9. Like
    enatechno получил реакцию от Ingalime в Чтение текста   
  10. Like
    enatechno отреагировална Fedor K в IdTCPClient-IdTCPServer управление соединением   
    Можете мне сделать тестовый сервер и клиент, чтобы я смог у себя проверить? Тогда мой ответ будет более детальным. А пока:
    Какой вы объем данных шлете по соединению? Чем вызвана потребность использовать именно сокеты? TimeOut  никогда не ставьте большими. Indy работает по принципу блокировки сокета и всего потока в целом. Поэтому большое значение = зависание всего приложения = нежелательные результаты и зависание. Я ставил 100 мс для работы с маленькими пакетами. С такой задержкой доп. поток не обязателен. Если значения более 500 мс - нужно создавать отдельный поток и работать с сокетами в ней + синхронизация при обработке / отправке данных. TIdTCPClient на Andoid любит спать и не проверять входящий буфер. Поэтому вручную нужно вызывать по таймеру проверку типа: procedure T<какое-то имя класа>.Read; var sz : integer; lMsg : string; begin try TMonitor.Enter(Self); try if not Assigned(Client.IOHandler) then Exit; //Client = TIdTCPClient if Client.IOHandler.InputBufferIsEmpty then begin if not Client.IOHandler.CheckForDataOnSource() then exit; end; sz := Client.IOHandler.InputBuffer.Size; if sz <= 0 then exit; lMsg := Client.IOHandler.InputBuffer.ExtractToString(-1, IndyTextEncoding_UTF8); Client.IOHandler.InputBuffer.Clear; <какой-то обработчик входящего сообщения>; except on e : Exception do <какой-то обработчик ошибки>; end; finally TMonitor.Exit(Self); end; end; AntiFreeze - это мягко говоря "костыль" от Indy, использование его плохая практика. На мобильной платформе вряд ли он появится, хотя и реализуется не сложно.
  11. Like
    enatechno получил реакцию от Павел Караваев в Покрасить ячейку Stringgrid в зависимости отзначения ячейки   
    У Вас перепутаны строки и столбцы. Нужно или так:
     
    for i := 0 to n-1 do for j := 0 to m-1 do Или же так:  
    SG.Cells[i,j]:=inttostr(ImMas[i,j]); TStringGrid:  property Cells[const ACol, ARow: Integer]
     
    TestSGDraw.zip
  12. Like
    enatechno отреагировална Fedor K в TWebBrowser и неверный ssl сертификат на сайте.   
    Objective-C конечно весьма специфический... Попробовал несколько методов, но решение действительно очень простое:
    1. Меняем iOSapi.Foundation.pas:
    unit iOSapi.Foundation; //~3855 строка, добавляем 2 метода NSURLRequestClass = interface(NSObjectClass) ['{A93A4D14-529E-41F0-86EC-B570715512BB}'] {class} function requestWithURL(URL: NSURL): Pointer; cdecl; overload; {class} function requestWithURL(URL: NSURL; cachePolicy: NSURLRequestCachePolicy; timeoutInterval: NSTimeInterval): Pointer; cdecl; overload; //метод раз {class} function allowsAnyHTTPSCertificateForHost(host: NSString): Boolean; cdecl; overload; //метод два {class} procedure setAllowsAnyHTTPSCertificate(allow: Boolean; forHost: NSString); cdecl; overload; end; 2. В своем коде для требуемых сайтов пишем следующее:
    TNSURLRequest.OCClass.setAllowsAnyHTTPSCertificate(true, StrToNSStr(<требуемый сайт>)); Проверял на сайте expired.badssl.com, XCode 7 + SDK 9.3, Simulator, также на реальном устройстве с iOS 11.
    п.с. Если нужно доверять абсолютно всем сайтам, думаю можно п. 2 вставить в FMX.WebBrowser.Cocoa.pas в методе:
    procedure TCommonWebBrowserService.DoNavigate(const URL: string);  
  13. Like
    enatechno отреагировална kami в Сборка приложения для IOS 11   
    Можно поподробнее, про что поподробнее?
    Скачал последний XCode, поставил, убедился что в Preferences-Locations стоит последняя версия Command line tools -> Установил патчи в PAServer и IDE -> удалил напрочь все "старые" SDK из опций IDE, удалил их из папки -> скачал SDK 11.1, убедился что SDK 11.1 активны -> скомпилировал и задеплоил (кажется, во время деплоя мне было сказано, что Bundle Identificator плох, пришлось заменить его с вида F43234.com.application.my на com.application.my.
    Это, по большому счету, всё, что касается работы с SDK 11.1, остальные танцы с бубном (на предыдущих SDK) не вижу смысла приводить. Тщательно разбирайте ошибки компиляции и деплоя и будет вам счастье
  14. Like
    enatechno отреагировална Tumaso в Определение слабого телефона   
    Пользователь может изменить качество эффектов, но уж очень хочется облегчить всем жизнь. Пользователь должен запустить программу, а она по умолчанию не тормозит  
    В общем я решил измерять производительность при старте, как раз висит splash-форма как заставка (она создает главное окно и после создания переключает на него и делает его главным), пользователю придется чуть дольше подождать запуска. Думаю это не проблема.
    Суть идеи - у меня приложение построено на фреймах, которые динамически создаю/уничтожаю. И как раз стартовый фрейм является небольшой демкой возможностей, там используется много эффектов и разных компонентов. Поэтому я создаю этот фрейм, делаю предзагрузку стилей всем компонентам фрейма (этот способ взял на этом же форуме, автор Ярослав). После этого создания фиксирую время, за которое создается скриншот этого фрейма (т.е. использую MyFrame.MakeScreenshot). И уже на основании потраченного времени оцениваю производительность железа при работе с графикой.
    type /// <summary> /// Производительность оборудования /// </summary> THardwarePerformance = ( /// <summary> /// Высокая производительность /// </summary> performanceHigh, /// <summary> /// Средняя производительность /// </summary> performanceMedium, /// <summary> /// Низкая производительность /// </summary> performanceLow ); function DetectPerformance(AImage: TImage): THardwarePerformance; var LTemp: TBitmap; begin // измеряем производительность оборудования CreateFrame(modeWelcome); // существующий в другом коде метод, создающий нужный фрейм LTime := Now; LTemp := Frames[modeWelcome].MakeScreenshot; try AImage.Bitmap.SetSize(LTemp.Width, LTemp.Height); AImage.Bitmap.CopyFromBitmap(LTemp); finally LTemp.DisposeOf; end; LTime := Now - LTime; // оцениваем производительность if LTime < EncodeTime(0, 0, 0, 300) then Result := performanceHigh else if LTime < EncodeTime(0, 0, 2, 0) then Result := performanceMedium else Result := performanceLow; end; Протестировал на доступных телефонах, пока определяет верно
  15. Like
    enatechno отреагировална mazayhin в Программа не запускается под Android   
    За это отвечает Deployment.
    Добавьте нужные файлы, укажите путь и все.
    Подробнее смотрите http://docwiki.embarcadero.com/RADStudio/Berlin/en/Deployment_Manager и http://docwiki.embarcadero.com/RADStudio/Berlin/en/Creating_an_Android_App#Loading_and_Deploying_Files
    Так же есть статья в блоге Андрея Ефимова http://delphifmandroid.blogspot.ru/2014/02/deployment-manager.html
  16. Like
    enatechno получил реакцию от Rusland в Покрасить ячейку Stringgrid в зависимости отзначения ячейки   
    У Вас перепутаны строки и столбцы. Нужно или так:
     
    for i := 0 to n-1 do for j := 0 to m-1 do Или же так:  
    SG.Cells[i,j]:=inttostr(ImMas[i,j]); TStringGrid:  property Cells[const ACol, ARow: Integer]
     
    TestSGDraw.zip
  17. Like
    enatechno отреагировална #WAMACO в [TListView] высота итема=0   
    Сделайте структуру вне ListView, с ней работайте, ListView заполняйте по структуре, как надо.
    Например, сначала видны категории, выбрали категорию, перезаполнили ListView элементами выбранной категории + категориями,которые свернуты.
  18. Like
    enatechno получил реакцию от Anatoliy в Покрасить ячейку Stringgrid в зависимости отзначения ячейки   
    У Вас перепутаны строки и столбцы. Нужно или так:
     
    for i := 0 to n-1 do for j := 0 to m-1 do Или же так:  
    SG.Cells[i,j]:=inttostr(ImMas[i,j]); TStringGrid:  property Cells[const ACol, ARow: Integer]
     
    TestSGDraw.zip
  19. Like
    enatechno получил реакцию от Anatoliy в Программа не запускается под Android   
    Похоже на отсутствие прав чтения /записи в Андроиде.
    Проверьте : Project - Options - Uses Permission - Read external storage (Write external storage)

    P.S. Когда задаете вопрос, указывайте версию RAD, версию Android и устройство на котором тестируете
  20. Like
    enatechno получил реакцию от Камышев Александр в Ссылка на "Политика конфиденциальности"   
    Либо использовать TWebBrowser,  либо вызвать внешний браузер:
    http://fire-monkey.ru/topic/3236-открыть-ссылку/
  21. Like
    enatechno получил реакцию от Kitty в TEdit с автозавершением   
    Пользуйтесь поиском на сайте.
    У TMS есть еще такой вариант TTMSFMXEdit. Но он платный
  22. Like
    enatechno получил реакцию от Kitty в Программа не запускается под Android   
    Думаю, для Windows предпочтительнее использовать GetDocumentsPath(), т.к.:
    1). как правило, exe-файл лежит в папке находящейся в Program Files и для записи ini-файла рядом с exe понадобятся права администратора;
    2). если работа ведется с разных рабочих столов, то каждый пользователь сможет иметь индивидуальные настройки, хранящиеся в ini-файле
  23. Like
    enatechno отреагировална Rusland в Слайд с пролистывание картинок в форме   
    Если нужен именно слайдер, то посмотрите на этот компонент Ярослава
     
  24. Like
    enatechno получил реакцию от Rusland в Ссылка на "Политика конфиденциальности"   
    Либо использовать TWebBrowser,  либо вызвать внешний браузер:
    http://fire-monkey.ru/topic/3236-открыть-ссылку/
  25. Like
    enatechno отреагировална Kitty в Программа не запускается под Android   
    #include <System.IniFiles.hpp> #include <System.IOUtils.hpp> #include <memory> //**** #ifdef __ANDROID__ String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"options.ini"); #elif _Windows String path = System::Ioutils::TPath::Combine(ExtractFilePath(ParamStr(0)), L"options.ini"); #endif if(FileExists(path)) { std::unique_ptr<TIniFile> FileINI(new TIniFile(path)); String ip = FileINI->ReadString(L"HOST", L"ip", L"127.0.0.1"); //**** 1. std::unique_ptr используется чтобы избавиться от delete. std::unique_ptr все делает сам.
    2. Файл ini для Андроида надо сохранить в UTF-8.
×
×
  • Создать...