Можно ли использовать иконку как картинку на кнопке tspeedbutton


Содержание

Можно ли использовать иконку как картинку на кнопке tspeedbutton?

Привет мастерам.
Изменение картинки в SpeedButtonе.
Организую работу с документом. Документ может быть в положение на доработке(1), на проверку(2), закрыть(3), закончен(4). Для каждого случая есть свая картинка и для каждого состояния есть свой ключ состояния. В компоненте ImageList загрузил подходящие картинки. Как можно изменить картинки в SpeedButtonе по ключу состояния. Например есть документ с ключом состояния 1, и когда выбирается документ в SpeedButtonе отражался картинка из ImageList а с индексом 1.

а поменять индекс религия не позволят?


> а поменять индекс религия не позволят?

А где именно, я не нашел этот пункт и как можно связать SpeedButton и ImageList

Ищи. Там есть. Точно. Так что ищи. Ищущий да обрящет.

> [3] Ywoman (24.02.11 10:58)
> Ищи. Там есть. Точно. Так что ищи. Ищущий да обрящет.

Если у ищущего Delphi 7 и SpeedButton не связан с Action, то не обрящет.

> Xmen

Попробуйте эту функцию. Писал давно. Необходимость возникала из за того, что при смене ImageIndex в Action не менялся глиф на кнопке. Параметры: битмап вашей кнопки, ImageList и индекс картинки в ImageList, которую нужно разместить на кнопке.

procedure TMainForm.SetImage(B:TBitmap; IL:TImageList; Index:integer);
var Bitmap:Graphics.TBitmap;
begin
Bitmap:=Graphics.TBitmap.Create;
try
Bitmap.W > Bitmap.Height:=IL.Height;
IL.Draw(Bitmap.Canvas, 0, 0, Index);
B.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;

> битмап вашей кнопки

Ну т.е. свойство Glyph.

procedure TMainForm.SetImage(B:TBitmap; IL:TImageList; Index:integer);
begin
IL.Draw(B.Canvas, 0, 0, Index);
end;

> [7] Ywoman (24.02.11 11:51)

Вы прочитали, то что я написал в [5]? Там я написал, почему это не работает.

Всем спосибо
Особенно Гуглу.

ImageList1.Tag := ImageList1.Tag + 1;
SpeedButton1.Glyph.Assign(nil);
ImageList1.GetBitmap(ImageList1.Tag,SpeedButton1.Glyph);

Дополнительный вопрос.
при смены картинки в SpeedButton1 картинки получаются в белом фоне хотя они в ImageList1 прозрачные.

указать цвет прозрачности, или использовать clMaroon фоном

Это где нужно указать
в ImageList1 при изменении?
или SpeedButton1

> в ImageList1 при изменении?
> или SpeedButton1

Какой-то из тебя программист ну совсем плохой.
С причинно-следственными связями у тебя совсем туго.
Садись и думай: прозрачность чего тебе нужна?
Пока не придумаешь — даже не появляйся.


> Какой-то из тебя программист ну совсем плохой.С причинно-
> следственными связями у тебя совсем туго.Садись и думай:
> прозрачность чего тебе нужна?Пока не придумаешь — даже
> не появляйся.

Мне прозрачность в SpeedButton1 нужен.
а в ImageList1 все картинки прозрачные. Когда я их использую в кнопках то нормально получается. Если я программно меняю картинки в SpeedButton1не то картинки получаются в белом фоне :(

> а в ImageList1 все картинки прозрачные.
у битмапа нет призрачности. в ImageList это просто тебе так их отображают. т.что хочешь не хочешь, а подумать насчет призрачности SpeedButton-е придется.

SpeedButton.Visible := not(1 and 4 = 0) ; — полная прозрачность :)


> SpeedButton.Visible := not(1 and 4 = 0) ; — полная прозрачность
> :)

Шутка?


> у битмапа нет призрачности. в ImageList это просто тебе
> так их отображают. т.что хочешь не хочешь, а подумать насчет
> призрачности SpeedButton-е придется.

У меня картинки в формате png.

> У меня картинки в формате png.
на диске, в файлах, может быть. но файл не есть битмап.

Ну блин где же его поставит прозрачность не мог пока найти

> Xmen (28.02.11 14:33) [17] Шутка?

Вполне корректный ответ на твой совсем некорректный вопрос.

> Xmen (28.02.11 15:03) [19] Ну блин где же его поставит прозрачность не мог пока найти

Иконка для кнопки Floating Action Button

Подскажите, как для кнопки Floating Action Button правильно сделать иконку в виде знака «+». Вроде это стандартная штука и часто видел его в разных приложениях, но в готовых иконках не нашел его.

Вопрос: 1) Как его найти и назначить кнопке, если он все же где-то есть? 2) Если стандартной иконки нет, то как его делают другие разработчики? Просто рисуют на глаз?

В инструкции по материал дизайн кнопок этот «+» нарисован на кнопке fab, хочу именно такой же.

2 ответа 2

  1. Заходите на сайт https://material.io/icons/ , находите нужную вам иконку.
  2. Добавляете в drawable своего проекта.
  3. В разметке fab добавляете строчку andro >»

Оказывается все стандартные иконки уже есть в Android Studio.

Для добавления иконки, на папке «res» жмем правую кнопку мыши. Выбираем «New — Image Asset«. Находим нужную иконку в галерее иконок. Указываем название, выбираем цвет, ставим прозрачность фона. Жмем «Далее» и «Ок«.

Выбранная иконка добавится в папку «mipmap» сразу в нескольких размерах. Нужная будет подставляться автоматически в зависимости от плотности экрана устройства.

Подключение иконки для fab кнопки делаем так:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками android button или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.12.35408

Можно ли использовать иконку как картинку на кнопке tspeedbutton?

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

zdwork
Статус: 6-й класс
Рейтинг: 788
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 454
puporev
Статус: Профессионал
Рейтинг: 294
Перейти к консультации №:

Здравствуйте ЭКСПЕРТЫ!
1) Возмжно ли создать полноценную кнопку TSpeedButton без формы с
загрузкой системной картинки (иконки) в момент появления TSpeedButton на мониторе?
2) Как создать свой обрабтчик TGauge для щелчка левой кнопкой мыши и по щелчку правой для появления контекстного меню.
С уважением,
Gin mailto:ryana3@yandex.ru

Состояние: Консультация закрыта

