Картинка на кнопке

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

Картинка на кнопке

Сообщение GoGosha » 05.06.2003 (Чт) 17:15

как сделать, что-б картинка на кнопке была слева надписи(а не сверху)

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 05.06.2003 (Чт) 17:30

а никак, разве что искать другую кнопку

тут можешь посмотреть где искать эти другие кнопки
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 05.06.2003 (Чт) 17:45

Cyrax писал(а):а никак, разве что искать другую кнопку

тут можешь посмотреть где искать эти другие кнопки


Из принципа я чужие контролы юзать не буду(в крайнем случае придётся свой писать), тогда другой вопрос: может получится рисовать его какойнибудь функой.
Как получить HDC кнопки(сработает ли GetDc) и какой Api-шкой можно рисовать текст на HDC

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 05.06.2003 (Чт) 17:48

Ну текст рисуют через

Код: Выделить всё
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Private Declare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hDC As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal un As Long, lpDrawTextParams As DRAWTEXTPARAMS) As Long


А hDC кнопки... ну наверное, как GetDC на CommandButton.hWnd?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 05.06.2003 (Чт) 17:51

Код: Выделить всё
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long


Код: Выделить всё
Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long


можно попробовать эти функции...

а эта функция
Код: Выделить всё
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long

вернет hDC кнопки...

но у меня нет стопроцентной уверенности, что это сработает
попробуй, вдруг получится...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 05.06.2003 (Чт) 18:07

Cyrax писал(а):
Код: Выделить всё
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long


Код: Выделить всё
Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long


можно попробовать эти функции...

а эта функция
Код: Выделить всё
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long

вернет hDC кнопки...

но у меня нет стопроцентной уверенности, что это сработает
попробуй, вдруг получится...


Все эти три функции я знаю. А какая функция печатает текст не hDC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 05.06.2003 (Чт) 18:08

Нашёл DrawText

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 05.06.2003 (Чт) 18:10

Код: Выделить всё
Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Код: Выделить всё
Declare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hDC As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal un As Long, lpDrawTextParams As DRAWTEXTPARAMS) As Long

вот эти две функции
описание и примеры в API-Guide посмотришь
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 05.06.2003 (Чт) 18:11

Я помню, как-то получал hDC кнопки с помощью GetDc а потом пробовал поставить SetTextColor: ничего не вышло

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 05.06.2003 (Чт) 18:12

Да и ещё вопрос: можно ли нарисовать картинку на hDC не загружая её в PictureBox(и не по пикселям!)
Из переменной IPictureDisp

goro
Постоялец
Постоялец
 
Сообщения: 494
Зарегистрирован: 03.12.2002 (Вт) 11:45
Откуда: Украина, Запорожье

Сообщение goro » 05.06.2003 (Чт) 18:19

Извиняюсь если не в тему. Но как вставить в стандартную кнопку картунку. А то под ХР вообще не рисует, даже если с манифестом.
ПРЕВЕД

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 05.06.2003 (Чт) 18:19

GoGosha писал(а):Да и ещё вопрос: можно ли нарисовать картинку на hDC не загружая её в PictureBox(и не по пикселям!)
Из переменной IPictureDisp

можно конечно в памяти создать контекст устройства (DC) и внего картинку грузить...
по этому поводу могу лишь посоветовать книжки по API почитать

и еще поищи книгу Брюса Мак-Кинни "Крепкий орешек Visual Basic" в ней не плохо описана работа с API. ну и конечно же Дэн Эплман
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 05.06.2003 (Чт) 18:21

Cyrax писал(а):
GoGosha писал(а):Да и ещё вопрос: можно ли нарисовать картинку на hDC не загружая её в PictureBox(и не по пикселям!)
Из переменной IPictureDisp

можно конечно в памяти создать контекст устройства (DC) и внего картинку грузить...
по этому поводу могу лишь посоветовать книжки по API почитать

и еще поищи книгу Брюса Мак-Кинни "Крепкий орешек Visual Basic" в ней не плохо описана работа с API. ну и конечно же Дэн Эплман


Эта типа GetObjectAPI?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 05.06.2003 (Чт) 18:25

GoGosha писал(а):Эта типа GetObjectAPI?

ну все... дальше для меня уже не совсем все ясно становится...
так что лучше я замолчу по этому вопросу....
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Boris_BGB
Флудер-Энтузиаст
Флудер-Энтузиаст
 
Сообщения: 661
Зарегистрирован: 11.12.2002 (Ср) 11:41

Сообщение Boris_BGB » 06.06.2003 (Пт) 16:11

Мучать кнопку через API - оригинально! Проще контрол написать.
SkateBoarding is not a crime!

PSV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 29.01.2002 (Вт) 12:30
Откуда: Россия

Сообщение PSV » 06.06.2003 (Пт) 17:04

Boris_BGB писал(а):Мучать кнопку через API - оригинально! Проще контрол написать.


Во-во - тем более исходники к имеющимся контролям имеются. Я например перебрал кучу кнопок в свое время и лучше всего подошел для решения проблемы картинки слева контрол axButton http://vbstreets.ru/download.asp?id=130 хотя у него есть свои глюки. Исходник прилагается :)

Кстати, я тут в Excel недавно на VBA писал - дык в VBA можно без проблем картинку на кнопке куда нужно хреначить - а вот никак эти VBA-ые кнопки в проект на VB не подтащить?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 06.06.2003 (Пт) 17:10

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

совсем чегой-то я ступил
конечно можно. Microsoft Forms 2.0 Object Library - библиотека называется. как раз контролы из офисного VBA.
хорошо добрый человек напомнил... большое ему за это СПАСИБО
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 06.06.2003 (Пт) 17:18

