Тема: Как раскрасить текст на кнопке?

Хотелось бы оживить кнопки на форме, но не могу ничего придумать, кроме как посадить на кнопку картинку.
Вопрос: В самом деле не существует способов раскрасить текст на кнопке? И если да, то где взять подходящие icon'ы с цветным текстом?
Спасибо.

Re: Как раскрасить текст на кнопке?

У бутона есть опция ForeСolor, изменяет цвет фонта на кнопке. Если нужны качественные иконки то тут их можно найти http://www.iconaholic.com/downloads.html

Re: Как раскрасить текст на кнопке?

> SmeL
У бутона есть опция ForeСolor
Так в том-то и дело, что НЕТ СВОЙСТВА ForeСolor у CommandButton! Иначе стал бы я морочить голову уважаемой публике?!
А за ссылочку спасибо!

Re: Как раскрасить текст на кнопке?

> SmeL
За ссылку спасибо :)

> LeonidSN
Выстави кнопку в тип Graphic (1) - по умолчанию стоит в 0 (Text). ЯТД !!

Re: Как раскрасить текст на кнопке?

LeonidSN пишет:

Так в том-то и дело, что НЕТ СВОЙСТВА ForeСolor у CommandButton! Иначе стал бы я морочить голову уважаемой публике?!

http://img208.imageshack.us/img208/9568 … 0016hh.jpg
Вот еще иконки
http://iconfactory.com/

Re: Как раскрасить текст на кнопке?

На VBA есть свойство ForeColor, а на VB нет. Можно на VB указать референс на контролы Microsoft Forms 2.0 Object Library и взять от туда кнопку с ForeColor. Тогда, правда, придется устанавливать на компьютере пользователя FM20.DLL при ее отсутствии.

Re: Как раскрасить текст на кнопке?

> brigval
А разве достаточно только fm20.dll предоставить? У меня сложилось ощущение, что этого недостаточно, надо еще что-то делать. Правда, я с таким не сталкивался, обычно эта dll-ка на клиенте есть.

Re: Как раскрасить текст на кнопке?

> SmeL
''Движенья нет'', - сказал мудрец брадатый
Другой смолчал и стал пред ним ходить.
Сильнее бы не мог он возразить;

А.С. Пушкин
Убедил!
А brigval разъяснил.
Я то обычно пишу именно на VBA, а тут решил на VB раздраконить, и вот так прокололся.
Спасибо, ребята, помогли! Вопрос разрешился.

Re: Как раскрасить текст на кнопке?

> brigval

kpblc пишет:

обычно эта dll-ка на клиенте есть.

Насколько я понимаю, если у клиента стоит AutoCAD, значит имеется и VBA со своим набором библиотек. Следовательно, я имею право расчитывать на наличие у моего клиента также раскрашивамой кнопки...

Re: Как раскрасить текст на кнопке?

Продолжим тогда :) и на тему VB

'рецепт приготовления разукрашенного бутона :)
'Command1 1 штука
'Picture1 1 штука
'Если есть желание чтоб "текст" на кнопке подсвечивался как hiperlink,
'то раскомментируйте часть кода
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
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 Const DT_CENTER = &H1
Private Const DT_WORDBREAK = &H10
Private Const DT_CALCRECT = &H400
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Dim CtrMov As Boolean
Dim CommandCaption As String
Private Sub Form_Load()
 Picture1.Width = Command1.Width
 Picture1.Height = Command1.Height
 Picture1.ScaleMode = vbPixels
 Command1.Caption = ""
 CommandCaption = "ColorText"
 ChangeTextColor vbBlue, CommandCaption
End Sub
Private Sub ChangeTextColor(ByVal Color As Long, ByVal Text As String)
Dim r As RECT
  r.Right = Picture1.ScaleWidth
   DrawText Picture1.hdc, Text, Len(Text), r, DT_WORDBREAK Or DT_CALCRECT
  r.Top = (Picture1.ScaleHeight - r.Bottom) / 2
  r.Bottom = r.Bottom + r.Top
  r.Left = 0
  r.Right = Picture1.ScaleWidth
 Picture1.Cls
 Picture1.ForeColor = Color
   DrawText Picture1.hdc, Text, Len(Text), r, DT_WORDBREAK Or DT_CENTER
 Command1.Picture = Picture1.Image
End Sub
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
With Command1
If (X < 0) Or (Y < 0) Or (X > .Width) Or (Y > .Height) Then
    ReleaseCapture
    CtrMov = False
    ChangeTextColor vbBlue, CommandCaption
Else
    If CtrMov = False Then
    SetCapture .hwnd
    CtrMov = True
    ChangeTextColor vbRed, CommandCaption
    End If
End If
End With
End Sub
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
CtrMov = False
End Sub

Re: Как раскрасить текст на кнопке?