Здравствуйте, Gin!
1)У TSpeedButton родительский объект именно форма. Или Вы хотите эту кнопку создать прямо на рабочем столе? Пожалуйста поясните.
К Вашему сведению, на мониторе кнопка появиться не может, не предусмотрено разработчиками монитора. :)
2) «. для щелчка левой кнопкой мыши и по щелчку правой для появления. «.
Это все должно быть в обном обработчике? Или это два разных обработчика? Если два разных, то на вкладке Events эти события уже есть. Пишите в них свои обработчики.

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Здравствуйте, Gin!
1. Так. Если я правильно понял, то необходима только кнопка. Тогда надо выставить цвет формы любой. кроме обычного серого (ну или какой он там), например красный, поставить значение TransparentColor = true, TransparentColorValue = clRed, а BorderStyle = bsNone. Только при этом будет оставаться кнопка на панели задач(снизу).
2. Так. На панели инструментов Стандартная есть компонент PopupMenu, ставите его на форму, клацаете 2 раза по нему, задаёте все необходимые параметры, затем на Gauge# в инспекторе объектов на правой вкладке выбираете это самое свойство (PopupMenu) и в нём выбираете своё меню.
Что касается левой кнопки, то тут я нашёл одно решение: в общем, с интервалом 10 мс отслеживаем координаты мыши, и, если указатель на Gauge1, то заставляем обрабатывать события мышки не Gauge1 (ибо у него нет события onClick), а саму форму (по желанию можно указать другой удобный объект). Таким образом, при нажатии левой кнопкой на Gauge1 реакция будет как при нажатии на область формы. Но предупреждаю заранее, в этом коде есть небольшой глюк (после нажатия на кнопку а затем на Gauge1 кнопка залипает и разлипает только после повторного нажатия), который можно исправить, по идее, отследив движение мышки также на всех остальных объектах (кнопка, например), и передавая им «контроль» мышью, т.е. изменяя свойство Capture.

Консультировал: Полховский Александр Владимиро
Дата отправки: 16.02.2005, 17:16

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Можно ли использовать иконку как картинку на кнопке tspeedbutton?

Юзая Fire Monkey, вспоминаю далекие 90-е, когда было минимум книг по программированию и куча вопросов. Сейчас примерно такая же ситуация, когда деталей и ньюансов пруд пруди и все они стопорят творческий процесс.

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

На имеющуюся кнопку TSpeedButton добавляем компонент TImage. Получается то же, что и на скриншоте ниже.

Добавляем растровую картинку в свойстве MultiResBitmap, и располагаем TImage на Speedbutton: в примере я поставил выравнивание по левому краю, т.е. свойство Align выставил в Left. У TImage обязательно выставляем свойство HitTest в False, иначе в области картинки кнопка не будет нажиматься.

У TSpeedButton свойство HitTest должно быть выставлено в True, иначе вся кнопка не будет нажиматься.

SpeedButton Delphi как изменит картинки кнопки

Здравствуйте, может кто знает как изменить картинку одной из кнопок, остальные оставить так, как есть.
Вот этот кусок вызывает сомнения:
begin
if StrLen(PChar(ReceiveText)) >= i then
begin
if ReceiveText[i] = ‘1’ then
NewState := 1
else
NewState := 0;

if CurrentState[i] <> NewState then
begin
sb.Glyph := nil;

if NewState = 1 then
ilBtnState.GetBitmap(1, sb.Glyph)
else
ilBtnState.GetBitmap(0, sb.Glyph);

CurrentState[i] := NewState;
end;
end;
end;

Добавил ещё один TimageList с именем ilBtnState2, эта часть кода отвечает за отображение вкл/выкл в зависимости от статуса сетевого устройства, как прикрутить ilBtnState2 для одной из кнопок не могу разобраться.

Если делаю так:
begin
if StrLen(PChar(ReceiveText)) >= i then
begin
if ReceiveText[i] = ‘1’ then
NewState := 1
else
NewState := 0;

if CurrentState[i] <> NewState then
begin
sb.Glyph := nil;

if NewState = 1 then
ilBtnState.GetBitmap(1, sb.Glyph)
else
ilBtnState.GetBitmap(0, sb.Glyph);

if NewState = 1 then
ilBtnState2.GetBitmap(1, sb.Glyph)
else
ilBtnState2.GetBitmap(0, sb.Glyph);

То отображаются картинки кнопок из ilBtnState2, короче или всё или ни чего, куда копать?

Можно ли использовать иконку как картинку на кнопке tspeedbutton?

Этот компонент отображает стандартную иконку. Таких много в приложениях Office. Опять-таки никакой другой особой нагрузки этот компонент не несет. Файл с иконкой загружается также в свойство Glyph, как и TBitBtn. Аналогично работает и свойство NumGlyphs и другие свойства, отвечающие за отображение иконки. Даже не знаю, стоит ли этот компонент рассматривать подробно. Просто приведу пример программки, взаимодействующей с этими кнопками:

Здесь листинга даже никакого нет — просто нужно установить для кнопок одинаковые свойства GruopIndex, свойство AllowAllUp=false и свойство Down одной из кнопок true. Вот и все. Теперь кнопки будут как переключатели.

Надо сказать пару нехороших слов о предках TSpeedTButton — это TGraphicControl. Данный компонент графический, ресурсов не жрет. Это хорошо. Но, с другой стороны, он не может принимать фокус ввода. Этот, казалось бы, маловажный момент, приводит к ряду не очень хороших последствий. Во-первых, для кнопки нельзя настроить Shortcut. Без него, конечно, можно обойтись, особенно если есть главное меню, но все же. Во-вторых, к кнопке нельзя перейти клавишей Tab. Если первое исправляется через свойство Shortcut для TAction, то второе — никак. В-третьих, этот компонент не размещается на TCoolBar панели, которая приемлет на себя только производных TWinControl.

Это, в принципе, не так важно. Я просто предупреждаю Вас о неприятных моментах. Честно говоря, особенно меня раздражал последний факт, поскольку приятный стиль оформления Flat, но невозможно эту кнопочку засунуть на TCoolBar. Эта проблема решается созданием класса вида TSpeedButton, но производного от TWinControl. Но как не хочется лишнюю работу делать :) !

Можно ли использовать иконку как картинку на кнопке tspeedbutton?

Компонент Быстрая кнопка (TSpeedButton)

Используется при формировании панелей управления с «быстрыми» командными кнопками.

После размещения объекта на форме изображение, помещаемое на кнопку, задается в свойстве Glyph (Значок). При этом вызывается редактор, с помощью которого выбирается нужная картинка (в формате .BMP). Большой набор готовых картинок для кнопок можно найти в каталоге Borland Shared (подкаталог Images/Buttons),который автоматически создается вместе с основным программным каталогом системы Delphi 7 (рис. 4.2).

Как правило, «быстрые» командные кнопки используются группами. Чтобы объединить несколько таких кнопок, надо задать ненулевое значение для свойства Grouplndex. Кнопки с одинаковым значением этого свойства считаются принадлежащими к одной группе.

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

