Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование TImage вместо TButton

6.7K
03 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Здравствуйте уважаемые господа! Подскажите мне пожалуйста возможно ли использовать TImage вместо TButton, т.е. хочется поместить картинку и на нее нажимать как на кнопку.

Заранее благодарю.
272
03 июня 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by CaptHowdy
Здравствуйте уважаемые господа! Подскажите мне пожалуйста возможно ли использовать TImage вместо TButton, т.е. хочется поместить картинку и на нее нажимать как на кнопку.

Заранее благодарю.


Легко, обрабатывай событие click и все....Брось TImage на форму два раза по нему щелкни и обрабатывай это событие...

460
03 июня 2004 года
Berg
261 / / 27.03.2003
Цитата:
Originally posted by CaptHowdy
Здравствуйте уважаемые господа! Подскажите мне пожалуйста возможно ли использовать TImage вместо TButton, т.е. хочется поместить картинку и на нее нажимать как на кнопку.
Заранее благодарю.



А может тебе TSpeedButton с его свойством Glyph подойдет?

272
03 июня 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by Berg


А может тебе TSpeedButton с его свойством Glyph подойдет?


Нет лучше TImage в нем можно хотя бы кнопки рисовать делать подсветку и все такое, только одна беда он ресурсы кушает...Красота требует жертв

6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by vladsoft

Нет лучше TImage в нем можно хотя бы кнопки рисовать делать подсветку и все такое, только одна беда он ресурсы кушает...Красота требует жертв


А такой вот вопрос: можно ли сделать нечто вроде встроенной в приложение базы данных картинок, которые (картинки) можно лепить при желании на место существующей? Каким образом это делается?

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

Заранее благодарю за помощь!

860
04 июня 2004 года
Abell2000
138 / / 15.01.2003
Цитата:
Originally posted by CaptHowdy

А такой вот вопрос: можно ли сделать нечто вроде встроенной в приложение базы данных картинок, которые (картинки) можно лепить при желании на место существующей? Каким образом это делается?

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

Заранее благодарю за помощь!



Смотри TImageList.

6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Abell2000


Смотри TImageList.


Скажите, программно можно менять картинку на TImage? Как это сделать?

1.9K
04 июня 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by CaptHowdy

Скажите, программно можно менять картинку на TImage? Как это сделать?


Да по-моему просто загружать их одноименного с exeшником каталога - типа
TImage1->Picture->LoadFromFile("1.bmp");
потом в конце можно освободить память
TImage1->Picture->FreeImage(); так кажется
А такой вот вопрос: можно ли сделать нечто вроде встроенной в приложение базы данных картинок, которые (картинки) можно лепить при желании на место существующей? Каким образом это делается?
Опять же база данных ведь может помочь если юзер хочет выбрать нравившуюся ему кратинку, если же просто нужен калейдоскоп, но в запланированном порядке, тогда Вам дорога через генератор случайных чисел без randomize(), то есть наверное что-то типа
int a;
int R();
{
a = rand();
}
а потом сгенерированный номер связать с картинкой

6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Solomon

Да по-моему просто загружать их одноименного с exeшником каталога - типа
TImage1->Picture->LoadFromFile("1.bmp");
потом в конце можно освободить память
TImage1->Picture->FreeImage(); так кажется
А такой вот вопрос: можно ли сделать нечто вроде встроенной в приложение базы данных картинок, которые (картинки) можно лепить при желании на место существующей? Каким образом это делается?
Опять же база данных ведь может помочь если юзер хочет выбрать нравившуюся ему кратинку, если же просто нужен калейдоскоп, но в запланированном порядке, тогда Вам дорога через генератор случайных чисел без randomize(), то есть наверное что-то типа
int a;
int R();
{
a = rand();
}
а потом сгенерированный номер связать с картинкой


