Нужно чтобы он(TImage) был таких же размеров, как и картинка в нём.
У TImage есть глюк при увеличении размеров в рантайм. Решается заданием максимальных размеров при создании компонента. Может в этом дело?
Winprogrammer, проблемма не совсем ясна. Но все же.
Эт почему они растянуты?? Может свойство Stretch включил?
Нужно, чтобы компонент TImage был таких же размеров, что и картинка внутри.
Цитата(Sunvas @ 9.1.2007, 21:27 )
image1.picture.width image1.picture.height
На форме лежит компонента для изменения размера контрола в RunTime. Пользователь может изменять размеры и положение контрола. Если контрол TImage, то при изменении размера картинка внутри TImage изменяется пропорционально (Proportional:=true), а размер самого контрола остаётся таким, каким его оставил юзер. Мне нужно что бы размер контрола был таким же как и отмасштабированная картинка в нём.
TImage scale как применить
Вопрос
VirusZ2D 6
VirusZ2D 6
Продвинутый пользователь
Пользователи
6
30 сообщений
Доброго времени суток коллеги суть такова есть TImage в (TFixedMultiResBitmap) добавляю три картинки c пропорциями
scale -1.000 размеры 32×32 картинка 1.png
scale -2.000 размеры 48×48 картинка 2.png
scale -3.000 размеры 54×54 картинка 3.png
как сделать чтоб при изменении размера рисовалась нужная картинка?
Изменено 30 января, 2020 пользователем VirusZ2D
Вопрос про Timage.
jeckp
Я пытаюсь сделать, чтото вроде окна сообщений с дополнительными наворотами. И Хочу, разместить в окне картинку, которая бы изменялась в зависимости от типа окна. Для этого я использую
Image1: TImage; ImageList1: TImageList;
В ImageList1 я загонал весь нужный мне набор картинок. Прорисовываю я их с помощью
ImageList1.GetBitmap( N ,Image1.Picture.Bitmap);
Но наступил на грабли. Первая картинка никуда не девается. Все последующие рисуются сверху на первой, в той части, котрая не явлалась фоном для первой. Я помучился с рефрешами и другими методами — не помогло. В связи с этим вопросы.
1. Я вообще правильной дорогой иду? 2. Как побороть это явление? 3. Где можно качнуть документацию (на русском ) с описанием методов и свойств всех стандарнтных компонент для Delphi 7?
приложения на Qt начали глючить
Linux Mint 17.2 KDE. Через некоторое время после включения слетает прорисовка. Меню лагает: мерцает, не все элементы прорисовываются, в долфине файлы много раз рисуются на сером фоне. Наблюдается только на приложения которые используют Qt.
Перешел на xfce, ситуация повторилась — все что работает через Qt криво прорисовывается. Пробовал использовать другой драйвер nvidia, менять opengl -> XRender, сносить конфиги в хом, отключать эффекты — всё без результата.
как решить проблему?
Использовать стабильные gtk-приложения, например.
А не замечал, какие именно приложения так себя ведут? На Qt4 или Qt5?
qt4: keepassx skype 4.3 vlc ktorrent kate VirtualBox gui manager стим (если запущен в kde, в xfce норм) на gtk есть не все приложения, в частности скайп, keepass(хотя возможно вторая версия решит проблему) и виртуал бокс
/.kde зачищать пробовали?
пробовал, не помогло. Trolltech.conf также пробовал удалять
Такая же фигня! Skype, Clementine, KTorrent, только я до прочтения этого поста не осознал, что затронуты только Qt-приложения. Началось вчера.
та же самая фигня ubuntu 15.04 @ intel началось недавно
Обновления Qt были?
Нужен список всех обновившихся пакетов за последнее время.
Проблема была замечена 29 числа(в этот день было только обновление unzip)
Глючит примерно так: 1) я создаю оконо (MainWindow) и в него DockingWindow 2) делаю своё окно, которое содержит в себе только одно — рендер DirectX во всесь его размер 3) запускаю прогу 4) приходит мелкий и пушистый зверь. писец называется 8-((( 5) ОЧИЩАЮ внеэкранный буфер директ-х 6) даже НИЧЕГО не рисуя делаю Persent ( сегодня перепробовал к нему ВСЕ возможные параметры) 7) в окне рендера появляется. что бы вы думали? ОЧИЩЕННЫЙ внеэкранный буфер, как и положенно, НО. с нарисованным ПОВЕРХ НЕГО куском (куски — всё время разные, но ВСЕ рисуются начиная с левого верхнего угла буфера — один поверх другого) DockingWindow а рядом с окном рендера красуется это самое DockingWindow 8-((((
Когда я это первый рез увидел — я был просто в шоке. через час стало смешно. через два я написал такое приложение под MFC и ещё одно — под Win32. но они НЕ глючили. я на 5 часов залез в доки по QT, но там НИЧЕГО разумного по этому поводу не нашёл. кроме того, что эта дура, видите ли, так же использует аппаратное укорение видео-карты. подозреваю, что в этом и есть проблема.
З/Ы Да, если писать не под ДХ, а под ОпенГЛ (с использованием классов QT, заточенных под это), то никаких глюков и в помине нет.
Помогите. Событие мыши компонента TImage
Поиск на форуме
Расширенный поиск
Найти все хорошие сообщения
К странице.
__________________ — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.
__________________ — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.
Почему возникает ошибка «Нет такого слота»?
Есть слоты. С ними проблем нет. Добавил по аналогии еще один.
В заголовочном файле в public slots: прописал void UserSettingsSave(); В методе void UserSettings(); прописал:
И не работает. Пишет:
QObject::connect: No such slot MainWindow::UserSettingsSave() QObject::connect: (sender name: ‘save_button’) QObject::connect: (receiver name: ‘MainWindow’)
Выше есть аналогичная строка:
Которая прекрасно выполняет свою работу и не вызывает ошибок.
Faq глюки timage
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Форум программистов > Delphi > Компоненты Delphi
Кнопка, потомок от TImage
Регистрация
Поиск по форуму
Расширенный поиск
К странице.
Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда — alarforum@yandex.ru
04.01.2008, 00:22
#1
Решил создать на основе Timage кнопку с подгружаемыми картинками, но вот что-то глючит(имено в когда кнопка как потомок). Раньше делал графические кнопки используя события мыши над компонентами( MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); ) и всё работало, а когда решил перенести их в компонент неидёт нормально. Может кто поделиться в дополнение к вопросуконсультацией как создавать графические компоненты(с упрощёными рабочими примерами, чтобы иметь опуру что делать). Для начало хочу разобраться со своим компонентом, а потом хотелось бы изучить материал(без нагромождений информацией) по созданию вообщем.
ImgBtn.pas — сам компонент; Viz.pas — Собственно для тестирования компонента без установки в палитру.
Вложения
Кнопка из TImage.rar (14.0 Кб, 46 просмотров)
04.01.2008, 02:54
#2
Просмотрел по быстрому, есть кое-какие замечания: 1. В методах SetNorml, SetMove и SetClik не нужно указывать inherited, ведь эти методы не переопределены. Какие у них могут быть «предки»? 2. Переменные X и Y (и вообще любые, которые используются объектами) не стоит делать глобальными. Ведь однотипных объектов может быть несколько, а эти переменные только в одном экземпляре! Вполне возможны ситуации, когда один объект начал «меняться» и читать/менять эти переменные, в этот момент происходит какое-то событие и вызываются методы второго подобного объекта и он тоже начинает менять эти же переменные. Когда управление возвращается первому объекту, то он, ничего не подозревая, продолжает использовать измененные не им значения. Вобщем, или создать дополнительные поля в классе, или объявлять переменные локально (в данном случае это лучше). 3. Поле FActive очень желательно инициализировать в конструкторе — директива Default False не означает, что переменная инициализируется как False, это всего лишь указания о несохранении этого значения в dfm-файле. 4. Возможно Canvas.Font := Fon лучше заменить на Canvas.Assign(Fon). А еще стоит перерисовывать картинку перед выводом надписи, иначе надписи с разными шрифтами станут накладываться друг на друга. 5. Строки в подпрограммы лучше передавать по ссылке, т.е. как const S :String
Это так, навскидку. Реально не я тестировал.
04.01.2008, 11:08
#3
Если есть желание делать на основе картинок тобиш BitMap’оп то лучше сделать два класса, а именно:
04.01.2008, 23:09
#4
05.01.2008, 00:37
#5
05.01.2008, 10:35
#6
А кто вам мешает такое сделать ? Да и вообще нет такого в gdi Jpeg так что полюбому придеться bmp
Qt/C++ — Урок 048. QThread — работа с потоками с помощью moveToThread
В предыдущей статье мы только коснулись работы с потоками , причём в том варианте, который служит больше для кастомизации самого потока, хотя и может быть использован для совершения посторонней работы, никак не связанной непосредственно с потоками. То есть вариант с наследованием от QThread и переопределение метода run() .
Теперь же мы создадим класс ExampleObject, объекты которого будут передаваться в отдельные потоки с помощью метода moveToThread() и выполняться в этих самых потоках. А полезную работу будет совершать слот-метод run(), который будет определён в данном классе. Что важно, класс объектов будет наследован от QObject .
Для того, чтобы работа в методе run() могла выполняться циклично, используем цикл while , управлять которым будем с помощью переменной boolm_running. Для удобства работы с этой переменной определяем её в качестве Q_PROPERTY. Ну а по завершении работы будем испускать сигнал finished() .
Алгоритм работы
А теперь обратимся непосредственно к работе с потоком и объектом. Алгоритм работы будет следующий:
Создаём объект QThread и объект класса ExampleObject;
Подключаем сигнал QThread::started() к методу ExampleObject::run();
Подключаем сигнал ExampleObject::finished() к слоту QThread::terminate(), чтобы по завершении выполнения полезной работы завершить выполнение потока;
Устанавливаем переменную m_running в значение true, чтобы разрешить работу цикла, иначе метод сразу завершится;
Запускаем поток с помощью метода start();
Когда нужно завершить выполнение полезной работы объекта, устанавливаем переменную m_running в значение false. Выполнение метода run() и потока в котором живёт объект завершатся автоматически и корректно.
Структура проекта и внешний вид приложения
ThreadLessonTwo.pro — профайл проекта;
exampleobject.h — заголовочный файл объекта, который будет передаваться в поток;
exampleobject.cpp — файл исходных кодов объекта, который будет передаваться в поток;
mainwindow.h — заголовочный файл главного окна приложения;
mainwindow.cpp — файл исходных кодов главного окна приложения;
mainwindow.ui — файл формы главного окна приложения;
main.cpp — файл исходных кодов с функцией main.
В приложении будет определено два объекта и два потока. С помощью интерфейса приложения мы будем задавать некоторую отображаемую в выводе qDebug() информацию, а также будем запускать и останавливать работу потоков.
Процесс создания окна приложения показан в видеоуроке.
exampleobject.h
Для начала рассмотрим содержимое заголовочного файла объекта. В данном файле объявлено три свойства Q_PROPERTY :
running — это переменная, с помощью которой будет осуществляться управление циклом в методе run() и соответственно будет влиять на завершение выполнения полезной работы объекта.
message — это строка, которая будет передаваться для вывода в qDebug() из главного окна приложения
message_2 — это вторая строка, которая также будет отображаться в qDebug(), но при этом будет использоваться и для передачи во второй поток.
Также в заголовочном файле объявлены слот-метод run(), сигнал finished() и переменная intcount, которая
exampleobject.cpp
Весь наш интерес сводится к методу run(), в котором в цикле while будет инкрементироваться счётчик count и будет выводиться информация с сообщением m_message,m_message_2 и данным счётчиком до тех пор, пока переменная m_running не будет выставлена в значение false . По выходу из цикла при завершении выполнения метода run() будет выпущен сигнал finished() , по которому завершится поток, в котором будет находиться данный объект.
mainwindow.h
В заголовочном файле главного окна приложения объявлены слоты для обработки нажатий кнопок для записи сообщений в объекты, которые будут выполняться в потоках, а также слоты для запуска и остановки потоков. Помимо этого объявим два объекта класса ExampleObject и два объекта класса QThread.
mainwindow.cpp
А теперь объединим весь предыдущий код в рабочее приложение в исходном коде главного окна приложения. В конструкторе данного класса, как уже было сказано в самом начале, необходимо подключить сигналы started() потоков к слотам run() наших тестовых объектов, а сигналы finished(), к слотам потоков terminate(), чтобы завершать работу потоков при завершении выполнения метода run().
Также присоединим сигнал посылки сообщения объекта exampleObject_1 к слоту установки сообщения exampleObject_2. Но чтобы информация могла передаваться, нужно пятым аргументом в метод connect передать флаг Qt::DirectConnection , который установит непосредственное соединение объектов и позволит выполнять передачу информации через систему сигналов и слотов .
Ну и для передачи объектов в потоки необходимо воспользоваться методом moveToTrhead().
Вывод
В результате работы приложения можно получить ниже следующий вывод qDebug() , который демонстрирует параллельную работу объектов в потоках, а также передачу информации из одного потока в другой.
Скачать проект можно по следующей ссылке: Thread Lesson Two
Лечим некоторые глюки xfce (xubuntu) которые мешают нормально работать
Может к ним беттатестером записаться? Хотя похоже, что там лучше сразу в разработчики идти и баги править. Но это так сказать лирика, а сейчас рассмотрим один из методов починить глюкодром с треем.
Итак собственно в чем проблема. Выглядит это следующим образом, иконка ktorrent в tray не отображается, а у Qt и KDE приложений свернутых в трей перепутаны клавиши (левая и правая кнопки мыши) для управления и полностью не отображаются высокие меню.
Путем экспериментов были разработаны костыли которые позволяют решить данную проблему.
1. Обновите версию xfce.
Для обновления с версии 4.10 (по умолчанию в Ubuntu 14.04 LTS) до 4.12 выполните следующие команды:
Для применения настроек необходимо выполнить выход из системы и вход заново, если система многопользовательская данную операцию необходимо повторить для всех авторизованных на данный момент пользователей или перезагружить рабочую станцию.
Проверить текущую версию xfce можно командой (от имени пользователя):
Если обновление прошло успешно, вы получите:
xfce4-session 4.12.1 (Xfce 4.12)
После обновления у вас может отвалиться переключение раскладки клавиатуры для устранения просто откройте настройки переключения раскладки и закройте их. После пересохранения переключение раскладки будет работать нормально.
Так же возможно у вас уплывет тема KDE и Qt приложений. Для исправления этой ошибки установите qtconfig командой:
# aptitude install qt4-qtconfig
От имени пользователя выполните команду:
И выберите подходящую тему оформления, например CleanLook.
Для запуска Qt-приложений с нормальным треем установите следующие пакеты поддержки службы сообщений:
после установки этих пакетов вы активируете поддержку различных средств оповещений.
Но это еще не все. Проблема с треем еще не решена, чтобы заставить Qt и KDE приложения использовать штатный трей вместо системы оповещений XFCE их необходимо запускать с параметрами:
env -i HOME=$HOME DISPLAY=$DISPLAY skype
Еще есть одна деталь. Если вы прописываете Qt-приложения в автозапуск и они сворачиваются в трэй, то добавьте задержку в 10-15 секунд.
В общем виде я просто переименовал skype в skype.bin и сделал скрипт запуска (вместо штатного skype):