Перевести кнопку в нажатое состояние на этапе проектирования можно с помощью свойства Down, присвоив ему значение True.

Картинка для быстрой командной кнопки задается в свойстве Glyph. Верхний левый бит изображения считается цветом, который будет «прозрачным». Все точки изображения, имеющие такой цвет, на кнопке не отрисовываются. Так же устроена работа компонента TBitBtn, однако командная кнопка позволяет дополнительно указать, надо ли делать картинку прозрачной (свойство Transparent имеет значение True) или нет.

Свойство Flat принимает значение True, когда требуется сформировать «плоский» вид кнопки. В этом случае ее границы не видны и появляются только при наведении указателя.

Чтобы более гибко обрабатывать действия пользователя, в классе TSpeedButton имеется свойство MouselnControl, которое принимает значение True, когда указатель мыши расположен над кнопкой.

Компонент Кнопка с картинкой (TBitBtn)

Этот компонент предназначен для создания кнопки с картинкой. В системе имеется набор готовых шаблонов.

Картинка загружается в объект тем же способом, что и в случае компонента TSpeedButton. Каждая такая картинка может состоять из 1-4 частей, равных по ширине. Первая часть — изображение кнопки в обычном состоянии, вторая — изображение «отключенной» недоступной кнопки (свойство Enabled имеет значение False), третья — изображение на кнопке после щелчка мыши, четвертая — изображение на «нажатой» кнопке. Число составных частей изображения задается в свойстве NumGlyphs (от 1 до 4), Расстояние от картинки до границ кнопки (в пикселах) можно указать в свойстве Margin.

В свойстве Kind задается реакция кнопки на щелчок. Некоторые стандартные действия можно реализовать без дополнительного программирования. Соответствующие значения свойства Kind приведены ниже.

Таблица 4.34. Значения свойства Kind

bkCustom Реакция кнопки определена программистом

bkOK Закрытие формы стандартным действием. В свойство ModalResult записывается значение mrOK

bkCancel Закрытие формы с отказом от изменений. В свойство ModalResult записывается

bkYes Подтверждение изменений. В свойство ModalResult записывается значение mrYes

bkNo Отказ от изменений. В свойство ModalResult записывается значение mrNo

bkHelp Вызов раздела справочной системы в соответствии со значением, записанным

в свойство HelpContext

bkClose Закрытие формы

bkAbort Прерывание. Форма не закрывается

bkRetry Повтор попытки

bklgnore Игнорирование возникшей ситуации

bkA ll Подтверждение всех изменений

Для каждого из видов кнопки, за исключением bkCustom, в системе Delphi 7 имеет-

ся особая картинка.

ЗАМЕЧАНИЕ Способ закрытия формы, на которой расположено кнопка, определяется значением свойства ModalResuLt. Это свойство имеется и у обычной кнопки TButton.

С помощью свойство Layout можно указать расположение картинки по отношению

к тексту (заголовку) кнопки. Возможные значения указаны ниже.

Таблица 4.35. Значения свойства Layout

blGlyph Right Справа

Расстояние между картинкой и текстом (в пикселах) задается в свойстве Spacing.

У класса TBitBtn имеется новый метод Click, который моделирует щелчок на кнопке.

Он используется, когда надо закрыть форму одним из стандартных способов.

Компонент Шаблон ввода (TMaskEdit)

Этот компонент позволяет вводить данные в текстовое поле по заданному шаблону. Он полезен для приложений, где надо контролировать вводимую пользователями информацию.

После размещения компонента на форме для него надо задать структуру маски (шаблона, по которому будет осуществляться ввод) и начальное значение поля.

Структура маски может быть сформирована двумя способами; с помощью редактора, вызываемого из контекстного меню объекта — пункт Input Mask Editor (Редактор маски ввода), — или программно, заданием нужного значения для свойства EditMask, которое хранит структуру маски в текстовом виде. Рассмотрим второй способ.

Маска состоит из трех частей, разделенных точками с запятой. Первая часть — собственно маска, описывающая допустимые значения символов в конкретных позициях поля. В процессе ввода в поле могут присутствовать дополнительные символы, предназначенные для более наглядного представления информации, а также для автоматического включения в итоговый текст (табл. 4.36).

Таблица 4.36. Назначение символов первой части маски

! Если этот символ присутствует в маске, то необязательные символы вставляются перед

маской. Если отсутствует — необязательные символы вставляются после маски

Ø Все последующие символы автоматически приводятся к верхнему регистру

Все последующие символы автоматически приводятся к нижнему регистру

<> Прекращение преобразования регистра

\ Последующий символ вставляется в маску. Данная возможность необходима для добавления символов, используемых в качестве элементов шаблона

L В данную позицию разрешен только ввод буквы

I В данную позицию разрешен только ввод буквы, но ее можно оставить пустой

А В данную позицию разрешен только ввод буквы или цифры

а В данную позицию разрешен только ввод буквы или цифры, но ее можно оставить пустой

С В данную позицию разрешен ввод произвольного символа

с В данную позицию разрешен ввод произвольного символа, но ее можно и оставить пустой

О В данную позицию разрешен только ввод цифры

9 В данную позицию разрешен только ввод цифры, но ее можно оставить пустой

# В данную позицию разрешен только ввод цифры или символов +/-• Позицию можно

: В данную позицию вставляется символ, который в текущей версии Windows

используется для разделения часов, минут и секунд при записи времени

_ В данную позицию автоматически вставляется пробел

Вторая часть маски определяет, будут ли эти дополнительные символы включены в итоговый текст. Символ 0 указывает, что они не должны включаться в результат, любой другой символ разрешает их включение. Третья часть маски —символ, заполняющий позиции шаблона, которые пользователь оставил пустыми (по умолчанию используется пробел).

Символы, не включенные в табл. 4.36, вставляются в результирующий текст без изменений. В процессе ввода курсор автоматически перескакивает через них. Рассмотрим пример, в котором требуется сформировать поле для ввода московских телефонных номеров. Маска может выглядеть так:

MaskEditl.EditMask : = ‘Тел. +7 ( \0\95)000-00-00 ;*;*’.

В процессе ввода человеку достаточно указать только 7 цифр, не нажимая дополнительных клавиш. В результате в свойстве EditText объекта MaskEditl может оказаться, например, такой текст: «Тел. +7(095)123-45-67». Это свойство отличается от свойства Text тем, что поля маски, не указанные пользователем, предварительно заполняются пробелами.

Отключить использование маски можно, записав в свойство IsMasked значение False. В такой ситуации можно задать значение свойства MaxLength, определяющего максимально допустимую длину вводимого текста. Для получения текущей длины содержимого текстового поля во время работы программы (которое реально отличается от содержимого свойства EditText, форматируемого автоматически), надо обратиться к методу GetTextLen.

Метод Vat > и информации и генерирует исключительную ситуацию EDBEditError в случае несоответствия введенного текста указанной маске.

Компонент Рамка (TBevel)

Используется для создания рамок и отдельных линий оформления. Напоминает панель, но не предназначен для группировки элементов.

Свойство Shape (Образ) может принимать одно из следующих значений.

Таблица 4.37. Значения свойства Shape

Значение Форма рамки

bsBox Прямоугольник. Область внутри него отображается в соответствии со значением свойства Style

bs Frame Прямоугольник. Внутренняя область не изменяется

bsTopLine Для выделенной области показывается только верхняя граница

bsBottomLine Для выделенной области показывается только нижняя граница

bsL.eftL.ine Для выделенной области показывается только левая граница

bsRightLine Для выделенной области показывается только правая граница

bsSpacer Рамка не отображается. Значение используется разработчиками на этапе

проектирования для выделения областей под собственные нужды

Дополнительно в свойстве Style указывается форма окаймляющих линий панели:

bsLowered (вдавленные линии) или bsRaised (выпуклые линии).

Компонент Постоянный текст (TStaticText)

Основное отличие этого компонента от ранее рассмотренного компонента TLabel только в том, что он позволяет взять выводимый текст в рамку.

Форма рамки определяется свойством BorderStyle, которое может принимать одно из трех значений: sbsNone (кайма отсутствует), sbsSingle (кайма представляет собой обычную линию), sbsSunken (кайма имеет вид вдавленной области).

Компонент Фигура (TShape)

Этот компонент предназначен для отображения на форме различных геометрических фигур.

Конкретная форма геометрического объекта задается в свойстве Shape. Возможны следующие значения.

Таблица 4,38. Значения свойства Shape

Значение Форма фигуры

st Ellipse Эллипс

stRoundRect Прямоугольник со скругленными углами

stRoundSquare Квадрат со скругленными углами

Цвет фигуры (рис. 4.3) определяется кистью объекта (свойство Brush), границы фигуры — карандашом (свойство Ре n ).

Компонент Разделитель (TSplitter)

С помощью этого компонента клиентская область формы может быть разделена на несколько панелей, размеры которых допускается изменять, просто перетаскивая границы этих панелей. Активное применение разделителя в первых 32-разрядных программах для Windows 95 в свое время послужило хорошим стимулом развития технологии стыковки.

Создание разделителя выполняется в системе Delphi 7 довольно оригинально. Рассмотрим пример, когда область формы надо разделить на три части, как в некоторых программах, предназначенных для приема электронной почты. В левой части располагается список почтовых папок, справа — список всех писем выбранной папки, а в верхней части —текущее письмо. Каждую часть представим в виде панели.

Порядок применения разделителя достаточно строгий. В первую очередь на форме помешаются объекты, которые выравниваются по границам формы, вслед за каждым объектом сразу устанавливается разделитель, а последний объект выравнивается по всей оставшейся клиентской области.

На пустой форме размешаем компонент TPanel, его свойству Align (Выравнивание) задаем значение alLeft (по левой границе формы). Затем на форму устанавливается компонент TSplitter, который сразу автоматически выровняется по правой границе объекта Panell. Следующим снова размещаем компонент TPanel, который выравниваем уже по верхней границе формы — в свойство Align записываем значение аГГор.

Опять добавляем компонент TSplitter, который теперь автоматически выравнивается по нижней границе объекта Panel2. В заключение, на свободную часть формы помещаем третий компонент TPanel, который выравнивается по всей оставшейся клиентской части — свойство Align принимает значение alClient (рис. 4.4), Если теперь откомпилировать и запустить программу, то, переместив курсор на область одного из разделителей и нажав левую кнопку мыши, можно произвольно

менять размеры каждой из областей (панелей). Насколько близко к границам окна (в пикселах) можно приближать разделители, определяется в свойстве MinSize каждого объекта Spliter.

Свойство Beveled определяет, будет ли разделитель выглядеть объемным (для этого свойство должно иметь значение True).

Свойство ResizeStyle задает способ отображения на экране процесса перетаскивания разделителя. Оно может принимать одно из следующих значений.

Таблица 4.39. Значения свойства ResizeStyle

Значение Способ отображения

rsNone Предполагаемое новое положение разделителя не отображается, а размеры

областей меняются, когда пользователь отпускает кнопку мыши

rsLine Предполагаемое новое положение разделителя отображается в виде сплошной

Таблица 4.39. Значения свойства ResizeStyle (продолжение)

Значение Способ отображения

rsPattern Предполагаемое новое положение разделителя отображается в виде толстой пунктирной линии

rsUpdate При перемещении указателя мыши происходит немедленное изменение размеров соответствующих областей

Работать с данным полезным компонентом можно прямо из программы. В следующем примере форма делится на две части с помощью разделителя, динамически создаваемого в процессе работы. На форме предварительно размещены две панели:

одна выровнена по левой границе формы, а вторая помещена в правой части формы и никак не выровнена.

В момент создания формы к ней добавится новый объект (делитель).

procedure TForml .FormCreate (Sender: TObject] ,-

var Split: TSplitter;

// создаем новый объект :

// в качестве его родителя

// задаем текущую форму:

// помещаем делитель на форму —

// он не должен накладываться на левую панель:

Split.Left := Panell.Width + 5;

// выравниваем его так, чтобы он

// автоматически присоединился к этой панели:

// задаем минимальный допуск:

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

// по всей оставшейся клиентской области:

Panel2.Align i= alclient,-

// теперь делитель готов к работе

Этот пример чисто демонстрационный. Б реальной работе переменную Split надо делать не локальной, а глобальной, чтобы всегда иметь возможность освободить временно отведенную ей память. Это возможно, так как переменные типа class, как уже говорилось, на самом деле представляют собой указатели.

Компонент События приложения

Данный компонент может использоваться совместно с компонентом TActionList. Он позволяет принимать и обрабатывать все сообщения, адресованные приложению (объект Application), в одном месте. Этот компонент удобно применять, в частности, когда требуется обрабатывать сообщения Windows, Объекты класса T ApplicationEvents могут быть размещены на любых формах проекта.

Все они будут получать копии сообщений, предназначенных для программы. Эти объекты способны также обрабатывать события (табл. 4.40), которые не обслуживаются компонентом TActionList, если он тоже имеется на форме.

Таблица 4.40. События, обрабатываемые компонентам TApplicationEvents

OnAction E xecute Действие, не обслуживаемое компонентом TActionList