Мне необходимо сделать приложение, которое будет управлять асфальто-смесительным агрегатом. Под ОС QNX оно уже сделано. Необходимо сделать эмулятор этого приложения под Windows. Ни о каких картинках, лежащих на диске в читаемом формате не может быть и речи! Нужно встроить картинки в приложение. Причем картинки статичны, т.е. есть определенный набор, кроме которого нет ничего более. Я присоединяю файл приложения под Windows. Посмотрите, что оно будет.

1.9K
04 июня 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by CaptHowdy

Мне необходимо сделать приложение, которое будет управлять асфальто-смесительным агрегатом. Под ОС QNX оно уже сделано. Необходимо сделать эмулятор этого приложения под Windows. Ни о каких картинках, лежащих на диске в читаемом формате не может быть и речи! Нужно встроить картинки в приложение. Причем картинки статичны, т.е. есть определенный набор, кроме которого нет ничего более. Я присоединяю файл приложения под Windows. Посмотрите, что оно будет.


Во-первых, твоя прога без dll, и потому не запускается, во-вторых, для встраивания в программум ожет можно сделать что-то типа TableGrid невидимого visiblа, и оттуда загружать

6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Solomon

Во-первых, твоя прога без dll, и потому не запускается, во-вторых, для встраивания в программум ожет можно сделать что-то типа TableGrid невидимого visiblа, и оттуда загружать


Я извиняюсь, это была моя ошибка. Здесь можно скачать этот файл. Все необходимые файлы там присутствуют. Я сам проверил специально на другой машине, где не установлен C++ Builder 6.

Благодарю за внимание! :)

P.S. Я извиняюсь, ссылку обновил, она была не верна. Теперь ссылка верная. :)

6.7K
04 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Да! Забыл сказать, что этот файл можно открыть только с помощью программы WinRAR версии не ниже 3.0. Закачать WinRAR v.3.3 можно здесь
860
05 июня 2004 года
Abell2000
138 / / 15.01.2003
Вот пример взятый из справки buildera:

ImageList1->GetBitmap(0,Image1->Picture->Bitmap);
Это по поводу того, как менять картинки.
1.9K
05 июня 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by CaptHowdy
Да! Забыл сказать, что этот файл можно открыть только с помощью программы WinRAR версии не ниже 3.0. Закачать WinRAR v.3.3 можно здесь


Дружище, во-первых файла не нашел (может совсем тупой стал), во-вторых, к слову, не надо инсталлятор запихивать в архив - получается архив в архиве

6.7K
07 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Solomon

Дружище, во-первых файла не нашел (может совсем тупой стал), во-вторых, к слову, не надо инсталлятор запихивать в архив - получается архив в архиве


Дружище! http://kuenix.narod.ru/files/msu/input.rar - вот ссылка. Все работает, я проверил.

6.7K
07 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Solomon

Дружище, во-первых файла не нашел (может совсем тупой стал), во-вторых, к слову, не надо инсталлятор запихивать в архив - получается архив в архиве


Ну что? Нашешел файл? К слову, там не инсталлятор. Там обыкновенный exe-шник+dll-ка+все остальное необходимое (от Borland) :)

6.7K
08 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Ребята! Кто подскажет, каким образом заставить TImage визуально нажиматься? Т.е. все работает, только TImage статично. Не видно, нажимается оно или нет. Определить это можно только по исполняемому коду. Хотелось бы иметь утапливаемость TImage как у TButton.
460
08 июня 2004 года
Berg
261 / / 27.03.2003
Цитата:
Originally posted by CaptHowdy
Ребята! Кто подскажет, каким образом заставить TImage визуально нажиматься? Т.е. все работает, только TImage статично. Не видно, нажимается оно или нет. Определить это можно только по исполняемому коду. Хотелось бы иметь утапливаемость TImage как у TButton.



Тогда уже опишите, зачем вам понадобилось скрещивать ежика с удавом. Мне, например, кажется, что если нужен функционал кнопки, то лучше взять кнопку, а не рисунок.

