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

enatechno

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

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

  • Посещение

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

    26

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

  1. Like
    enatechno получил реакцию от Rusland в Не запускается проект (FireDac + SQLite)   
    На других ПК рядом с Вашим ехе-файлом нужно положить dll-библиотеку SQLite
  2. Like
    enatechno отреагировална AngryOwl в Не происходит событие отжатия кнопки мыши   
    Можно. Используйте события не OnClick или OnItemClick и т.д., а событие OnMouseUp у самого TListBox.
    Типа так:
    procedure TfmMain.lbxMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var LI : TListBoxItem; p : TPointF; begin if Assigned(Sender as TListBox) then begin LI := TListBox(Sender).ItemByPoint(X, Y); if Assigned(LI as TListBoxItem) then begin LI.IsSelected := True; TTask.Run(procedure begin if Button = TMouseButton.mbLeft then Do_какая-то_процедура(LI.Index) // просто пример else if Button = TMouseButton.mbRight then TThread.Synchronize(nil, procedure begin p := MessageEvent.GetMousePos; PopupMenu1.Popup(p.X, p.Y); // для вызова контекстного меню выделенного ListBoxItem end); end); end; end; end; P.S. Отмечу, что использовал TTask и TThread.Synchronize далеко не случайно!
    Во-первых TTask.Run запустит ваш обработчик нажатия на выделенный элемент в отдельном потоке, что не будет "тормозить" "выделение" самого ListBoxItem и вообще), а во-вторых - "внутри" вызванного потока сделал синхронизацию с основным потоком, при выводе контекстного меню для ListBoxItem, так как это гарантирует корректную работу с GUI в FMX.
  3. Like
    enatechno получил реакцию от Bio HaZaRD в Не запускается проект (FireDac + SQLite)   
    На других ПК рядом с Вашим ехе-файлом нужно положить dll-библиотеку SQLite
  4. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в В Add Planform нет iOS Simulator   
    ребята ну вы чего?
    http://docwiki.embarcadero.com/RADStudio/Berlin/en/Running_Your_iOS_Application_on_the_iOS_Simulator
     
  5. Like
    enatechno получил реакцию от Kitty в GetSharedDocumentsPath   
  6. Like
    enatechno получил реакцию от Kitty в Item.ItemData.Bitmap   
    В стиле listboxitemnodetail можете хранить ссылки в Detail.
    ListBoxItem->Detail = L"текст ссылки"; Они не будут отображаться.
  7. Like
    enatechno получил реакцию от Kitty в Item.ItemData.Bitmap   
    Повторюсь. Свободное место справа, которое Вы на рисунке отметили вопросами, в стиле listboxitemleftdetail отведено под Detail.
    Создайте свой стиль или попробуйте стиль без Detail:
     
    ListBoxItem->StyleLookup = L"listboxitemnodetail"; P.S. Другое дело, непонятно, почему  ..leftdetail в названии стиля, если Detail отображается справа. Но это вопрос к разработчикам) 

     
  8. Like
    enatechno получил реакцию от Равиль Зарипов (ZuBy) в Как реализовать такой интерфейс?   
    Смотрите в стандартных примерах:
    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\User Interface\TabSlideTransition
  9. Like
    enatechno получил реакцию от Равиль Зарипов (ZuBy) в Item.ItemData.Bitmap   
    Если Вы заполните Detail этого listboxitem, то увидите, почему обрезается текст: такие размеры и положение текста заданы в стиле 'listboxitemleftdetail'.
    Размер картинки (ширина) тоже задана стилем. Чтобы обойти эти ограничения рекомендую создать свой стиль для listboxitem
  10. Like
    enatechno получил реакцию от Andrey Efimov в Как реализовать такой интерфейс?   
    Смотрите в стандартных примерах:
    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\User Interface\TabSlideTransition
  11. Like
    enatechno отреагировална bigjorj в [Android] Что использовать для сохранения настроек приложения?   
    Если приложение использует FireDac, то мне нравится использовать SQLiteIniFile
    Лежит здесь:
    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Database\FireDAC\Samples\AddOn\SQLiteIniFile\FireDAC.Phys.SQLiteIniFile.pas
    Это обертка вокруг ini файла с хранением в базе данных. Подходит для больших объемов и можно применять шифрование SQLite. 
    На Androide прекрасно работает
       WorkFolder := TPath.GetDocumentsPath;    Options := TOptions.create(TPath.Combine(WorkFolder, 'Options.db')); //TOptions это наследник TSQliteIniFile  
  12. Like
    enatechno отреагировална krapotkin в Проблемы с отрисовкой элементов формы   
    правильное решение, конечно, с фреймами.
    не забудьте, что их нужно создавать отдельно, вручную, в нужный момент
  13. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Проблемы с отрисовкой элементов формы   
    раскидайте все ваши лейауты по разным фреймам и/или формам, и ваша проблема решится
  14. Like
    enatechno получил реакцию от Rusland в Проблемы с отрисовкой элементов формы   
    Попробуйте кроме Visible := True еще делать для Layout BringToFront.
  15. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в ANDROID не приходят PUSH Уведомления   
    Такс, начнём с этого:
    Project Options Entitlement List Recieve Push Notification = true Version Info apiKey = server_key (из консоли) uses секция
    в private секции формы пишем
    процедура для получения и отправки токенов на сервер
    событие OnServiceConnectionChange
    событие OnReceiveNotificationEvent
    AndroidManifest.template.xml
    Ваша реализация может отличаться, т.к. у меня работа с FCM выполнена на PHP
  16. Like
    enatechno отреагировална Rusland в Проблема с клавиатурой   
    Проблема с планшетом Lenovo a8 50LC.
    Вот этот ответ помог.
    Тут готовый apk (потом удалю его)
    EditTest.zip
  17. Like
    enatechno отреагировална Brovin Yaroslav в ShowModal - почему нельзя использовать блокирующий режим?   
    Добрый день,
    На андроиде в принципе не поддерживаются синхронные диалоги. И причина прежде всего в архитектуре андроид приложения.
    Если говорить о нативном приложении, то оно состоит из двух потоков Java UI Thread  (Он же главный поток приложения) и Delphi Thread. FireMonkey работает в делфи треде. В то время, как все нативные вещи (диалоги, пикеры, браузеры, карты, медиа проигрыватели и тд) все они работают в Java UI Thread. Помимо этого, когда активити (работает в так же в java UI thread) меняет своё состояние (запущена, приостановлена, остановлена, возобновлена и тд), она должна синхронизировать это состояние в делфи треде. Или другими словами передать эту информацию в делфи тред. Для передачи используются пайпы с событиями. Поэтому пока делфи тред не прочитает новое состояние активити, Java UI thread будет находится в режиме ожидания. Чтение в делфи потока нового состояния происходит в цикле ProcessMessage.
    Теперь возвращаясь к диалогам. Диалоги нативные, поэтому они должны быть синхронизированы (с ожиданием) с java UI thread. С другой стороны, в момент отображения диалога происходит событие из java ui thread Window Gained Focus, возникающее, когда в приложении меняется фокус между окнами (диалоговое окно в данном случае перехватывает фокус). Но как мы выяснили, это приводит к обратной синхронизации с делфи тредом.
    Отсюда возникает классический deadlock. 
    P.S. Это верно до версии Берлин включительно.
  18. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в [Android][XE10] Как узнать у кого фокус?   
    можно вот так смотреть какой сейчас компонент имеет фокус
    procedure TForm1.FormFocusChanged(Sender: TObject); var aControl: TControl; begin if Screen.FocusControl <> nil then begin aControl := Screen.FocusControl.GetObject as TControl; Caption := aControl.ClassName + ' x ' + aControl.Name; end; end; если конкретный проверить, то
    if Edit1.IsFocused then Caption := 'Edit1.IsFocused';  
  19. Like
    enatechno отреагировална 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
  20. Like
    enatechno отреагировална dnekrasov в Не работает редактор стилей   
    Судя по скриншоту - вы просто не видите куда и что добавлять. Откройте Wiew->Structure (Shift+Alt+F11) и работайте со стилем через него
  21. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Как правильно передать полученные значения в потоке в главную форму приложения?   
    procedure Parsing(URLToPars: string; aListView: TListView); var TempText: string; HeadMatches, MsgMatches: TMatchCollection; CountPagesMatch: TMatch; i: Integer; HeadRegularExprString: string; MsgRegularExprString: string; begin // вот это место, которое хотелось бы видеть с в потоке и с индикатором: <form1>.AniIndicator1.Enabled := true; // вот это место, которое хотелось бы видеть с индикатором TTask.Run( procedure begin HTMLText := IdHTTP1.Get(URLToPars); // выполняем загрузку файла из интернета; CountPagesMatch := TRegEx.Match(HTMLText, 'max="(.*?)".*value="(.*?)"'); HeadRegularExprString := 'class="date">(.*?)<.*?class="id">(.*?)<'; MsgRegularExprString := 'class="text">(.*?)<\/div>'; HeadMatches := TRegEx.Matches(HTMLText, HeadRegularExprString, [roIgnoreCase, roMultiLine]); MsgMatches := TRegEx.Matches(HTMLText, MsgRegularExprString, [roIgnoreCase, roMultiLine]); TThread.Synchronize(TThread.CurrentThread, procedure begin aListView.Items.Clear; if HeadMatches.Count = MsgMatches.Count then begin for i := 0 to HeadMatches.Count - 1 do begin TempText := HTMLClear(MsgMatches.Item.Groups[1].Value); with aListView.Items.Add do begin Data['DateText'] := HeadMatches.Item.Groups[1].Value; Data['CitateText'] := HeadMatches.Item.Groups[2].Value; Data['MainText'] := TempText; Data['imgCopy'] := il1.Bitmap(TSizeF.Create(36, 36), 0); Data['imgSend'] := il1.Bitmap(TSizeF.Create(36, 36), 1); end; end; end else ShowMessage('Ошибка загрузки данных!'); <form1>.AniIndicator1.Enabled := false; end); end); end;  
  22. Like
    enatechno отреагировална Равиль Зарипов (ZuBy) в Пример работы с TObjectList   
    если вам не понятен этот код
    For i:=0 to List.Count-1 do with List.Items[i] do begin Position.Y:=Position.Y+0.5; end; то его можно переписать следующим образом
    for i:=0 to List.Count-1 do     List.Items[i].Position.Y := List.Items[i].Position.Y+0.5;  
    UPDATE: http://delphicode.org/delphi/with.htm
  23. Like
    enatechno получил реакцию от aleksandrguru в Новая БД в Android   
    FDConnection1 := TFDConnection.Create(Self); FDPhysSQLiteDriverLink1 := TFDPhysSQLiteDriverLink.Create(Self); FDGUIxWaitCursor1 := TFDGUIxWaitCursor.Create(Self); FDGUIxWaitCursor1.ScreenCursor := gcrSQLWait; FDGUIxWaitCursor1.Provider := 'FMX'; FDConnection1.DriverName := 'SQLite'; FDConnection1.Params.Values['Database'] := TPath.GetDocumentsPath + PathDelim + 'test.db'; FDConnection1.LoginPrompt := false; FDConnection1.Connected := true; if FDConnection1.Connected then ShowMessage('подключились'); Пример подключения в runtime. Компоненты на форму можно "не садить"
  24. Like
    enatechno отреагировална Kitty в [iOS] [iOS10] Приложение падает при использовании камеры в iOS 10 64 bit   
    Проблема решена:
    <key>NSPhotoLibraryUsageDescription </key> <string>To choose photo</string> <key>NSCameraUsageDescription </key> <string>Get photo</string> Обнаружен лишний пробел перед закрывающей </key>. Странно, но это все ломало. Убрать пробел:
    <key>NSPhotoLibraryUsageDescription</key> <string>To choose photo</string> <key>NSCameraUsageDescription</key> <string>Get photo</string>  
     
     
  25. Like
    enatechno отреагировална MAD_EVAL в Ошибка сценария   
    Положите все библиотеки (*.dll) Хромиума в папку с исполняемым файлом. Плюс как минимум 2 папки с локалями и компонентами движка.
    Добавил принтскрин всего того что должно лежать в папке вместе с вашим екзешником.
    Это всё есть в архиве, из которого Вы устанавливали компонент в папке cef3_ChromiumXE6\bin\Win32 (или Win64)
     
     

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