Как залить картинку на фон текстбокса?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Как залить картинку на фон текстбокса?

Сообщение arthur2 » 28.03.2009 (Сб) 17:56

Как залить картинку на фон текстбокса? То, что надо субклассить - понятно, а дальше?
Последний раз редактировалось arthur2 09.04.2009 (Чт) 23:18, всего редактировалось 1 раз.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как залить картинку на фон текстбокса?

Сообщение Хакер » 28.03.2009 (Сб) 18:15

Не стоит этого делать.

Даже если способ и существует (а его можно найти), нет абсолютно никакой гарантии, что он будет действовать для всех версий EDIT-а.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса?

Сообщение arthur2 » 28.03.2009 (Сб) 18:42

А если субклассить конкретно бейсиковсий эдит? Или он тоже зависит от винды?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как залить картинку на фон текстбокса?

Сообщение Хакер » 28.03.2009 (Сб) 18:55

Субклассинг это вообще подобие ООП-ного явления, называемого «наследованием». И смысл этого понятия предполагает создание подклассов (subclasses) по отношению к базовому классу-предку окна. Подклассов, имеющих доп. функциональность.

Но в принципе, каждеый класс сам определяет, насколько его можно расширять и дополнять, используя технику сабклассинга. Вон, ListView, например, имеет кучу специальных сообщений. EDIT насколько я помню, ничего подобного не имеет. Значит авторы решили, что никакая его функциональность не может быть переопределена. И всякие попытки сделать это — насилие над контролом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса?

Сообщение arthur2 » 28.03.2009 (Сб) 19:41

А что тогда посоветуешь? кроме как плюнуть на это дело и успокосться?
Артур
 
   

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Как залить картинку на фон текстбокса?

Сообщение Debugger » 28.03.2009 (Сб) 20:09

Проще написать свой текстбокс :wink:

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса?

Сообщение arthur2 » 28.03.2009 (Сб) 20:16

Так и делал...
Но эмулировать вывод текста задом наперёд - уже не справляюсь, поскольку ни одним языком с таким написанием не владею. Хоте вывенуться как-нибудь с обычным этитом.
Артур
 
   

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Как залить картинку на фон текстбокса?

Сообщение Debugger » 28.03.2009 (Сб) 20:24

Взять перерисовку Edit'а на себя?

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса?

Сообщение arthur2 » 28.03.2009 (Сб) 20:35

это как-то само по себе подразумевается :)

Но - как? Вот ссылку дали: http://www.vbaccelerator.com/home/VB/Co ... rticle.asp

До жути непонятный код :oops:
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как залить картинку на фон текстбокса?

Сообщение Хакер » 28.03.2009 (Сб) 22:20

Глянул.

Насколько я понял, там отрисовка background-картинки происходит в обработчике WM_ERASEBKGND (тогда как всё остальное рисуется после, при обработке WM_PAINT). Попробуй, для стандартного EDIT-а это наверняка (раз советуют?) работают, но в принципе, окно можно самоочищаться и в WM_PAINT.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса?

Сообщение arthur2 » 30.03.2009 (Пн) 13:38

Ещё один вариант:
http://vbnet.a55.nthosting.ru/Forum/Sho ... x?id=10799
Пример работает, но у меня тоже не получается вычленить сам принцип.

А вот с нашего форума:
viewtopic.php?p=23014#p23014
но, к сожалению, пример оттуда не качается :(
Может, у кого сохранилась копия?

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

Если по WM_PAINT, то абстрактно мне представлялось как-то так: рисуем на текстбоксе картинку, SetBkMode устанавливаем прозрачность вывода надписи, а затем вызываем старую оконную процедуру, чтобы она написала текст. Но эта логика не срабатывает.
Артур
 
   

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса?

Сообщение arthur2 » 31.03.2009 (Вт) 16:58

Помогите, пожалуйста, доделать :)

По мотивом этих топиков, попытался сделать текстбокс прозрачным:
viewtopic.php?t=20247
viewtopic.php?t=20229
viewtopic.php?p=159508

