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

Alexander

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

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

  • Посещение

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

    2

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

  1. Like
    Alexander получил реакцию от Anatoliy в TGroupbox и TRadioButton вместо TRadioGroup   
    Как вариант могу предложить следующий алгоритм 
    В RadioButton(I).Tag выставляете уникальный индекс. В обработчике onChange у RadioButton:
    GroupBox.Tag := (Sender as TRadioButton). Tag;
    Тогда для проверки можно использовать :
    Case GroupBox.Tag of....
  2. Like
    Alexander отреагировална sinuke в Возможно ли сделать такой интерфейс с ЛистВью?   
    Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных).
    Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты

    ListView_Schedule_Sample.zip
  3. Thanks
    Alexander отреагировална x11 в Delphi не видит мой телефон   
    В первую очередь нужно проверить, видит ли утилита adb.exe ваше устройство.
    в консоли CMD нужно зайти в папку "C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\platform-tools"
    И выполнить adb devices, появится строка: List of devices attached и под ней все подключенные смартфоны (устройства). Если там ничего не будет, то не установлены USB-драйверы, либо на устройстве не включен режим разработчика.
    Когда установите драйверы и перезапустите ПК, то adb может всё равно не увидеть устройство, тогда поможет создание файла adb_usb.ini и нужно будет прописать в нём ID устройства: http://digphone.ru/esli-android-adb-ne-vidit-smartfon/
     
    После этого перезапустить ПК.
    Снова запустить в CMD: adb.exe devices
    после этого может появиться строка, говорящая о том, что устройство подключено, но не авторизовано, т.е. код устройства и unauthorized:
    Переподключите смартфон к компьютеру и на экране смартфона должно появиться окно авторизации, где нужно нажать ОК и, возможно, перед этим сперва поставить галочку "Всегда разрешать подключение с этого ПК".
    Снова выполните adb.exe devices и увидите, что вместо unauthorized, будет слово device.
    Вместо перезапуска ПК, можно перезапускать службу adb
    adb kill-server adb start-server
  4. Like
    Alexander отреагировална Евгений Корепов в Кнопка "Добавить в избранное"   
    Кнопка "Добавить в избранное" и соответственно раздел Избранное в профиле очень помогли бы в работе с форумом. Добавлять в избранное хочется отдельные посты. Потому как поиск работает плохо и искать когда то попавшееся на глаза нужное решение найти проблематично.А так бы ткнул на Добавить в избранное, по мере надобности зашел в свое Избранное, увидел разбитое по разделам форума списки избранного и нашел что нужно.
    Заранее благодарю!
  5. Like
    Alexander отреагировална Евгений Корепов в TPushClient - нашёл чудесную вещь   
    Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает.
    Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный.
    Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/
    Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient
    Использование максимально простое:
    uses DW.PushClient; .... private FPushClient: TPushClient; procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); .... procedure TFormMain.InitPushService; begin FPushClient := TPushClient.Create; FPushClient.GCMAppID := ConstGCMAppID; FPushClient.ServerKey := ''; FPushClient.BundleID := ''; FPushClient.UseSandbox := Debug; // Change this to False for production use! FPushClient.OnChange := PushClientChangeHandler; FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler; try FPushClient.Active := True; except SendError('FPushClient.Active Exception'); end; end; procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); begin if TPushService.TChange.DeviceToken in AChange then begin HDevicePushParams.DeviceID:=FPushClient.DeviceID; HDevicePushParams.DeviceToken:=FPushClient.DeviceToken; GetHTTP(CommandRegisterFCM); // Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID); // Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken); end; end; procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); begin // ShowMessage(ANotification.DataObject.ToString... end; Правда руки не дошли разобраться для чего ему 
      FPushClient.ServerKey := '';
      FPushClient.BundleID := '';
    Но и без этого работает.
     
  6. Like
    Alexander получил реакцию от Alex7wrt в Воспроизведение MPG, Windows   
    Проверка видимости кодеков для приложения
    if TMediaCodecManager.IsCodedExists(Data.Files[0]) then Memo1.Lines.Add('Кодек зарегестрирован') else Memo1.Lines.Add('Кодек не зарегестрирован');  
    а ваши *.mpg из проводника запускаются для просмотра?
  7. Like
    Alexander получил реакцию от x11 в LiveBinding Designer не видит поля у DataSet   
    Через правую кнопку мыши обновите окно Livebinding
  8. Like
    Alexander отреагировална kami в Посоветуйте функционал для приложения   
    Нормативная документация (устав, цели, программа)
    Актуальные вопросы на предстоящую повестку дня на какой-нибудь сессии
    Обращения от граждан (хотя они гораздо чаще идут на конкретного представителя)
    "Внутреннее" голосование по какому-нибудь разрабатываемому документу / согласование уполномоченными должностными лицами
    А вообще - лучше всего уточнить у заказчика. Не "какой функционал должен быть у приложения" , "дайте ТЗ", а "давайте вместе подумаем / пофантазируем - вот у нас есть мобильное приложение. И мы будем его использовать для / чтобы ...". Причем это лучше делать не в письменной форме, а при личной встрече (при наличии такой возможности).
     
  9. Like
    Alexander получил реакцию от Winexcel в Получить список элементов которые сейчас видны   
    Y1 :=ListBox1.AniCalculations.ViewportPosition.Y; Y2 := ListBox1.AniCalculations.ViewportPosition.Y + ListBox1.Height; for I := 0 to ListBox1.Count-1 do if ListBox1.ListItems[i].IsVisible then if (ListBox1.ListItems[i].Position.Y>=Y1) and (ListBox1.ListItems[i].Position.Y<=Y2) then Caption := Caption +'|'+ IntToStr(i); Альтернативный вариант с уточнением
  10. Like
    Alexander отреагировална krapotkin в Получить список элементов которые сейчас видны   
    думаю, подойдет
    a:=lst1.ItemByPoint(10,0);
    b:=lst1.ItemByPoint(10,lst1.height);
     
  11. Like
    Alexander получил реакцию от Rusland в передача сообщений по локальной сети   
    А если решитесь писать свой, то присмотретьсь к App Tethering 
     
  12. Like
    Alexander получил реакцию от Равиль Зарипов (ZuBy) в передача сообщений по локальной сети   
    А если решитесь писать свой, то присмотретьсь к App Tethering 
     
  13. Like
    Alexander получил реакцию от OnePeople в передача сообщений по локальной сети   
    А если решитесь писать свой, то присмотретьсь к App Tethering 
     
  14. Like
    Alexander получил реакцию от Евгений Корепов в передача сообщений по локальной сети   
    А если решитесь писать свой, то присмотретьсь к App Tethering 
     
  15. Like
    Alexander получил реакцию от rareMax в Скроллинг множества TEdit расположенных на TScrollBox   
    Моё ИМХО,  придётся решать алгоритмически. Если изначально у всех Edit.HitTest :=False; то появления клавиатуры не будет и перемещение будет согласно жесту. А вот как как вводить Edit в режим доступа и редактирования, тут надо пробовать. Если в лоб, то двойной клик(или Tap) по Edit, по сути будет клик по scrollbox. Получение координат и определение, какой edit находится на клике.  Соответственно Edit.HitTest :=True ; ввод с клавиатуры,  уводить фокус с edit, Edit.HitTest := False; 
  16. Like
    Alexander отреагировална ENERGY в [Статья] Как конвертировать растровую картинку в векторный TPath Firemonkey. How to convert a bitmap image (png, jpeg, bmp) into a Firemonkey vector TPath.   
    Как конвертировать растровую картинку в векторный TPath Firemonkey.
    How to convert a bitmap image (png, jpeg, bmp) into a Firemonkey vector TPath. Manual.

    Плюсы векторных изображений: 
    Можно изменять размер избражения в любую сторону, уменьшать и увеличивать, без потери качества. Картинка всегда будет с четкими краями, без размытия по краям и квадратиков. Можно легко изменять в RunTime цвет заливки и обводной рамки, изменяя цвета в полях Fill и Stroke компонента TPath. Заливка как правило одна - это цвет из свойства Fill Color. Но ... цвет может быть и градиентом из множества цветов, который можно указать в диспетчере объектов, там же можно загрузить и Bitmap как текстуру в качестве заливки.  Можно анимировать изображение, изменяя вышеуказанные свойства, а также направление градиента, размер, толщину обводной линии итд. Тоже можно менять и для Stroke свойства - обводной рамки.
    Минусы:
    Получаемое изображение упрощенное. Т.к. оно может содержать только один путь (Path) и одну плоскость.
    Возможно получиться скомбинировать множества TPath, положив их друг на друга с прозрачностью. 
    Векторное изображение вычисляется и рисуется "в живую", поэтому потребуется больше ресурсов, чем при отрисовке обычных растровых картинок png, jpg, bitmap.
    Что означает нагрузку на аппаратную часть, замедление работы программы и более быструю разрядку мобильного устройства.
    Поэтому если и использовать подобные векторные изображения, то в случае если нужно отобразить большие картинки-символы на разных экранах (не иконки) - например на маленьком экране телефона, и на большом планшете и на еще большем Desktop экране. 
    Хотя в примере \Samples\Object Pascal\Multi-Device Samples\User Interface\CustomListBox\CustomListBox.dproj используется векторная иконка\чекбокс очень простая. 
     
    Преимущества векторного изображения наглядно:

     
    Ингредиенты: 
    1. Векторный редактор, я взял бесплатный inkscape, который можно скачать здесь . 
    2. Картинка. Желательно чтобы картинка была с большим разрешением, от 300px и больше. Если взять изображение маленького размера, например 48x48 или 64x64, то контуры получатся не такими точными. И хотя inkscape все равно применит сглаживание контуров, и квадратиков вы не увидите, обводные линии могут получиться другой формы, к примеру более жирными или могут слиться с другими линиями.
    Исходное изображение лучше брать в формате PNG, т.к. JPEG оставляет артефакты в виде точек, в итоге программа при трассировке может захватить и их, что не желательно. Конечно же если другого исходника нету, то смысла конвертировать jpg в png нет - качество не улучшится.
    Основной метод конвертации - это трассировка изображения, - когда алгоритм ищет края и обводные линии, и на основе их рисует свои. Потому качественные результаты получаться если брать изображение с одной плоскостью, без теней, градиентов и деталей, в стиле Windows 8\10 или Android. Т.н. Flat (плоский) icon. 
    3. IDE RAD Studio Delphi или С++

    Приступим. 
    Запускаем incscape. 
    Размер исходной png картинки 668x720.

    1. Меню File > Open - указываем путь. Иконка загрузилась.
    2. Нажимаем левой кнопкой мыши на картинку, чтобы она выделилась.
    3. Меню Path > Trace Bitmap. Сразу выберите чекбокс Live Preview (см скриншот).
    Здесь есть разные методы, но нам нужна секция Single Scan: Creates a Path. Методы нужно подбирать визуально, "на глаз". 
    Можно также использовать и секцию Multiply Scans, а затем скомбинировать пути в один (Path > Combine), т.к. нам нужен один путь, и один набор. Путь (Path) это набор инструкций о том как и сколько рисовать линий-векторов. Для нашего конкретного случая, этой конкретной иконки, оптимальный вариант Color Quantization и количество цветов = 2.

     
    4. Нажимаем OK и закрываем окно. Появилось наше изображение залитое черным цветом - это и есть наша векторная картинка. 
    Стоит заметить что прямо под ним лежит наше исходного изображение. Чтобы его удалить нужно отодвинуть мышкой векторное изображение, выделить исходную картинку и удалить ее клавишей Delete.  
    5. Вы можете отредактировать пути, выбрав в левой панели инструмент Edit Paths By nodes (F2) или добавить фильтры\эффекты в меню Path > Path Effects. В данном примере я ничего не менял.
    6. File Save As > inkscape SVG .
    7. Открываем полученный SVG файл в блокноте или в Lister тотал коммандера. Ищем массив чисел, который обычно начинается со строчки "<path". Находим эту строчку, нам нужно набор символов, который идет после буквы "d=", к примеру d="m 397.33334,c -48.1 ...-0.326 -1.64129,-0.66405 z" и копируем все, что внутри кавычек в буфер.
    8. Далее в RAD IDE кидаем на форму TPath. В Object Inspector WrapMode устанавливаем в Fit, и в поле Data вставляем из буфера наш код.
    9. Меняем Fill и Stroke цвета на нужные нам значения (здесь я установил желтый цвет и увеличил толщину обводки (Stroke)). 

     
    Еще пару примеров. 
    Дерево - параметры Brightness Cutoff, Threshold 0.370 . Как видите здесь оптимальнее подходит метод Brightness Cutoff.  Здесь исходная png картинка - это дерево черного цвета, я ее распознал, и затем добавил в TPath, а в свойстве Fill указал градиент от черного до зеленого.
    Наушники - Edge Detection 0. Конечно конкретно в этом случае нужно подчищать изображение.

     

    Иногда бывает что при вставке пути в TPath, компонент его отображает некорректно, если снова зайти в DATA TPath, то окажется что часть данных потеряна. 
    Что исправить эту ситуацию, нужно путь упростить. Это значит что после шага 4, нужно выбрать в incscrape меню Path > Simplify, затем снова сохранить файл. 
    Правда Simplify в incscrape работает не очень хорошо, часто загругляет прямые участки. Лучше делать Simplify в Adobe Illustrator.
     
    Статья опубликована на сайте fire-monkey.ru и возможно будет изменяться и дополняться.
    Автор: ENRGY  
    24. 02. 17 
     
  17. Like
    Alexander отреагировална Error в ErrorSoft TurboUpdate - Автообновление ваших Windows приложений   
    Выложена альфа версия ErrorSoft TurboUpdate - библиотека для легкого добавления автообновления в ваши FMX и VCL приложения под Windows.
    Совместимость - Delphi Seattle и выше.
    Описания пока нет, но в репозитории есть примеры для ознакомления.
    Лицензирование - для OpenSource и не коммерческого использования данная библиотека абсолютно бесплатна, допустимо изменение и т.д.
    Для коммерческого применения - пока нет решения.
    https://github.com/errorcalc/TurboUpdate
    Перед использованием необходимо установить необходимые Packages:
    TurboUpdateFmxOnly.groupproj - FMX only. TurboUpdateGroup.groupproj - VCL + FMX, зависит от ErrorSoftVclComponents(https://github.com/errorcalc/FreeEsVclComponents). Это ранняя альфа, необходимы ваши отзывы, критика и т.д.
  18. Like
    Alexander отреагировална kami в Простой пример работы с MS Word в Delphi FMX   
    никак. Нужно смотреть библиотеки, позволяющие работать с OpenDocument (или как-то так) форматом, и создавать документ самому. Стартер не дает возможности пользоваться COM-объектами.
  19. Like
    Alexander отреагировална krapotkin в Простой пример работы с MS Word в Delphi FMX   
    есть Open/Libre Office и библиотеки для работы с ним
     
  20. Like
    Alexander отреагировална Pax Beach в Простой пример работы с MS Word в Delphi FMX   
    Сделал пример приложения для работы с Microsoft Word из приложения Delphi.
    Такое приложение может использоваться для обмена данными между объектами семейства Microsoft Office.
     
    Исходные коды приложения помогут вам понять, как работать с объектной моделью Microsoft Word.
    Чтобы лучше разобраться с нюансами Word, предлагаю ознакомиться со справочником Word VBA reference на MSDN.
    Проект создан в среде FireMonkey Delphi Berlin 10.1
    Протестирован в MS Word 2010, 2016, Windows 7x64 и 10x64.
    Чтобы посмотреть пример, просто распакуйте zip-файл проекта и щелкайте по порядку кнопки на форме.

     
    Скачать Delphi Word Test
     
    WordTest.zip
  21. Like
    Alexander отреагировална Brovin Yaroslav в Scanline и Draw под FMX   
    Рисовать по нажатию на кнопке нельзя на канве формы.  Рисовать на форме можно только в рамках общего процесса отрисовки. А именно в события OnPaint или методе Paint.  
  22. Like
    Alexander отреагировална Brovin Yaroslav в [Статья] Жизненный цикл объектов в Delphi. Часть 1. Windows, OSX. Что же использовать Destroy, Free, FreeAndNil или DisposeOf?   
    Ссылка: http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_1_windows_osx-ru/ Автор: Ярослав Бровин С появлением мобильных платформ в мире Delphi, произошли серьезные изменения в жизненном цикле объектов. Послужившие причиной многих проблем и вопросов, а как правильно кроссплатформенно удалять объекты. В этой статье детально рассматриваем жизненный цикл объектов на разных платформах и даём ответы на важные вопросы, которые могут побеспокоить даже опытных Delphi разработчиков.
  23. Like
    Alexander получил реакцию от Kitty в Модели из каких программ поддерживает Firemonkey?   
    Вы спрашивали про модели,  а не про растровые рисунки
  24. Like
    Alexander получил реакцию от Rusland в Перспективы RAD   
    Разные. Человек среду использует, судя из поста, как "чёрный ящик" , он туда код оттуда форма. 
    Да и суть фразы про линух в другом- как только берутся за реализацию в линух после этого Delphi загибается. Спорный момент - для Delphi это только второй подход к линукс. 
     
    Delphi не первый раз "хоронят", так что - "поживем увидим, выживем учтем". Тенденция направленности маркетинга мне абсолютно не нравится, ставка сделана на корпоративный сектор. С такими ценами, в нашей стране по крайней мере,  нет смысла развиваться индивидуальному разработчику. 
  25. Like
    Alexander получил реакцию от Steepe_Hare в Модели из каких программ поддерживает Firemonkey?   
    Тут можно прочитать
×
×
  • Создать...