On ActionUpdate Состояние ожидания (Ontlpdate), не обслуживаемое компонентом TActionList

OnActivate Активизация приложения

OnDeactivate Пользователь переключился на другую программу Windows

OnException Возникновение исключительной ситуации, не обрабатываемой никаким блоком try


OnHelp Запрос справочной системы

OnHint Указатель находится над объектом, способным отображать всплывающую подсказку

Onldle Состояние ожидания (например, когда приложение ждет действия

пользователя и процессорное время не тратится)

OnMessage Получение программой сообщения от Windows

OnMinimize Приложение должно быть свернуто

OnRestore Приложение должно быть восстановлено из свернутого состояния к

OnShortCut Пользователь нажал клавишу. Приложение получает это сообщение до

посылки сообщения о нажатии клавиши элементу управления

OnShowHint Происходит вывод подсказки

После того как компонент TApplicationEvents размещен на форме, надо задать обработчик конкретных событий. Допустим, мы хотим показывать координаты щелчков мыши в пределах окна с помощью надписи Labell. Этот объект надо заранее установить на форму. Для формы можно создать обработчик события OnMouseUp, но это не позволит отслеживать щелчки на различных элементах управления внутри формы, так как переадресация соответствующих сообщений скрыта внутри ком-

понентов Da/phi 7. Для этой цели удобно применить компонент TApplicationEvents, определив реакцию на событие OnMessage. Заголовок обработчика будет выглядеть так:

var Handled: Boolean);

Здесь самый важный параметр — это Msg (его тип на самом доле называется TMsg).

Он описывает сообщение, полученное от Windows, перед тем как оно уйдет дальше в программу. Важнейшее поле типа TMsg называется message и содержит стандартный код сообщения, полученного от Windows (коды всех сообщений Windows хранятся в модуле Messages).__

В нашем случае надо –«поймать» сообщение WMJ-BUTTONUP (отпускание левой кнопки

мыши). Экранные координаты щелчка хранятся в структуре типа TMsg, имеющей имя pt (тип TPoint). Их можно предварительно пересчитать в координаты окна с помощью стандартной функции ScreenToCLient, получающей в качестве аргумента запись типа TPoint и возвращающей запись такого же типа, только с пересчитанными координатами. Целиком обработчик запишется так:

var Handled: Boolean);

if Msg.message = WM_LBUTTONUP then

Label1.Caption := IntToStr(P.x) + ‘,’ + IntToStr(P.y);

Теперь если даже на форме разместить кнопку, то при щелчке на ней надпись Labell будет отображать координаты точки щелчка.

Компонент Таблица строк (TStringGrid)

Использование многими пользователями электронных таблиц типа Excel стало практически неотъемлемой частью применения компьютеров. В системе Delphi 7 имеются два компонента, которые позволяют до некоторой степени сымитировать работу электронной таблицы, оставляя при этом, конечно, основную работу по реализации конкретных функций такой таблицы программистам.

Первый компонент — это таблица строк, позволяющая работать с текстовой информацией в двумерной таблице, имеющей столбцы и строки (их размеры можно менять с помощью мыши). Дополнительно, к каждой ячейке таблицы можно «привязать» свой объект, характеристики которого программист представит в виде строки, расположенной в этой ячейке.

Основное свойство таблицы строк — это двумерный массив Cells, позволяющий обращаться к содержимому ячеек и изменять их содержимое. Первое измерение — это номер строки, второе — номер столбца.

ЗАМЕЧАНИЕ Нумерация элементов в таблице строк начинается с нуля.

Число столбцов задается в свойстве ColCount, число строк — в свойстве RowCount. Следующий код программы изменяет размер таблицы, помещенной на форму в режиме проектирования (по умолчанию принят размер 5×5 элементов), на размер 10×10 ячеек и заполняет ячейки строками, содержащими их координаты (рис, 4.5),

procedure TForml.FormCreatefSender: TObject);

var с , г ; integer;

for с := 0 to StringGridl.ColCount-1 do

for r := 0 to StringGridl.RowCount-1 do

Обратите внимание, что левый столбец и верхняя строка, хотя и содержат текстовую информацию, фактически являются заголовочными областями. Использовать их наравне с другими ячейками не совсем правильно.

ЗАМЕЧАНИЕ Число строк и столбцов, имеющих характер заголовка, задается свойствами FixedCols и FixedRows. Если таблица не содержит заголовочной информации, эти свойство должны принимать значение 0.

Можно получить доступ ко всем элементам одного столбца или одной строки. Соответствующие свойства Col и Row имеют тип TStrings, позволяющий обращаться к нужному элементу по номеру.

Чтобы привязать к ячейке объект (наследник класса TObject), надо использовать свойство Objects, представляющее собой такой же массив, как Cells, но содержащий не строки, а объекты. Эти объекты должны создаваться, а также уничтожаться программистом вручную, иными словами, весь контроль над состоянием этого массива полностью возлагается на разработчика. Свойство Objects предоставляет только доступ к нужному объекту. Остальные свойства, предназначенные для оформления таблицы строк, приведены в табл. 4.41.

Компонент Список с флажками (TCheckListBox)

Данный список ничем не отличается от обычного списка за исключением дополнительных флажков в начале каждой строки.

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

Таблица 4.42. Свойства класса TCheckListBox

AllowGrayed Имеет значение True, если флажки списка могут находиться в промежуточном

Checked Массив состояний флажков. Отслеживаются только два состояния: включен (True)

и выключен («серое» состояние считается выключенным)

Flat Имеет значение True, если форма флажков плоская

ItemEnabled Массив допустимых состояний флажков. Если для конкретного флажка задано

значение True, то его состояние можно менять, в противном случае флажок недоступен для изменения

State Массив состояний флажков, элементы которого принимают одно из трех значений:

cbLlnchecked (выключен), cbChecked (включен), cbGrayed («серый»)

При работе со списком флажков можно обрабатывать событие OnClickCheck, которое возникает, когда пользователь меняет состояние одного из флажков.

Компонент Редактор списка строк (TVaLueListEditor)

Компонент TValueLIstEditor предназначен для создания списков строк, состоящих из пар «имя — значение». TVaLueListEditor напоминает компонент Таблица строк (TStringGrid), но он более простой.

Расположенный на форме объект TValueListEditor представляет собой таблицу из двух столбцов. В первом указывается имя, во втором — соответствующее ему значение. Название каждого столбца можно изменить в свойстве TitleCaptions.

На этапе проектирования исходная информация вводится в таблицу с помощью свойства Strings (для этого вызывается визуальный редактор пар значений). Строки, записываемые в это свойство во время работы программы, должны иметь формат «имя = значение» (например, ‘XI = 50’).