В общем, получилось вот что.
создаю текстбокс так:
Код: Выделить всё
hwTx = CreateWindowExW(WS_EX_TRANSPARENT, StrPtr("Edit"), StrPtr("ëÿ-ëÿ-ëÿ"), WS_BORDER Or WS_CHILD Or WS_VISIBLE Or &H4&, 0, 0, 150, 150, Me.hwnd, 0, App.hInstance, 0)

В субклассинге окна-родителя делаю так:
Код: Выделить всё
    Select Case uMsg
    Case WM_CTLCOLOREDIT
         ISbCls_winProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
         SetBkMode wParam, 1

В субклассинге самого эдита по сообщению WM_ERASEBKGND
не вызываю CallWindowProc и возвращаю 0

Вроде, всё получилось

За исключением одного: текст в эдите не обновляется, а новое пишется поверх старого :(

Чего ещё и как нужно обработать?
Вложения
traspTxt.zip
недоделанный прозрачный текстбокс
(45.63 Кб) Скачиваний: 157
Артур
 
   

[LEV&n]
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 113
Зарегистрирован: 17.10.2007 (Ср) 22:23
Откуда: Мариуполь

Re: Как залить картинку на фон текстбокса?

Сообщение [LEV&n] » 08.04.2009 (Ср) 20:16

Хакер писал(а):Субклассинг это вообще подобие ООП-ного явления, называемого «наследованием». И смысл этого понятия предполагает создание подклассов (subclasses) по отношению к базовому классу-предку окна. Подклассов, имеющих доп. функциональность.

Но в принципе, каждеый класс сам определяет, насколько его можно расширять и дополнять, используя технику сабклассинга. Вон, ListView, например, имеет кучу специальных сообщений. EDIT насколько я помню, ничего подобного не имеет. Значит авторы решили, что никакая его функциональность не может быть переопределена. И всякие попытки сделать это — насилие над контролом.


Тогда, вероятно ты сможешь ответить мне на интересный вопрос, программы с тулами, типа комбо запускаются в корневой папке и вне её, причём в корневой они имеют стиль виндовз, а вне стиль вин/98.
Если исключить из всех производственных звеньев дураков, то актуальность обсуждения продуктов их жизнедеятельности (дороги, пр-во и т.п.) исчезнет сама по себе.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса и не облиться краской?

Сообщение arthur2 » 09.04.2009 (Чт) 20:58

Вообще-то, названия топиков изменены довольно остроумно... но все же возник вопрос: а у кого, кроме авторов есть возможность их менять? я свое не менял :)

Или это с первого апреля остались шуточки модераторов?
Артур
 
   

[LEV&n]
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 113
Зарегистрирован: 17.10.2007 (Ср) 22:23
Откуда: Мариуполь

Re: Как залить картинку на фон текстбокса и не облиться краской?

Сообщение [LEV&n] » 09.04.2009 (Чт) 22:35

arthur2 писал(а):Вообще-то, названия топиков изменены довольно остроумно... но все же возник вопрос: а у кого, кроме авторов есть возможность их менять? я свое не менял :)

Или это с первого апреля остались шуточки модераторов?


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

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как залить картинку на фон текстбокса и не облиться краской?

Сообщение arthur2 » 09.04.2009 (Чт) 23:15

[LEV&n] писал(а):Вероятно суть Вашего юмора мне не догнать никогда

viewtopic.php?f=9&t=39248
Артур
 
   

[LEV&n]
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 113
Зарегистрирован: 17.10.2007 (Ср) 22:23
Откуда: Мариуполь

Re: Как залить картинку на фон текстбокса и не облиться краской?

Сообщение [LEV&n] » 10.04.2009 (Пт) 3:30

arthur2 писал(а):
[LEV&n] писал(а):Вероятно суть Вашего юмора мне не догнать никогда

viewtopic.php?f=9&t=39248


Это жесть!
Если исключить из всех производственных звеньев дураков, то актуальность обсуждения продуктов их жизнедеятельности (дороги, пр-во и т.п.) исчезнет сама по себе.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Mail.ru [бот] и гости: 54

    TopList  
cron