ой извиняюсь на закоментировал последнии две процедуры :)

Re: Как раскрасить текст на кнопке?

> LeonidSN
Не обязательно. Достаточно не устанавливать поддержку VBA или потавить LT :)

Re: Как раскрасить текст на кнопке?

> kpblc
То есть, на всякий случай включать в дистрибутив?

Re: Как раскрасить текст на кнопке?

> LeonidSN
А вам езвестен метод включения в дистрибутив длл?

Re: Как раскрасить текст на кнопке?

> SmeL
Код положил в копилку, по-позже разберусь и при случае воспользуюсь.

Re: Как раскрасить текст на кнопке?

> LeonidSN
Этого мало. На vbstreet.ru я не получил однозначного ответа, достаточно ли просто предоставлять dll и регистрировать ее в системе. Поскольку интерес был наполовину академический, пока отложил разборки.

> SmeL
Зависит от применяемого инсталлятора.

Re: Как раскрасить текст на кнопке?

kpblc пишет:

> brigval (2006-06-01 10:50:54)
А разве достаточно только fm20.dll предоставить? У меня сложилось ощущение, что этого недостаточно, надо еще что-то делать. Правда, я с таким не сталкивался, обычно эта dll-ка на клиенте есть.

С такого типа DLL я не пробовал, но, вероятно, достаточно ее закинуть в папку System32. Но ShaggyDoc не ркомендует такие прямые методы работы. https://www.caduser.ru/forum/topic26761.html

Re: Как раскрасить текст на кнопке?

ой в приведенный выше код хотел бы ввести небольшую поправку

Private Sub Form_Load()
 Picture1.Width = Command1.Width
 Picture1.Height = Command1.Height
 Picture1.ScaleMode = vbPixels
 CommandCaption =  Command1.Caption
 Command1.Caption = ""
 ChangeTextColor vbBlue, CommandCaption
End Sub

И опять приношу извинения за свою оплошность :)

> kpblc
мы наверно чуть разошлись в данном вопросе. Под моим постом я имел ввиду известна ли Вам возможность включения к примеру ABC.dll в свой дистрибутив (запихнуть данную dll в свою exe или dll), что позволить использовать проект без регистрации в системе

Re: Как раскрасить текст на кнопке?

LeonidSN пишет:

Насколько я понимаю, если у клиента стоит AutoCAD, значит имеется и VBA со своим набором библиотек.

Если это коммерческий проект, то такой подход может не пройти. По каким-то причинам нужная DLL может отсутствовать. По крайней мере, нужно об этом что-то сказать в описании к программе.
Я недавно посмотрел загружаемые операционной системой DLL для своей программки в 60 кБ. Их оказалось около трех десятков :)

Re: Как раскрасить текст на кнопке?

Так может быть проще всего и надежнее, запихнуть прилагаемую dll в папку Приложения; при изготовлении дистрибутива на стадии InstallLocations указать: $(AppPath)?
При условии, что Приложение стоит на машине Пользователя.
Я тоже сошлюсь на авторитеты.
ShaggyDoc:
Не так. Регистрировать надо только DLL с COM-объектами. Обычную DLL регистрировать не нужно. Если ее использует только одно приложение, DLL может лежать просто рядом с ним.
Но зачем ломиться именно в System32? Хорошая программа всегда знает, где живут ее собственные компоненты и умеет к ним обращаться

Александр Ривилис:
...в какой папке ОС ищет DLL, если не находит ее в System32...
« 1) The directory from which the application loaded.

В какой-то степени это ответ Smel'у

> SmeL

Re: Как раскрасить текст на кнопке?

> LeonidSN
да я помню этот топ откуда выбраны цитаты, я там тоже засветился :)
Я то вопрос поднял вот почему, к примеру вы пользователь, который не имеет доступ к реестру. Так что даже если библиотека будет лежать рядом с проектом теплее пользователю от этого не станет она не сможет зарегистрироваться. пока не придет всемогущий администратор. если длл будет в самом ехе, то и необходимость его регистриравать отпадает.

Re: Как раскрасить текст на кнопке?

> SmeL
Да прекрасно так было бы, но тут уж нам с вами надо переходить на C++ со всеми вытекающими...
Я говорил о случае, когда прилагаемую библиотеку
НЕ НАДО регистрировать.

Re: Как раскрасить текст на кнопке?

если длл будет в самом ехе, то и необходимость его регистриравать отпадает.

Это как? Если dll-файл является COM-сервером, то его в любом случае так или иаче нужно зарегистрировать. А это подразумевает необходимость доступа на запись в определенные ветки реестра. Удобнее всего такие dll-файлы регистрировать в инсталляторе. Тогда администратору не нужно будет выискивать что нужно зарегистрировать. Но инсталлятор все равно потребуется запускать под администратором (в крайнем случае под Power User).