-
Постов
187 -
Зарегистрирован
-
Посещение
-
Победитель дней
10
Весь контент RoschinSpb
-
TImageList Как работает TImageList c TButton ?
RoschinSpb ответил Vitaldj вопрос в TImageList - с XE8
Поменять размер картинки можно путем изменения стиля. Вот результат: Можно пойти и традиционным путем и просто вставить в кнопку контрол TGlyph Если в каких-то стилях не отображается, или отображается не так красиво, как хотелось бы, то надо сообщить в QC. Проблема скорее всего в стиле. Возможно в него просто забыли добавить TGlyph. P.S. по предыдущему вопросу, что умолчательный размер картинки 16 рассчитан на кнопки умолчательного размера. Вот как это выглядит в VCL -
Может быть скриншот добавите? Что за видеокарта? Какая версия винды?
-
Если случится так, что проект будет известным и успешным, то весьма вероятно скоро придет овчарка с милиционером чтобы проверить лицензионность всего ПО (прецеденты с маскишоу были). Если ваш проект будет широко популярен среди пары родственников, то не беспокойтесь ни кто за Вами черный воронок не вышлет, разве что муки совести будут посещать по ночам.
-
Вообще всегда приходит либо KeyChar, либо Key. Вроде бы об этом написано в тут и тут. Key - это код виртуальной клавиши vkXXX. Он зависит от конкретной нажатой клавиши, при чем на разных платформах он приводится к виндовым эквивалентам. KeyChar - это символ который может быть изображен где-нибудь в поле ввода. Он зависит от текущего языка, раскладки, IME, способа ввода (в числе прочего можно использовать голосовой ввод) и еще неизвестно чего, короче его подставляет система по не известным в общем случае правилам. Сделано так специально, чтобы не путали и не пытались выводить в виде текста букву А, когда нажато сочетание клавиш Ctrl+A. Эти два параметра принципиально по разному обрабатываются.
-
Если мы растягиваем по ширине, то что-то мы должны обрезать. У Rectangle1 делаем ClipChildren = True А Image1 выравниваем по вертикали по центру Align = VertCenter В коде получаем масштаб исходя из ширины, а высоту ставим согласно полученного масштаба. В результате верхняя и нижняя части картинки может обрезаться. Если делать Align = Top, Bottom, то можно обрезать только нижнюю и только верхнюю часть картинки. Т. е. получается что-то типа этого object Rectangle1: TRectangle Align = Top ClipChildren = True Height = 150.000000000000000000 Margins.Left = 5.000000000000000000 Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Position.X = 5.000000000000000000 Position.Y = 5.000000000000000000 Width = 374.000000000000000000 object Image1: TImage MultiResBitmap = < item end> Align = VertCenter Height = 274.000000000000000000 Position.Y = -62.000000000000000000 Width = 374.000000000000000000 WrapMode = Stretch end end object Button1: TButton Align = Top Height = 44.000000000000000000 Position.Y = 155.000000000000000000 TabOrder = 1 Text = #1055#1086#1076#1075#1088#1091#1079#1080#1090#1100 Width = 384.000000000000000000 OnClick = Button1Click end procedure TForm1.Button1Click(Sender: TObject); var Scale: Single; begin if i=3 then i := 1 else i := i+1; Image1.BeginUpdate; try // Load image InStream := TResourceStream.Create(HInstance, 'Test_' + IntToStr(i), RT_RCDATA); try Image1.Bitmap.LoadFromStream(InStream); Scale := Image1.Width / Image1.Bitmap.Width; Image1.Height := Image1.Bitmap.Height * Scale; finally InStream.Free; end; finally Image1.EndUpdate; Invalidate; end; end;
-
Когда вы загружаете картинку (в design time), то картинка подвергается изменениям. Обратите внимание на вторую строчку окна редактора IDE. Там по умолчанию выбрано Custom Size. Еще есть поля Width и Height Алгоритм работы при загрузке картинки в IDE примерно следующий: Если Width и Height равны 0 (по умолчанию), то эти размеры становятся равными размерам загруженной картинки поделенным на масштаб. Загружаемая картинка масштабируется таким образом чтобы соответствовать размерам Width и Height умноженным на текущий масштаб. Если картинка меньше, то она сжимается, если больше, то растягивается, а края заполняются прозрачным цветом. Все пиксели картинки которые имеют выбранный цвет TransparentColor заменяются на прозрачный черный цвет. Модифицированное таким образом изображение хранится в fmx-файле. Т.е. размеры хранящегося в fmx-файле изображения могут отличаться от размеров исходного изображения. Если вы захотите на кнопочку 16x16 поместить 10-мегапиксельную фотку, то в fmx-файле будет хранится изображение 16x16. А у Вас в примере масштабирования не происходит. Image1.Bitmap.LoadFromStream(InStream); Хранящееся изображение уже вписывается в границы TImage. Если оно меньше, то центрируется если больше, то сжимается с сохранением пропорций. В вашем примере в TImage вписывается исходное изображение из ресурса. Вы можете поместить TImage на другой контрол и установить у неё Width и Height нужных (заведомо меньших) размеров, и установить свойство Align в Center. Мне только не понятна целесообразность такого поведения. Получается в ресурсе хранятся лишние данные и всегда тратятся вычислительные ресурсы на масштабирование.