Cyrax писал(а)::oops: ой, люди...
PVS писал(а):Кстати, я тут в Excel недавно на VBA писал - дык в VBA можно без проблем картинку на кнопке куда нужно хреначить - а вот никак эти VBA-ые кнопки в проект на VB не подтащить?

совсем чегой-то я ступил
конечно можно. Microsoft Forms 2.0 Object Library - библиотека называется. как раз контролы из офисного VBA.
хорошо добрый человек напомнил... большое ему за это СПАСИБО

Хм-м-м-м лишний миг с прогой таскать не хочется :(

Или она и в чистой винде есть????

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.06.2003 (Пт) 17:26

Нету. Ставится вместе с MS Office.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 06.06.2003 (Пт) 17:32

GoGosha писал(а):Хм-м-м-м лишний миг с прогой таскать не хочется

Или она и в чистой винде есть????

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

з.ы. знаешь поговорку "Красота требует жертв". так вот, чем-то в любом случае пожертвовать придется: либо лишний мегобайт, либо время, потраченное на поиски или разработку новой кнопки. выбирай...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

PSV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 29.01.2002 (Вт) 12:30
Откуда: Россия

Сообщение PSV » 06.06.2003 (Пт) 17:33

Cyrax писал(а)::oops: ой, люди...
конечно можно. Microsoft Forms 2.0 Object Library - библиотека называется. как раз контролы из офисного VBA.


А она лицензий отдельных для работы не требует? А лицензий для распространения с ПО?

Так то я посмотрел на зависимости этого fm20.dll - ничего сверхестественного.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 06.06.2003 (Пт) 17:35

PSV писал(а):
Cyrax писал(а)::oops: ой, люди...
конечно можно. Microsoft Forms 2.0 Object Library - библиотека называется. как раз контролы из офисного VBA.


А она лицензий отдельных для работы не требует? А лицензий для распространения с ПО?

Так то я посмотрел на зависимости этого fm20.dll - ничего сверхестественного.

не боись, юзай спокойно, ничего оно не требует :wink:
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 07.06.2003 (Сб) 20:11

RayShade писал(а):Нету. Ставится вместе с MS Office.

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

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 08.06.2003 (Вс) 7:53

создаёшь проект ActiveX OCX
добавляешь кнопку, свойство picture ставишь то что хочешь
там ещё пару своёств пошатай и будет всё ок
а потом исходник добавляй к EXE проекту чтобы OCX не таскать

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 09.06.2003 (Пн) 8:51

v-adix писал(а):создаёшь проект ActiveX OCX
добавляешь кнопку, свойство picture ставишь то что хочешь
там ещё пару своёств пошатай и будет всё ок
а потом исходник добавляй к EXE проекту чтобы OCX не таскать

Можно проще: правой кнопкой в окне с формами: Add->User Control
И прямо в самом проэкте его и создаёшь: тестить можно

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 09.06.2003 (Пн) 14:53

v-adix писал(а):создаёшь проект ActiveX OCX
добавляешь кнопку, свойство picture ставишь то что хочешь
там ещё пару своёств пошатай и будет всё ок
а потом исходник добавляй к EXE проекту чтобы OCX не таскать

Лень писать: там обработку нажатий, чтоб при нажатии картинка немного вверх уезжала.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 09.06.2003 (Пн) 15:26

ну вы блин даете...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

PSV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 29.01.2002 (Вт) 12:30
Откуда: Россия

Сообщение PSV » 10.06.2003 (Вт) 13:20

Ну все хорошо с этими кнопками (из MS Forms 2.0), но ... как всегда есть маленький недочет способный все испортить: при выключении кнопки Enabled=False текст становится серым, как и должно быть у неактивной кнопки, а картинка ... остается цветной и сочной :x

Свойство Picture есть ссылка на объект StdPicture. Ну и как бы программно делать при выключении ентой кнопки картинку серой и потом, при включении, делать картинку нормальной (цветной).

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 10.06.2003 (Вт) 15:22

PSV писал(а):Ну все хорошо с этими кнопками (из MS Forms 2.0), но ... как всегда есть маленький недочет способный все испортить: при выключении кнопки Enabled=False текст становится серым, как и должно быть у неактивной кнопки, а картинка ... остается цветной и сочной :x

Свойство Picture есть ссылка на объект StdPicture. Ну и как бы программно делать при выключении ентой кнопки картинку серой и потом, при включении, делать картинку нормальной (цветной).

нк наверное как-то так
Код: Выделить всё
' выключенная картинка
cdm.Enabled = False
Set cmd.Picture = picDisabled.Picture

' включенная картинка
cdm.Enabled = True
Set cmd.Picture = picEnabled.Picture


где:
picEnabled и picDisabled содержат нормальную и серую картинки
cmd - твоя кнопка...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

PSV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 29.01.2002 (Вт) 12:30
Откуда: Россия

Сообщение PSV » 10.06.2003 (Вт) 17:39

Cyrax писал(а):
PSV писал(а):Ну и как бы программно делать при выключении ентой кнопки картинку серой и потом, при включении, делать картинку нормальной (цветной).

нк наверное как-то так
Код: Выделить всё
' выключенная картинка
cdm.Enabled = False
Set cmd.Picture = picDisabled.Picture

' включенная картинка
cdm.Enabled = True
Set cmd.Picture = picEnabled.Picture


где:
picEnabled и picDisabled содержат нормальную и серую картинки
cmd - твоя кнопка...


Типа иконок море, да еще хранить 2 экз. - мож все таки мона как то программно - типа сливать цветную и конвертить ее в дизабленную.

Зы, кста есть еще одна бага-фича - если на событие даблклика не поместить "Cancel = True", то при двойном клике по такой кнопке она "западает" :)

След.

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

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

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

    TopList