С помощью свойства KeyOptions можно ограничить возможности данного компонента, например разрешить или запретить редактирование, добавление или удаление строк. Свойство Options дает возможность подробно настроить внешний вид объекта па форме.

Когда пользователь будет менять значение в строке данного объекта в работающей программе, ему можно предложить на выбор раскрывающийся список готовых значений. Для этого необходимо сформировать собственный обработчик события OnGetLookup. В качестве параметра KeyName перелается очередное значение ключевого (первого) столбца. Программист может записать в параметр Values (тип TStrings) список соответствующих этому значению строк, которые отображаются в меню.

const KeyName: String; Values; TStrings);

if KeyName = ‘X1’ then

Ячейка такого поля в правом столбце дополнительно сопровождается небольшой кнопкой-стрелкой меню. Для добавления новой строки служит метод :

function InsertRow (const KeyName, Value: string; Append:Boolean): Integer;

для удаления — метод :

procedure DeleteRowfARow: Integer) ;

а для поиска — метод :

function FindRowfconst KeyName: string,- var Row: Integer):

Компонент Текстовое поле с подписью (TLabeledEdit)

Весьма полезный компонент. В большинстве случаев ввода сопровождаются подписями. В предыдущих версия,бовалось создавать по отдельности поле ввода TEdit и надпись TLabel, которую надо было достаточно точно и аккуратно расположить вблизи поля ввода. Теперь, с появлением данного компонента, эта проблема решена.

По своим свойствам Текстовое поле с подписью практически полностью совпадает с компонентом TEdit, но в нем появилось новое свойство EditLabel, представляющее собой вложенный компонент TLabel, который автоматически привязан к местоположению поля ввода.

Название (подпись) редактируется именно в атом вложенном объекте — в свойстве Caption.

Компонент Диаграмма (TChart)

Это очень мощный и богатый возможностями компонент, разработанный Дэвидом Бернеда (версия, включенная в систему Delphi 7, имеет номер 4.02).

Он позволяет строить красивые двух- и трехмерные диаграммы на основе различных данных, является наследником класса TPanel и наследует все свойства панели. Создать диаграмму можно двумя способами: визуально с помощью Мастера (без программирования) и непосредственно средствами Паскаля.

Начало работы. Мастер запускается командой File > New > Business > TeeChart Wizard

(Файл >• Создать >• Деловые >• Мастер диаграмм), после чего разработчику надо выполнить ряд уточнений. Сначала выбирается источник данных. Пусть он не расположен в файле, а генерируется программой — переключатель Non Database Chart (He на основе базы данных). Затем выбирается внешний вид диаграммы. Она может быть двумерной или трехмерной что определяется переключателем 2D/3D (рис. 4.9).

На следующем этапе работы Мастера флажок Show Legend (Отображать легенду) определяет наличие легенды — дополнительной панели, на которой указывается соответствие цветов частей диаграммы указанным значениям. Флажок Show Marks включает небольшие желтые подсказки у каждой из частей диаграммы.

На этом создание диаграммы заканчивается. После щелчка на кнопке Finish (Готово) в Проектировщике форм появится новая форма, на которой будет расположен объект Chartl. Он заполнен неким набором случайно сгенерированных значений (рис. 4.10),

Настройка диаграммы выполняется с помощью редактора, который вызывается двойным щелчком на объекте Chartl (рис. 4.11).

Параметры отойражения диаграммы в окне определяются на вкладке Chart (Диаграмма), состоящей в свою очередь из набора дополнительных панелей.

О Панель Series (Ряд данных) очень важна. Она позволяет объединять несколько диаграмм на одном графике с помощью кнопки Add (Добавить). При этом над значениями рядов данных можно выполнять различные операции, задаваемые на вкладке Functions (Функции): сложение (Add), вычитание (Subtract),умножение (Multiply), деление (Divide), взятие наибольшего (High), наименьшего (Low) или среднего (Average) значения (рис. 4.12).

О Панель General (Общие) содержит элементы управления для:

• экспорта изображения в файл — кнопка Export (Экспортировать);

• установки (в процентах) сдвига границ изображения по отношению к границам объекта — поля Margins (Поля);

• масштабирования — панель Zoom (Масштаб);

• прокрутки — панель Allow Scroll (Разрешить прокрутку).

О Средства панели Axis (Оси) отвечают за все, что касается определения координатных осей, их масштаба, заголовков, шага пунктирной сетки и так далее.

О Панель Titles (Заголовки) содержит средства для оформления заголовка.

О Панель Legend (Легенда) используется при оформлении внешнего вида и содержимого легенды.

О Средства панели Panel (П анель) описывают форму и визуальное представление панели-основы, на которой расположена диаграмма.

О Панель Pages (Страницы) служит для разделения диаграммы на страницы. Увеличивая число точек на странице с помощью поля Points per Page (Точки на страницу), можно подобрать оптимальное соотношение между наглядностью диаграмм и разумным числом страниц.

О Панель Walts (Границы) позволяет задать цвет и размеры границ диаграммы.

О Панель 3D описывает пространственное представление трехмерных диаграмм, С помощью нескольких движков проектируемую диаграмму можно вращать и масштабировать.

На вкладке Series (Ряды данных) в редакторе задаются конкретные параметры оформления каждого ряда данных (каждого графика, добавленного при помощи вкладки Chart). Выбор текущего ряда данных производится с помощью раскрывающегося списка Area (Область) (рис. 4.13).

задать для ряда случайные значения (Random Values), отказаться от генерации значений (No Data) или сформировать значения текущего ряда данных как результат применения некоторой функции (раскрывающийся список Function) к значениям выбранных рядов данных. Выбор рядов данных — занесение в список Selected Series

(Выбранные ряды) осуществляется с помощью кнопки >.

Программная работа с диаграммами. Рассмотрим пример создания трехмерной диаграммы и заполнения ее значениями непосредственно из программы.

На форме Forml разместим компонент TChart и вызовем редактор. Это можно сделать также из контекстного меню объекта выбором пункга Edit Chart (Изменить диаграмму).

На панели Series (Ряд данных) вкладки Chart (Диаграмма) щелкните на кнопке Add (Добавить) и выберите подходящее трехмерное представление, например Point (Точечное). На форме появится диаграмма, заполненная случайными данными. На панели Titles (Заголовки) надо указать подходящее название диаграммы и закрыть редактор.

Диаграмма связывается с программным кодом очень просто. Большинство настроек, имеющих отношение к оформлению диаграммы, формируются в редакторе, а в программе (в разделе класса TForml, где располагаются создаваемые в Проектировщике элементы управления) должен появиться новый объект — переменная Seriesl

TnnaTPointSeries, Она описывает последовательность значений, которые будут отображаться на диаграмме. Всю остальную работу система Delphi 7 берет на себя — очень удобный и простой подход.

Рассмотрим основные свойства и методы класса TPointSeries (он является наследником базового класса TChartSeries, который служит основой для всех классов, описывающих содержимое конкретных типов диаграмм). Разработчику требуются такие возможности, как добавление и удаление точки, изменение некоторого значения, очистка всех точек, получение общего числа точек и доступ к их текущим значениям.

Пусть имеется диаграмма типа Point (Точечное представление), на которой должны располагаться условные значения результатов двух экспериментов (≪Эксперимент А*- и ≪Эксперимент Б*). Эти значения вводятся с помощью двух текстовых полей, для их редактирования используется щелчок мыши на точке диаграммы. Нужны также возможности удаления точки и очистки текущего графика.

Так как требуется выводить результаты двух экспериментов (два ряда значений), надо добавить к текущей диаграмме еще один ряд. В редакторе диаграммы на панели Chart > Series (Диаграмма >- Ряд дачных) щелкните на кнопке Add (Добавить) и выберите вид представления Point (Точечное).

Примерный вид такой формы показан на рис. 4.14.

диаграммы целиком помещалась на панели Chartl, можно

немного сдвинуть левую границу области диаграммы вправо.

Для этого на панели редактора Chart >• General (Диаграмма >

Общие) можно задать значение 5% в левом поле на панели Margins

Добавление новой точки к серии выполняется с помощью метода Add, заголовок

которого выглядит следующим образом.

function AddXY (Const AXValue, AYValue: Double;

Const AXLabel: String;

AColor: TColor) : Longint;

Добавляемая точка задается параметрами AXValue и AYValue. Параметры AXLabeL и

AColor — необязательные. Первый описывает произвольное название группы, к кото-

рой будет принадлежать точка, второй — цвет этой группы. В нашем случае выберем

красный цвет для точек эксперимента А, а цвет точек эксперимента Б сделаем

синим. Функция возвращает позицию (номер) новой точки в свойстве XValues или

YVaLues (массивы значений) в зависимости от того, по какому измерению добавля-

ется на диаграмму точка.

Обработчик щелчка на кнопке Эксперимент A (Buttonl) запишется следующим образом.

procedure TForml.ButtonlClick(Sender: TObject];

‘ Эксперимент A’ , clRed) ;

Обработчик щелчка на кнопке Эксперимент Б (Button?) будет выглядеть так.

procedure TForm2.ButtonlClick(Sender: TObject);

‘ Эксперимент Б ‘ , clBlue) ;

Теперь можно запустить программу, ввести в поля значения и добавить «результаты эксперимента» на диаграмму (рис. 4.15).

Чтобы удалить ранее введенную точку или изменить ее значение, надо предварительно определить ее номер в массиве Values. Для этого по каждому ряду данных (объекты Seriesl и Series?) формируется обработчик события OnClickPointer. Его заголовок выглядит следующим образом .

procedure SeriesClickPointer(Sender: TCustomSeries; Valuelndex: Longlrit: X, Y: Integer);

Наиболее важный параметр Valuelndex содержит номер ближайшей точки ряда, около которой на диаграмме был выполнен щелчок. X и Y — это координаты точки щелчка.

Поместим на форму новый элемент—флажок Режим удаления (назовем его DeleteBox).

Когда он установлен, выбираемые точки будут удаляться (после уточняющего запроса). В противном случае текущая точка будет корректироваться в соответствии со значениями, указанными в полях ввода.

ЗАМЕЧАНИЕ Можно было бы обрабатывать щелчки и с помощью события OnClick, в котором кроме номера точки передается и состояние кнопок мыши. Анализируя это состояние, можно выполнять удаление точки по нажатию правой кнопки мыши, а корректировку значения — по нажатию левой кнопки.

Удаление элемента из ряда данных осуществляется с помощью метода Delete, имеющего единственный параметр — номер элемента. Изменение текущего значения и положения на диаграмме выполняется простым изменением содержимого соответствующих элементов массивов ValueX и ValueY. Чтобы сделанные изменения отобразились на диаграмме, надо вызвать метод Repaint (Перерисовать) для соответствующего ряда данных.

Чтобы не дублировать одинаковый текст обработчиков щелчка на двух рядах точек, добавим в класс TForml метод, который будет получать в качестве параметров номер ряда данных и индекс точки, после чего выполнять все необходимые действия. Введем в часть public класса TForml заголовок такой процедуры.

procedure SerieClick( SNum: Integer; Index: Longint );

Теперь достаточно установить на имя данного метода указатель ишши и выбрать в контекстном меню пункт Complete class at cursor (Завершить реализацию класса).

В части реализации модуля сразу появится пустая реализация данной процедуры.

В нее надо добавить проверку состояния флажка DeleteBox и в зависимости от этого состояния выполнить либо удаление точки, либо корректировку ее значения (перерисовка диаграммы осуществится автоматически).

procedure TForml.SerieClicklSNum: Integer; Index: Integer);

If DeleteBox.Checked then

if SNum = 1 then Seriesl.Delete(Index)

if SNum = 1 then

Seriesl .XValues [Index] : = StrToFloat (Editl. Text) ,-

Seriesl.YValuesI Index] := StrToFloat (Edit 2 -Text) ,-

Series2. XValues [Index] := StrToFloat (Editl .Text) ,-

Series2.YValues[Index] := StrToFloat (Edit2.Text) ,-

Тогда обработчики щелчка на точках каждого ряда данных запишутся следующим образом.

procedure TForml.SerieslClichPointer(Sender: TCustomSeries;

Valuelndex, X, Y: Integer);

procedure TForml. Series2Cl ickPointer (Sender г TCustomSeries ,-

Valuelndex, X, Y: Integer) ,-

Теперь программа позволяет с помощью щелчков удалять лишние точки и корректировать положение точек, введенных ранее.

Для удаления всех значений в ряду данных служит метод Clear.

Вызов этого метода можно вставить, например, в обработчик щелчка па новой кнопке Очистить эксперимент А и так далее.

Накинуть на QPushButton произвольную картинку

Как кошернее будет? Через стили (что я пока нашёл), или есть более другой способ?

Re: Накинуть на QPushButton произвольную картинку

документацию почитай чуть повнимательнее.

Re: Накинуть на QPushButton произвольную картинку

Через setMask(QBitmap&)? Я на верном пути?

Re: Накинуть на QPushButton произвольную картинку

Это кошерно — задавать вопросы с витиеватой формулировкой и доморощенным слэнгом, которые фиг поймешь? Что тебе конкретно надо сделать, вместо «накинуть произвольную картинку»?