6.7K
08 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg


Тогда уже опишите, зачем вам понадобилось скрещивать ежика с удавом. Мне, например, кажется, что если нужен функционал кнопки, то лучше взять кнопку, а не рисунок.


Ситуация следующая: есть программа, которая обслуживает систему управления асфальто-смесительным агрегатом, написанная под ОС QNX Momentics 6.2.1. Программу писал я. Необходимо написать эмулятор этой программы под Windows. Под Windows я раньше не писал вообще. Здесь примерно то, что должно получится. Необходимо использовать кнопки, окошки, меню и т.п. такого же вида как и в QNX. Соответственно в Windows таких элементов нет. Поэтому и приходится извращаться. Посмотрите пожалуйста ссылку. Т.е. должно получится нечто вроде скина, на стандартную кнопку TButton повесить рисунок, совершенно другого вида, как мне кажется отжатое и нажатое состояние. Вот такие дела... Какие будут предложения?

460
08 июня 2004 года
Berg
261 / / 27.03.2003
Скачал, посмотрел - красивая штучка этот ваш бетоно-смесительный агрегат...
Понятно теперь зачем вам кнопки...:-)
Вы и под ДОС не учились программировать? В частности кнопки рисовать? Нас вот помню учили (как раз ваш случай). Страшная мутота, но это видимо как раз ваш случай. Проблемы запрограммировать нет. Фишка типа в том, чтобы нарисовать две картинки:
1) Кнопка в обычном (отжатом) состоянии;
2) Кнопка в нажатом состоянии, которая в примитивном случае отличается от 1-ой смещением рисунка немного влево вверх и рисованием тени(черной или серой полосы) по нижней и правой границе кнопки. Это типовое решение (так выглядит кнопка "Ответить" форума, которую я сейчас нажму).
Визуально, при переключении рисунков это будет похоже на нажатие.
6.7K
09 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg
Скачал, посмотрел - красивая штучка этот ваш бетоно-смесительный агрегат...
Понятно теперь зачем вам кнопки...:-)
Вы и под ДОС не учились программировать? В частности кнопки рисовать? Нас вот помню учили (как раз ваш случай). Страшная мутота, но это видимо как раз ваш случай. Проблемы запрограммировать нет. Фишка типа в том, чтобы нарисовать две картинки:
1) Кнопка в обычном (отжатом) состоянии;
2) Кнопка в нажатом состоянии, которая в примитивном случае отличается от 1-ой смещением рисунка немного влево вверх и рисованием тени(черной или серой полосы) по нижней и правой границе кнопки. Это типовое решение (так выглядит кнопка "Ответить" форума, которую я сейчас нажму).
Визуально, при переключении рисунков это будет похоже на нажатие.


Под DOS в свое время писал довольно много, вот под Windows не довелось... Но сейчас наверстываю упущенное. :)
Это прийдется все отрисовать? В принципе не вопрос, но как-то некрасиво (это сугобо мое ИМХО). Вот в QNX на любой компонент можно было посадить рисунок. Будь то кнопка, окошко или еще что... Если более красивого решения нет, что ж, прийдется заморачиваться.

P.S. Кнопка "Ответить" форума не имеет никакого отношения к двум изменяющимся рисункам. А если я в Линуксе открою форум? Кнопочка то поменяет свой вид! А самое интересное, это когда в QNX открыть форум - все кнопочки QNX-стандарта. Это в смысле как образец отжатия/нажатия...

P.P.S. Кстати в DOS была такая библиотечка (под Borland C) которая на уровне С++ позволяла создавать приложения с окошками, кнопочками и т.п. лабудой... Вот это была, в свое время, вещь!

6.7K
09 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg
Скачал, посмотрел - красивая штучка этот ваш бетоно-смесительный агрегат...


Кстати! Если вам интересно более подробно узнать про нашу продукцию (имеется в виду продукция фирмы на которой я работаю), заходите на официальный сайт НТЦ "Информационные Системы", также вы можете посмотреть мои проекты здесь или на моем личном сайте.

Спасибо за внимание!

460
09 июня 2004 года
Berg
261 / / 27.03.2003
Цитата:
Originally posted by CaptHowdy

Это прийдется все отрисовать? В принципе не вопрос, но как-то некрасиво (это сугобо мое ИМХО). Вот в QNX на любой компонент можно было посадить рисунок. Будь то кнопка, окошко или еще что... Если более красивого решения нет, что ж, прийдется заморачиваться.


По-моему, мы о разном. Я не предлагаю вам отрисовывать ЭТО на канве как в ДОС. Я идею кинул, что надо нарисовать. Короче, алгоритм такой: рисуете в графическом редакторе свои нестандарные элементы управления в двух видах(нажата/отжата), засовываете их в TImageList или в ресурсы, а при кликах переключаете рисунки. Какое красивое решение вам надо? Если у вас картинка нестандартная, то нарисовать же ее все равно кто-то должен.

6.7K
09 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg

По-моему, мы о разном. Я не предлагаю вам отрисовывать ЭТО на канве как в ДОС. Я идею кинул, что надо нарисовать. Короче, алгоритм такой: рисуете в графическом редакторе свои нестандарные элементы управления в двух видах(нажата/отжата), засовываете их в TImageList или в ресурсы, а при кликах переключаете рисунки. Какое красивое решение вам надо? Если у вас картинка нестандартная, то нарисовать же ее все равно кто-то должен.


Под красивым решением, я подразумевал следующее: в QNX создавалась форма, которую я заполнял картинками-кадрами. Потом, в любое время по необходимости я подтягивал на кнопку другую картинку. Там (в QNX) была возможность создать таймер (компонент такого же типа как и кнопка), положить его на форму и привязать к нему код. Собственно на форме его видно не было. Но код выполнялся, например, каждые 10 мс. Этот код подхватывал состояния глобальных булевых переменных (а значения переменных задавались через другой программный блок, т.е. грубо говоря анализировались состояния портов плат цифрового ввода/вывода), анализировал их и в зависимости от значения прорисовывал соответствующую кнопку или еще чего-нибудь. Например так:

Код:
...
ApDBase_t *db;
...
bool StatusKonveer, oldStatusKonveer;
...
//собственно вызов, который выполнялся по таймерному тику
int TIMER_REPEAT(PtWdget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo){
   ...
   if(StatusKonveer!=oldStatusKonveer){
      //Получаем ресурс картинку и устанавливаем ее на нужную кнопку
      PtSetResource(ABW_button_konveer, Pt_ARG_LABEL_IMAGE,
         ApGetImageRes(db, "indikator_on"), 0);
      //"Старое" значение булевой переменной
      //приравниваю текущему во избежание ненужного
      //повторения вызова картинки, т.к.
      //вызов картинки - ресурсоемкая функция
      oldStatusKonveer=StatusKonveer;
   }
   //Такие структуры идут одна за одной
   //для каждого элемента в программе,
   //который управляет механизмами (кнопки).
   ...
   return (Pt_CONTINUE);
};
...

Хочется поиметь такую же структуру в Windows. Возможно ли это? Или хотя бы нечто подобное?
460
09 июня 2004 года
Berg
261 / / 27.03.2003
Похоже, что QNX не событийно-ориентированная ОС (может некорректно выразился). В Windows таймеры нужны редко. Во всяком случае для того, чтобы поменять картинку ПРИ НАЖАТИИ на кнопку (читай происшествия некоторого события), никакие таймеры не нужны. А так есть в винде TTimer - пожалуйста.
1.9K
09 июня 2004 года
Solomon
70 / / 24.12.2003
Цитата:
Originally posted by CaptHowdy

Ну что? Нашешел файл? К слову, там не инсталлятор. Там обыкновенный exe-шник+dll-ка+все остальное необходимое (от Borland) :)


Да я про Rar3.20 с твоего сайта - с разницей в 4 кило

6.7K
09 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg
Похоже, что QNX не событийно-ориентированная ОС (может некорректно выразился). В Windows таймеры нужны редко. Во всяком случае для того, чтобы поменять картинку ПРИ НАЖАТИИ на кнопку (читай происшествия некоторого события), никакие таймеры не нужны. А так есть в винде TTimer - пожалуйста.


Вы немного неправильно поняли. Конечно же она событийная. :) Вообще это операционная система реального времени, которая применяется исключительно для содания специфических приложений - систем управления тех-процессом. В ней тоже возможно повесить отработку события нажатия на кнопку. Просто я использую такую структуру для того, чтобы программа была хорошо разбита на модули, т.е. был модульной и легко изменяемой. Вот например, написав блок отрисовки, я тем самым "забываю" о том, что нужно что-либо где-то отрисовывать. Я пишу логику тех-процесса следующим образом: анализирую состояние переменных и устанавливаю их значения в зависимости от текущей ситуации. По отношению к Windows я хочу структурно организовать программу сходным образом для облегчения переноса программного кода. Например, зачем мне переделывать уже написанный модуль логики на 4000 строк, когда его можно просто напрямую перенести в Wiondows, поскольку в модуле логики не используется ничего несовместимого - операторы if, else и анализ булевых переменных. Вот собственно почему я и хочу придерживаться такой структуры программы.

P.S. Вот на счет таймера (TTimer) - это хорошая новость! Все намного упрощается.

P.P.S. Вопрос таки остается открытым: можно ли сделать в Windows встраивание картинок в приложение (в exe-шник) и вызывать их по мере надобности? Желательно привести пример программного кода.

Заранее благодарю за помощь.

460
09 июня 2004 года
Berg
261 / / 27.03.2003
Реального времени - это круто...

Про P.P.S.: внятно объясните чем вам не подходит TImageList? То, что вы туда загрузите в design-time, будет хранится в exe-шнике.
6.7K
09 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg
Реального времени - это круто...

Про P.P.S.: внятно объясните чем вам не подходит TImageList? То, что вы туда загрузите в design-time, будет хранится в exe-шнике.


Уточняю: я только-только начал программировать под Windows. Имеется немалый опыт программирования под QNX.

Теперь по сути: расскажите, каким образом это реализуется? Я посмотрел на TImageList - туда действительно можно закинуть много картинок разных. Если можно, приведите пример его использования, т.е. как картинку из TImageList вставить в произвольный TImage. Желательно привести программный код. Во вторых, если можно подскажите, где мне взять TTimer? Как им пользоваться? Желательно тоже в примерах с кодом.

Заранее благодарю!

460
09 июня 2004 года
Berg
261 / / 27.03.2003
1)
Закидываете в ImageList1 кучу картинок. Кладете на форму Image1.
А вот так загружается 1-я картинка из ImageList1:
ImageList1->Draw(Image1->Canvas, 0, 0, 0);
2)
TTimer можно взять на странице компонет SYSTEM. Устанавливаете свойство Interval в 10000 (для 10сек.), щелкаете дважды по компонету TTimer на форме и пишите код, кот. должен выполняться каждые 10сек.
6.7K
09 июня 2004 года
CaptHowdy
22 / / 01.06.2004
Цитата:
Originally posted by Berg
1)
Закидываете в ImageList1 кучу картинок. Кладете на форму Image1.
А вот так загружается 1-я картинка из ImageList1:
ImageList1->Draw(Image1->Canvas, 0, 0, 0);
2)
TTimer можно взять на странице компонет SYSTEM. Устанавливаете свойство Interval в 10000 (для 10сек.), щелкаете дважды по компонету TTimer на форме и пишите код, кот. должен выполняться каждые 10сек.


Большое спасибо за помощь! Вы мне очень помогли.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог