Смайлики

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

Смайлики

Сообщение Чудик » 06.09.2004 (Пн) 11:53

И опять я наткнулся на то, чего не знаю.
Хочу на форме поместить анимированный смайлик, типа :bounce: , но даже близко к этому подойти не получается. Задача решаема, как думаете?
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.09.2004 (Пн) 12:47

Имхо едва ли.
По крайней мере, её решений я нигде не видел.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.09.2004 (Пн) 12:52

Отчего же, подобных ActiveX-контролов целая куча. Можно даже и без контрола, с таймером и PictureBox.
Искать по фразе "GIF-анимация"
Lasciate ogni speranza, voi ch'entrate.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Смайлики

Сообщение Чудик » 06.09.2004 (Пн) 13:27

Ну, про таймер и PictureBox понятно, это что-то типа простой анимации в VB (или нет? - поправьте), но меня интересует непосредственно вставка готового смайлика. В этом случае, как я понимаю, необходима поддержка HTLM. А вот как ее организовать? Не знаю. Может и никак...
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.09.2004 (Пн) 13:36

Project -> Components -> Microsoft Internet Controls
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.09.2004 (Пн) 13:40

alibek писал(а):Отчего же, подобных ActiveX-контролов целая куча.

Я решил, что он хочет типа RichTextBox-а, но с поддержкой анимации. Видимо, мои телепатические способности меня вновь подвели... :-(
Изображение

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 06.09.2004 (Пн) 13:41

А-га, понятно. Дома попробую, авось, эксперимент завершиться успехом.
Век живи - век учись!
www.detal-plast.narod.ru

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 06.09.2004 (Пн) 13:44

Все - Запутался. Сбили с толку. Причем тут RichTextBox?
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.09.2004 (Пн) 13:52

Чудик писал(а):Все - Запутался. Сбили с толку. Причем тут RichTextBox?

Это ты меня сбил с толку, и я ошибочно решил, что он здесь при чём-то :-)
Не обращай внимания :-)
Изображение

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 07.09.2004 (Вт) 20:56

А есть ли смысл городить огород с Microsoft Internet Controls, когда можно взять обычный контрол для gif?
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Смайлики

Сообщение Чудик » 08.09.2004 (Ср) 7:55

А можно поподробнее? До сих пор ничего не получилось с этими смайликами. Запарился. Или я торможу. Подтолкните.
Век живи - век учись!
www.detal-plast.narod.ru

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 08.09.2004 (Ср) 9:19

tyomitch писал(а):
Чудик писал(а):Все - Запутался. Сбили с толку. Причем тут RichTextBox?

Это ты меня сбил с толку, и я ошибочно решил, что он здесь при чём-то :-)
Не обращай внимания :-)

А я обращу!!! :roll:
Где-то в начале лета я уже задавал вопрос в форуме по вставке изображений со смайлами в RichEditBox. Тогда мне толком так никто и не ответил, а очень хотелось бы увидеть пример вставки смайла в текст в ричедите.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 08.09.2004 (Ср) 9:53

2Ruslan Demidow:
попробуй через буфер обмена, код не проверял :oops:
Код: Выделить всё
Private Const WM_PASTE = &H302
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, lp As Any) _
As Long

Private Sub Command1_Click()
Dim pic As StdPicture
Set pic = LoadPicture("d:\a.bmp")
Clipboard.Clear
Clipboard.SetData pic, vbCFBitmap

SendMessage RichTextBox1.hwnd, WM_PASTE, 0, 0
End Sub

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 08.09.2004 (Ср) 10:19

Вопрос - а в этом случае анимация будет поддерживаться?
Век живи - век учись!
www.detal-plast.narod.ru

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.09.2004 (Ср) 10:29

Нет, не будет.
Есть пример, в котором в RTB имеется анимированный смайлик. Но насколько я помню, в нем создано несколько RTB, один из которых видимый, остальные невидимые. И в каждый из них вставлены фреймы GIF. И таймер переключает видимый RTB.
Lasciate ogni speranza, voi ch'entrate.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 08.09.2004 (Ср) 10:42