Можешь добавить иконку — setIcon, а поменять внешний вид — таки да, через стили.

Re: Накинуть на QPushButton произвольную картинку

Ну, прошу прощения за «доморощенный сленг». :-)

Мне нужно полностью залить кнопку некоторой картинкой.

Re: Накинуть на QPushButton произвольную картинку

Навряд ли setMask: The QBitmap class provides monochrome (1-bit depth) pixmaps. — т.е. через setMask установишь маску для отрисовки и обработки пикселей виджета (пиксели с маской «1» будут рисоватся и реагировать на мышь).

Похоже, что из тех методов что есть у QPushButton, либо переопределить метод render (слишком низкоуровнево), либо же через стили.

Re: Накинуть на QPushButton произвольную картинку

Наследуй QPushButton и переопределяй paintEvent, в котором выводи свой рисунок, а поверх него рамку кнопки с помощью QStylePainter’a

Re: Накинуть на QPushButton произвольную картинку

Re: Накинуть на QPushButton произвольную картинку

Re: Накинуть на QPushButton произвольную картинку

Re: Накинуть на QPushButton произвольную картинку

У QPushButton нет метода setPixmap. Он есть у QLabel.

Я через QStylePainter картинку отрисовал. Правда теперь кнопка не похожа на кнопку — визуально не «нажимается». :-)

Re: Накинуть на QPushButton произвольную картинку

А можно вопрос? Есть главное окно, на ней кнопка, пару полей ввода и ТайблВиджет (ог занимет процентов 80 окна), как сделать чтобы когда изменяется размер окна, чтобы происходило пропорциональное изменени ТейблВиджет (кнопки и поля ввода оставались преждними)?

Re: Накинуть на QPushButton произвольную картинку

Если тебе нужно, чтобы кнопки и поля ввода не «расползались» относительно друг друга — используй QGridLayout вместе с QSpacerItem-ами.

Чтобы разобраться, как они (QSpacerItem-ы) функционируют — поиграйся с ними в Designer-е, так нагляднее будет. После того-же BorlandBuilder-а они несколько непривычны, но это пройдёт.

А если нет — то тупо задать полям ввода и кнопкам фиксированный размер, больше которого они увеличиваться не будут (setMaximumSize()).

Re: Накинуть на QPushButton произвольную картинку

>А если нет — то тупо задать полям ввода и кнопкам фиксированный размер, больше которого они увеличиваться не будут (setMaximumSize()).

А если кто то решит уменьшить размер формы? То пол таблицы станет невидимой. Вопрос то в том, я то то не понял, у меня вообще на при изменении формы кнопки и все элементы не подвижны

Re: Накинуть на QPushButton произвольную картинку

А в чём проблема-то? Задай самой форме минимальный размер (setMinimumSize())/ :-)

Re: Накинуть на QPushButton произвольную картинку

А чтобы они были «подвижны» при resize, нужно их запихать в QGridLayout. Посмотри про него в справке.

Re: Накинуть на QPushButton произвольную картинку

Через дизайнер это сделать нельзя? надо лесть в код?

Re: Накинуть на QPushButton произвольную картинку

Можно и через Designer (там есть компонент GridLayout), но мне привычнее сразу код писать.

Re: Накинуть на QPushButton произвольную картинку

добавил грид лайот, на него положил кнопку, выбираю превью( начинаю изменять размеры формы) — кнопка не меняет размер

Re: Накинуть на QPushButton произвольную картинку

Ага, это я сбрехал, каюсь. :-) Кнопку кидай на форму, убери с неё фокус (щёлкни на форме где-нить), потом Меню->Form->Lay Out in a Grid. Запускай preview. Profit?

Re: Накинуть на QPushButton произвольную картинку

ДАААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА АААААААААААААААААААА. наконецто, парился (переодически) с эти уже 3 недели!

Re: Накинуть на QPushButton произвольную картинку

А вот интересна, что делает команда Меню->Form->Lay Out in a Grid, она добавляет Лайот? А почему его на дезайнере (как другие) не видна?

Re: Накинуть на QPushButton произвольную картинку

Ну и хорошо. :-) Читай документацию — там многое (если не всё) описано!

Re: Накинуть на QPushButton произвольную картинку

Уж начинал подумывать о переопределении виртуальных методов типа сайз хинт, и привязка их к сигналам, и ручной расчет геометрии, но так прощщще!

Re: Накинуть на QPushButton произвольную картинку

> что делает команда.

Да я хрен его знает. В .ui файле посмотри, что там нагенерировал Designer. А мне лениво, я лучше руками сам всё распишу. :-)

Как установить иконку на qpushbutton?

Почему то при клике на кнопку не устанавливается иконка на кнопку. В чем проблема?

  • Вопрос задан более трёх лет назад
  • 1211 просмотров

Blunker: а должно лежать в папке исполнения

Вам нужно проверить (в следующем порядке):
1) Действительно ли активируется слот, если нет, то вызвать qmake.
2) Попробовать полный путь до иконки, если сработает, то файл у вас лежит не рядом с исполняемым файлом и его нужно переложить.

А глобально, откройте для себя файлы *.ui (просто создайте проект Qt Widgets Application) и файлы ресурсов. В вашем примере я не вижу ничего такого чтобы потребовало писать код руками а не накидать GUI в визуальном редакторе.

Как установить изображение на QPushButton?

Я хочу установить изображение на QPushButton , а размер QPushButton должен зависеть от размера изображения. Я могу сделать это при использовании QLabel , но не с QPushButton .

Итак, если у кого-то есть решение, то, пожалуйста, помогите мне.

Что вы можете сделать, это использовать pixmap в качестве значка, а затем поместить этот значок на кнопку.

Чтобы убедиться, что размер кнопки будет прав, вы должны повторно нарисовать значок в соответствии с размером pixmap.

Что-то вроде этого должно работать:

Вы также можете установить размер кнопки.

Вы также можете использовать:

Примечание. Это немного взломано. Вы должны использовать это только в качестве крайней меры. Значки должны быть установлены из кода C++ или Qt Designer .

Я не думаю, что вы можете устанавливать изображения произвольного размера в любом из существующих классов кнопок. Если вы хотите, чтобы простое изображение выглядело как кнопка, вы можете написать свой собственный подкласс QAbstractButton, что-то вроде:

Это старый, но он по-прежнему полезен, Полностью протестирован с QT5.3.

Будьте полезны, например, относительно пути ressources:

В моем случае я создал каталог ressources с именем «Ressources» в проекте исходного каталога.

В папке «ressources» содержатся изображения и значки. Затем я добавил префикс «Изображения» в Qt. Таким образом, путь pixmap станет:

Илон Маск рекомендует:  Mysql утилиты для mysql
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL