Перейти к содержанию
  • 0
Вадим Смоленский

Меняющееся изображение на кнопке

Вопросы

TSpeedButton в старых версиях Delphi можно было снабдить четырьмя иконками (все хранились как одно изображение в свойстве Glyph) для четырех состояний кнопки: 1) неактивна, 2) активна, 3) нажата, но не отпущена, 4) остается нажатой. Я активно пользовался этой функциональностью, но сейчас ее поддержки не вижу. Теперь, судя по всему, всё делается через TImageList. Возникает два вопроса.

1. Как наилучшим образом реализовать описанную функциональность в FMX? Должен ли я расписать всё в коде через смену ImageIndex, или же существуют некие опции, которых я не разглядел? А может быть, появились какие-то новые способы (через эффекты, фильтры и т.д.) визуально подчеркнуть состояние кнопки? Мне всего-то и нужно, что менять цвет одноцветного символа на кнопке (серый, черный, фиолетовый, красный).

2. Растровое изображение, подгруженное из TImageList, автоматически масштабируется по размерам контрола и выглядит слегка размытым. Мне же хотелось бы видеть на кнопке оригинальный битмэп в исходных размерах, с четкими линиями. Есть ли способ отключить масштабирование?

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


Ссылка на сообщение

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

  • 0

но ведь контрол на разных девайсах будет разных размеров. соответственно и битмап приходится масштабировать

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


Ссылка на сообщение
  • 0

контрол на разных девайсах будет разных размеров

Меня на данном этапе интересуют только Windows и Mac, в перспективе Linux. Полагаю, на всех настольных компьютерах контрол будет одного размера. Ошибаюсь?

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


Ссылка на сообщение
  • 0
52 минуты назад, Вадим Смоленский сказал:

контрол на разных девайсах будет разных размеров

Меня на данном этапе интересуют только Windows и Mac, в перспективе Linux. Полагаю, на всех настольных компьютерах контрол будет одного размера. Ошибаюсь?

ошибаетесь

1) скейлы есть и в Windows и в Mac

2) Линукс не скоро станет поддерживать GUI

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


Ссылка на сообщение
  • 0

Да, трудно угнаться за прогрессом тому, кто двадцать лет назад освоил Delphi 2. Но необходимо.

А про грядущую поддержку Линукса Embarcadero уже все уши прожужжало. Что же это будет за поддержка без GUI?

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


Ссылка на сообщение
  • 0
1 час назад, Вадим Смоленский сказал:

Что же это будет за поддержка без GUI?

консольные приложения, линукс сервера. в продакшене GUI не используется

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


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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

    • От Вадим Смоленский
      Отчего-то, если задать TMediaPlayer.FileName с расширением "mp4", то уже при запуске приложение валится с сообщением "Unsupported media file". Причем в секции initialization юнита FMX.Media.Win присутствует и при запуске отрабатывает такой оператор:
      TMediaCodecManager.RegisterMediaCodecClass('.mp4', SVMP4Files, TMediaType.Video, TWindowsMediaCodec);
      Запускаю под Windows. Файлы *.avi проигрываются без проблем
    • От Вадим Смоленский
      Проблема обозначена в заголовке. Подробнее: при дефолтных установках TFDConnection.ResourceOption  (включенных EscapeExpand, MacroCreate, MacroExpand, ParamCreate, ParamExpand) функция Locate возвращает False. При отключении этих параметров Locate падает с сообщением "Unrecognized token {"
      Вынужден вместо Locate использовать Filter, очень сильно проигрывая в скорости. Хотелось бы все-таки понять, в чем тут дело.
       
    • От Вадим Смоленский
      Наверное, детский вопрос задам, и все-таки. Вдруг обнаружил, что в моем проекте никакие блоки try...except не срабатывают. Видимо, дело в каких-то настройках — но в каких именно? Иду в Options => Debugger Options => Embarcadero Debuggers => Native OS Exceptions, пробую там менять установки, толку никакого. Более того — пытаюсь искусственно спровоцировать падение делением на ноль — и вообще никакого падения не происходит, деление на ноль дает ноль! Такая же примерно ерунда с попыткой устроить переполнение.
      Ткните меня в причину носом кто-нибудь, пожалуйста.
      UPD  Через два дня хаотичных экспериментов с настройками всё прочихалось, и exceptions благополучно работают. В чем было дело, так и не понял.
    • От Вадим Смоленский
      У одного из тестировщиков, под Windows, моя сборка регулярно падает с такой ошибкой:
      Cannot create rendering target for 'TCanvas2D2'
      В свое время я и сам с этим сталкивался. У себя поборол уменьшением размеров всех TBitmap ниже некоторого предела. Померили максимальный размер TBitmap на компьютере тестировщика функцией TCanvasManager.DefaultCanvas.GetAttribute(TCanvasAttribute.MaxBitmapSize), получилось 8192. На моем компьютере столько же — однако у него падает, а у меня нет. Причем падает не при отрисовке изображения, а уже потом, при каких-то случайных действиях, с отрисовкой не связанных. Всякий раз непредсказуемо. Но он заметил, что если на форму выведено больше крупных изображений, то падает быстрее.
      Как это трактовать и что с этим делать?
    • От Вадим Смоленский
      Узнал, что в UWP API включены средства для получения уникального идентификатора компьютера. Это юнит Windows.System.Profile, класс HardwareIdentification, метод getPackageSpecificToken. Существуют ли способы обратиться к этим средствам из Delphi?
      Вообще, я привык считать, что такая идентификация компьютера в принципе невозможна, в отличие от мобильных устройств. Но прогресс, как известно, не остановить.
    • От Вадим Смоленский
      Для задач, связанных с вводом японского текста, мне нужно научиться перехватывать системное сообщение WM_IME_NOTIFY. Насколько могу судить, в FireMonkey эти вещи делаются (если вообще делаются) принципиально иначе, нежели в VCL. Конкретного ничего не нагуглил. Не поможет ли кто?
    • От slav_z
      У меня для приложений написанных на FireMonkey не вызывается меню игры windows. Для VCL все в порядке. XE8. Если у кого есть решение этой проблемы, поделитесь пожалуйста. (комбинация клавиш Win+G при запущенном приложении)
    • От POV
      Винда 10, два компа (рабочий ноут и планшет от мелкософта - у первого 100% экран, у другого 200%).
      Исходя из габаритов разных там компонентов и другой формы, рассчитываю Top и Left интересующей меня формы. На ноуте выводится где и хотел, а на планшете выше и левее. Смещение не кратно никак масштабу. В доступе планшета нет, как отлаживать не придумаю.
      Косяк всё же в в масштабе может быть или иное?
    • От Вадим Смоленский
      В феврале я сетовал, что мое Windows-приложение не хочет нормально запускаться в Linux под Wine 3.0. Но время идет, вышел Wine 3.6 - и теперь один из тестировщиков радостно сообщил, что всё заработало, за вычетом одного досадного момента. А именно: приложение способно сохранять фокус ввода лишь долю секунды, потом теряет. Соответственно, невозможно ничего ввести в текстовые боксы, разве только одну-две буквы. Можно щелкнуть по заголовку приложения, оно опять получит фокус - и через мгновение снова потеряет. Куда именно при этом переходит фокус, непонятно. Тестировщик утверждает, что только мое приложение ведет себя так, все остальные работают нормально.
      Нет ли у кого-нибудь идей? Что нужно проверить?
    • От Вадим Смоленский
      В декабре я задавал здесь вопрос о борьбе с перехватами нажатий клавиш компонентом TWebBrowser. Продвинутый пользователь Kami посоветовал тогда, раз уж меня интересует только Windows, поставить хук на клавиатуру. Поделился полезной ссылкой. Добавил, что можно еще много чего нагуглить. Что-то действительно нагуглилось - но не в том объеме, чтобы я смог четко понять, как это следует делать. Вопросов много. Куда именно должна быть воткнута функция KeyboardProc? Что в ней должно содержаться, чтобы управление передавалось уже написанному обработчику события FormKeyDown? Многие также упоминают о возникающих проблемах с юникодом, и хорошо было бы понять, как уберечься от них.
      Буду очень признателен, если кто-нибудь осветит эту темную для меня материю.
  • Последние посетители   0 пользователей онлайн

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

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