Перейти к содержанию
  • Регистрация
  • 0
7profy

Как добавить поддержку картинки в кнопках, если картинки хранятся в TStyleBook ?

Вопрос

Имеем: FireMonkey приложение (в XE5).

  1. Создаем TStyleBook в котором существуют несколько TImage (по типу TImageList).
  2. Бросаем на форму кнопочку TSpeedButton.

Вопросы:

  1. Возможно ли на этапе Design-time прикрутить изображение из StyleBook на эту кнопочку?
  2. Аналогично "прикрутить" изображение к TAction?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Добрый день,

 

  1. В TSpeedButton нету функции встраивания изображения. Однако, в аналогичной теме: Как добавить изображение на кнопку SpeedButton? Я рассказал, как добавить такую поддержку и интегрировать это решение с TImageList, основанные на TStyleBook. Так же в моей статье прикреплены исходники этой кнопки. (правда они были сделаны для XE3-4. Так что возможно нужно будет в uses поменять юниты)
  2. К TAction сомневаюсь. Так как тут нужен общий подход для всех контролов. Как вариант, вы можете сделать свой наследник TAсtion с поддержкой выбора картинки из TStyleBook, но потом, все равно для всех контролов, которые будут использовать картинки, нужно будет добавлять эту поддержку вручную.

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От krapotkin
      А также Cannot find style resource fir Windows.
      Воспроизведение
      1. создать новое FMX приложение
      2. кинуть TSyleBook
      3. зайти по двойному щелчку
      4. попытаться добавить платформу
      результат (1)

      5. добавить Windows, Android. Удалить Default. закрыть StyleBook editor
      6. Положить кнопку, ПКМ, Edit Custom Style
      7. Результат

       
      если же просто сначала кинуть кнопку, сделать ПКМ, Edit custom Style, то картина совсем другая

      поэтому и не находит ни Windows ни Android   Соответственно Workaround - найти в FMX Platform = 'Android' и заменить на Platform = 'AndroidL Light' Platform = 'Windows' тоже возможно надо будет заменить, но с ней проблем вроде нет пока.     Все это делал на Windows 7 x64 Pro SP1  
    • От genakust
      Здравствуйте,
      я создал свой ListBoxItem (FMX) который выглядит следующим образом:

      затем я добавил Items динамически в ListBox и получилось следующее:

      Когда я запускаю программу на Windows 10 и выбираю мышкой Item он селектируется, а если запускаю на Андроид- таблете, то я не могу выбрать (селектировать) Item.
      Подскажите пожалуйста, какие могут быть причины длы такого поведения.
      Заранее спасибо.
       
    • От Артур Мавлютов
      Всем доброго времени суток.
      Столкнулся с такой проблемой. Если подвязать StyleBook (со стилем или пустым, не важно) к форме, то при выборе даты в DateEdit начинает вылетать ошибка AV.
      Есть ли какое-либо решение данной проблемы и почему возникает данная проблема?
      Всем заранее спасибо.
       
      P.S. Использую Embarcadero RAD Studio XE10.2
    • От dnekrasov
      Механизм, который позволяет использовать иконку символьного шрифта вместо картинки на кнопках.
      Уж очень мне не нравится стандартный механизм добавления картинки на кнопку, поэтому, пару лет назад, начал искать альтернативу и остановился на символьных шрифтах (таких как FontAwesome). Вот что из этого получилось:

      IconicFontGlyph.zip 
      Под Windows работает без проблем - на других системах не пробовал.
      Как это работает
      Добавляем в проект модуль UIExt.IconicFont.pas Добавляем в проект модули описания шрифтов, которые будут использоваться (см. ниже) Описываем символ, который будет использоваться в качестве иконки (см. ниже) В обработчике  события OnApplyStyleLookup кнопки пишем одну строчку - TIconicFont.ApplyButtonStyle(TCustomButton(Sender)); Модули описания шрифтов
      UIExt.IconicFont.FA.pas -  Font Awesome UIExt.IconicFont.IM.pas - IcoMoon UIExt.IconicFont.IML.pas - IcoMoon Lindua UIExt.IconicFont.IMLN.pas - IcoMoon Linear UIExt.IconicFont.MDI.pas - Material Design Icons UIExt.IconicFont.WHHG.pas - WebHostingHub Glyphs Описание символа
      Для описания символа используется свойство StyleName (не знаю как остальные - лично я его нигде не использую). Само описание - это строка в определённом формате:
      [Короткое имя шрифта];[код символа];[размер шрифта];[цвет]
      2 первых поля - обязательны. Короткое имя шрифта можно увидеть в его модуле описания (TIconicFont.Short)
      Примеры можно увидеть на скриншотах выше (текст над кнопками).
      Ну и напоследок - небольшая демка IconicFontDemo.zip
    • От Alisson R Oliveira
      привет всем
      У меня проблема в разработке алгоритма, который знает, что кто-то здесь может мне помочь. В сценарии и следующем, у меня есть изображение, которое отображает изображения, размещенные пользователями, так как фотографии могут быть нескольких разных размеров. Мне бы хотелось, чтобы высота проспекта (Image.Height) рассчитывалась в соответствии с размером экрана мобильного телефона (Android) или его ширина и изображение занимают высоту correda без размытия изображения, детали с использованием свойства Wrapmode: = fit; а не Wrapmode: = Растянуть
       
       
      благодарный
    • От x11
      Не могу понять, что случилось в проекте с TDataModule.
      Проект мультиплатформенный. В прошлый раз сохранил, закрыл, ничего необычного. Сегодня открываю, а мне ошибку Delphi Berlin показывает.
       
      И действительно, у TImageList отсутствует свойство source. Открываю, а он выглядит по-другому, как будто из VCL.
      Закрываю проект, создаю мультиплатформенную форму, кладу TImageList на форму и о чудо - совершенно другой TImageList и свойство Source есть.
      Что случилось с моим TDataModule? Как среде дать понять, что это мультиплатформенный проект?

    • От x11
      Не знаю, куда правильно задать вопрос. Решил здесь.
      Обычная стандартная связка TImageList + TActionList+TSpeedButton.
      в TImageList загрузил картинку 32*32.
      Всё связал и она появилась у кнопки на панели.
      Обратил внимание, что картинка 32*32 маловата и я решил загрузить картинку 48*48.
      Удалил из TImageList картинку и загрузил новую. Но размер картинки на кнопке остался 32*32.
      А потом ещё и исчезла картинка из TActionList.
       
      В TImageList только одна картинка.
      Delphi Berlin.


    • От DrMzi
      Доброго времени суток!
      Собираю тестовый проект под Win, иконки вижу.
      C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Multi-Device Samples\User Interface\ListView\ListViewImageIndex
      Собираю тестовый проект под Android, иконок нет.
      Что я делаю не так ?

      Поправка. Такое поведение у apk на xiaomi mi5, запустил на Philips Xenium - иконки есть. 
       
    • От S0lexV
      Доброго времени!
      Только начал знакомится с FMX, казалось бы от VCL отличий не так уж и много но все же....
      Пытаюсь загрузить картинку в ImageViewer (в Image тоже пробовал).
      ImageViewer1->Bitmap->LoadFromFile(System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "1.bmp")); Но получаю ошибку  (failed to loading bitmap "путь_к_папке_с_файлами_приложения"  )
      В deployment загружен файл "1.bmp", remote path прописан assets\internal
      Пробовал похожим способом загрузить с помощью deployment текстовый файл  в мемо все работает!
      Когда компилю под винду - картинка грузится, под андроид:  вылетает вышеуказанная ошибка
      PS Среда C++B10 Seattle
       
    • От delphiec
      Беда, совсем беда .... Имеется на форме TListView (listviewEdit.jpg), в него динамически загружается список с картинками полученными через idhttp + TmemoryStream.
       
      ..... private nowDrawed:string; ... Item: TListViewItem; ImageObject: TListItemImage; TextObject: TListItemText; groups:array of Tgroups; ... ..... procedure Tmain.drawGroups(); var i:integer; begin try loader.Show; loader.ProgressBar.Max:=high(groups); loader.ProgressBar.Value:=0; Application.ProcessMessages; nowDrawed:='groups'; ListView.Items.Clear; ListView.BeginUpdate; for i := 0 to high(groups) do begin Item := ListView.Items.Add; TextObject:=Item.Objects.FindObjectT<TListitemtext>('Text'); TextObject.Text:=groups[i].caption; Item.Tag:=strtoint(groups[i].id); ImageObject:=Item.Objects.FindObjectT<TListItemImage>('Image'); if ImageObject.Bitmap=nil then ImageObject.bitmap:=TBitmap.Create; http.loadImage(url+groups[i].image,ImageObject.bitmap); loader.ProgressBar.Value:=i; Application.ProcessMessages; end; ListView.EndUpdate; loader.hide; except loader.hide; end; end; procedure Thttp.loadImage(link:string;bitmap:Tbitmap); var MS: TMemoryStream; begin try MS := TMemoryStream.Create; IdHTTP.Get(link,MS); MS.Position:=0; if not (bitmap=nil) then bitmap.LoadFromStream(MS); MS.Free; except end; end; Так вот, если собирать под Win64 (onWin.jpg), то всё отлично, но если под андроид (onAndr.jpg), то картинки отсутствуют. 
      При этом, если на форму бросить TImage и передавать в функцию loadImage bitmap этого Timage, то всё отображается корректно.
      P.S. Тестовое изображение в аттаче.




  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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