Ну, что - если нет иного выхода придется страдать непосредственно таким образом. Хотя ой как не хотелось!!!!!!!
Век живи - век учись!
www.detal-plast.narod.ru

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.09.2004 (Ср) 10:44

А чем плох AniGif.ocx?
Если не хочется таскать с собой компонент, можно написать свой и использовать его внутри exe-шника.
Lasciate ogni speranza, voi ch'entrate.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 08.09.2004 (Ср) 10:49

Эта идея лучше. Сам еще, видно, не в состоянии дойти. А про контрол не знал, хотя все-таки свой будет лучше.
Век живи - век учись!
www.detal-plast.narod.ru

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 08.09.2004 (Ср) 12:22

Шурик писал(а):2Ruslan Demidow:
попробуй через буфер обмена, код не проверял :oops:
Код: Выделить всё
Private Const WM_PASTE = &H302
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, lp As Any) _
As Long

Private Sub Command1_Click()
Dim pic As StdPicture
Set pic = LoadPicture("d:\a.bmp")
Clipboard.Clear
Clipboard.SetData pic, vbCFBitmap

SendMessage RichTextBox1.hwnd, WM_PASTE, 0, 0
End Sub

Ок. Попробую. Спасибо.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.09.2004 (Чт) 9:14

Шурик писал(а):2Ruslan Demidow:
попробуй через буфер обмена, код не проверял :oops:
Код: Выделить всё
Private Const WM_PASTE = &H302
==== Сгрызено моей собакой =====
SendMessage RichTextBox1.hwnd, WM_PASTE, 0, 0
End Sub

Спасибо. Код работает. Но смайлики круглые, gif-файлы вставляются квадратные. Всё что не входит в круг смайла (т.е. фон) - чёрное. На белом фоне смотрится не очень. Хочу сделать так, чтобы фон смайла был такой же как и фон текста в ричедите. Я так понял, что это нужно через API делать, но как? Ещё ни разу с графикой не сталкивался.
2 All:
Принцип я представляю себе так:
1. Берём первую точку из картинки. Пиксел 1,1.
2. Получаем цвет этой точки.
3. Заливаем все точки с цветом точки 1,1 цветом фона ричедита.
Ни первое, ни второе, ни третье я ещё ни разу в жизни не делал. Даже не знаю с чего начать. Помогите плиз.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.09.2004 (Чт) 14:34

Ну так что, так никто и не ответит на мой вопрос: как запихнуть смайлики в RTB? :(
Последний раз редактировалось Ruslan Demidow 09.09.2004 (Чт) 14:35, всего редактировалось 1 раз.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2004 (Чт) 14:35

Ruslan - можно прямо в рантайме из bmp сделать иконку. Пример был на vbrussian, я линк уже постил в тему в трёпе, где иконки собирались конвертировать.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.09.2004 (Чт) 14:42

tyomitch писал(а):Ruslan - можно прямо в рантайме из bmp сделать иконку. Пример был на vbrussian, я линк уже постил в тему в трёпе, где иконки собирались конвертировать.

Поищу, спасибо.
Но возник ещё один вопрос: на данный момент смайлы хранятся в ImageList. Оттуда загружаются в переменную pic as stdPicture.

Код: Выделить всё
Sub ShowSmailes()
    Dim pic As StdPicture
    Dim sSmail As String
    Dim sStart As Long, i As Integer
    Dim arrSmail(1 To 5)
    arrSmail(1) = ":)"
    arrSmail(2) = ";)"
    arrSmail(3) = ":("
    arrSmail(4) = ":-("
    arrSmail(5) = "%)"
    For i = 1 To UBound(arrSmail)
        SmailImageList.BackColor = MsgTextBox.BackColor
        Set pic = SmailImageList.ListImages("Smail" & i).Picture
        With MsgTextBox
            Do While .SelStart <> 0
                .SelStart = InStr(1, .Text, arrSmail(i)) '- 1
                If .SelStart <> 0 Then
                    .SelStart = .SelStart - 1
                    .SelLength = Len(arrSmail(i))
                    Clipboard.Clear
                    Clipboard.SetData pic
                    SendMessage .hwnd, WM_PASTE, 0, 0
                End If
            Loop
            .SelStart = 1
        End With
    Next i
End Sub


Но окантовка выходит чёрная. Если у пользователя фон будет чёрный - тогда всё пучком, если же пользователь выберет другой цвет фона у RTB, тогда эти смайлы не будут радовать глаз пользователя, а только раздражать как грязное пятно на чистом окне. :(
Хотелось бы избежать этого.
Я вот думаю : существует ли более лёгкий и простой путь добиться желаемого, кроме того который предполагаю я?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2004 (Чт) 15:00

Если просто заменить строку
Код: Выделить всё
Set pic = SmailImageList.ListImages("Smail" & i).Picture

На
Код: Выделить всё
Set pic = SmailImageList.ListImages("Smail" & i).ExtractIcon

- не поможет?
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.09.2004 (Чт) 15:50

tyomitch писал(а):Если просто заменить строку
Код: Выделить всё
Set pic = SmailImageList.ListImages("Smail" & i).Picture

На
Код: Выделить всё
Set pic = SmailImageList.ListImages("Smail" & i).ExtractIcon

- не поможет?

В строке Clipboard.SetData pic ругается на неверный формат буфера обмена. Если поставить Clipboard.SetData pic, vbCFBitmap то же самое.
Я попробовал все форматы - не принимает с ExtractIcon.
Видимо нужно как-то по другому в RTB вставлять рисунок/иконку (не через буфер обмена).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2004 (Чт) 18:08

Ещё один вариант - взять данные иконки (GetIconInfo), скинуть hbmColor в отдельную битмапу, поверх него нарисовать фоновый цвет с маской из hbmMask (PatBlt), потом из полцучившегося битмапа сделать Picture (OleCreatePictureIndirect), и его уже кинуть в буфер :-)
Изображение

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 09.09.2004 (Чт) 23:11

Хм... А не проще .gif файл открыть, раскодировать и востпроизводить спокойно анимацию. А можешь и контрол такой написать. Если интересует строение .gif файла, могу выслать.
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.09.2004 (Чт) 23:27

Zer писал(а):Хм... А не проще .gif файл открыть, раскодировать и востпроизводить спокойно анимацию. А можешь и контрол такой написать. Если интересует строение .gif файла, могу выслать.

Если бы это для меня было так же просто как отрыть на чтение бинарный файл я бы так и поступил. Но с .gif'ами я не работал ещё ни разу, поэтому и спрашиваю. Я вот думаю: может быть на формат содержимого клипборда ругается потому что в имидж-листе хранятся изображения загруженные из гифов? Попробуй с bmp.
По поводу воспроизведения анимации - не до неё пока: мне бы нормально смайлы вставить в RTB... Без чёрной окантовки. Хотя в ArtIcons вместо окантовки показывает прозрачный фон.
Но от примера открытия гифа и показа его не откажусь.
Спасибо.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.09.2004 (Чт) 23:29

tyomitch писал(а):Ещё один вариант - взять данные иконки (GetIconInfo), скинуть hbmColor в отдельную битмапу, поверх него нарисовать фоновый цвет с маской из hbmMask (PatBlt), потом из полцучившегося битмапа сделать Picture (OleCreatePictureIndirect), и его уже кинуть в буфер :-)

Во загнул. :) Я текст понял только в двух частях твоего повествования: до первой запятой и после последней запятой. :oops: :)
Но от примера, хотя бы схематичного (скелета) я не отказался бы.
Я не прошу сделать всё за меня (о чём возможно может кто-нибудь подумать). :roll:
Последний раз редактировалось Ruslan Demidow 09.09.2004 (Чт) 23:32, всего редактировалось 1 раз.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2004 (Чт) 23:32

Ruslan: нет, иконку в буфер действительно невозможно кинуть. То, что она из гифа, тут не при чём.
Готовый пример чтения гифа тоже есть на vbrussian
Изображение

След.

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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 23

    TopList  
cron