Как можно изменить бордюр у Label

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Как можно изменить бордюр у Label

Сообщение ger_kar » 09.02.2013 (Сб) 19:47

Есть приложение на VB6 в котором имеется матрица из Label'ей. Но у Label в этом приложении имеет очень тонкий бордюр.
Label выглядит так:
1.png
1.png (439 байт) Просмотров: 2355

Хотел сделать аналогично, но нифига не выходит. Получается вот так:
2.png
2.png (468 байт) Просмотров: 2355

Сделать бордюр тоньше, как я не пробовал у меня не выходит. В интернете на эту тему тоже ничего путнего не нашлось.
Вроде бы пустяк, но вот...
Вобщем помогите добрым советом. И еще можно ли сделать бордюр таким, что-бы он выглядел выпуклым, а не вдавленным?
Бороться и искать, найти и перепрятать

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Как можно изменить бордюр у Label

Сообщение Diamock » 10.02.2013 (Вс) 6:05

Здравствуйте Уважаемые!
ger_kar я предлагаю такой (самый простой) вариант, размести этот код на форме:

Код: Выделить всё
Option Explicit

Enum LABELBORDER    '# Выпуклость, впуклость
    Bossed = 0
    Embossed = 1
End Enum

Sub BordureToLine(Label As Label, Border As LABELBORDER, Indent As Long)
   
    '# Label -  label вокруг которого отрисовывается рамка.
    '# Border - впулость/выпуклость.
    '# Indent - отступ.
    Dim BorderColorLight As Long
    Dim BorderColorDark As Long
   
    Select Case Border
        Case 0
            BorderColorLight = &HFFFFFF
            BorderColorDark = &H808080
        Case 1
            BorderColorDark = &HFFFFFF
            BorderColorLight = &H808080
    End Select
    Line (Label.Left - Indent, Label.Top - Indent)-(Label.Left - Indent, Label.Top + Label.Height + Indent), BorderColorLight
    Line (Label.Left - Indent, Label.Top - Indent)-(Label.Left + Label.Width + Indent, Label.Top - Indent), BorderColorLight
    Line (Label.Left + Label.Width + Indent, Label.Top - Indent)-(Label.Left + Label.Width + Indent, Label.Top + Label.Height + Indent), BorderColorDark
    Line (Label.Left - Indent, Label.Top + Label.Height + Indent)-(Label.Left + Label.Width + Indent + 15, Label.Top + Label.Height + Indent), BorderColorDark
End Sub

Private Sub Command1_Click()
    BordureToLine Label1, Bossed, 60
    BordureToLine Label2, Embossed, 120
End Sub

Private Sub Command2_Click()
    BordureToLine Label1, Embossed, 60
    BordureToLine Label2, Bossed, 120
End Sub

Это так на скорую руку, можно добавить толщину Border или оттенки рамки.
Но это уже сам реализуешь.
С уважением...
Вложения
Снимок9.png
Снимок9.png (6.61 Кб) Просмотров: 2338
In der Beschrankung zeigt sich erst der Meister
Графоманю...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как можно изменить бордюр у Label

Сообщение ger_kar » 10.02.2013 (Вс) 6:27

Как говориться - элементарно Ватсон :)
Спасибо за идею. Все очень просто и эффектно.
Бороться и искать, найти и перепрятать

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как можно изменить бордюр у Label

Сообщение Mikle » 10.02.2013 (Вс) 9:28

Это НЕПРАВИЛЬНО!
Попробуй нарисовать такой Label на фрейме, который не поддерживает псевдометод Line.
Попробуй сменить ScaleMode формы и воспользоваться этим Label-ом.
Я бы сделал UserControl, имитирующий Label.
Возможно Хакер подскажет, как с помощью WinAPI перенастроить стиль самого Label.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как можно изменить бордюр у Label

Сообщение ger_kar » 10.02.2013 (Вс) 9:38

Mikle писал(а):Я бы сделал UserControl, имитирующий Label.
В смысле положить label на UserControl, а дальше можно уже и псевдометод Line юзать, и тогда такой UserControl можно будет размещать где угодно?
Mikle писал(а):Возможно Хакер подскажет, как с помощью WinAPI перенастроить стиль самого Label.
Ну вроде как Label не является самостоятельным окном, не имеет своего хендла, и поэтому как у него можно поменять стиль я совершенно не представляю. Но как то наверное все таки можно и Хакер точно знает как :)
Бороться и искать, найти и перепрятать

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

Re: Как можно изменить бордюр у Label

Сообщение Хакер » 10.02.2013 (Вс) 10:24

Mikle писал(а):Возможно Хакер подскажет, как с помощью WinAPI перенастроить стиль самого Label.

Он мне в личке поведал, что хочет делать матрицу лэйблов, наплодив коллекцию Label-контролов.
Я сказал, что за такое надо расстреливать, и дальше помогать в этом направлении даже не думаю.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как можно изменить бордюр у Label

Сообщение Mikle » 10.02.2013 (Вс) 10:30

ger_kar, а какой-нибудь стандартный Grid не подойдёт? Опиши задачу подробнее.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как можно изменить бордюр у Label

Сообщение ger_kar » 10.02.2013 (Вс) 10:36

Mikle писал(а):ger_kar, а какой-нибудь стандартный Grid не подойдёт? Опиши задачу подробнее.
Да нет Grid не нужен. Задача в принципе элементарная - хотел сделать свой DPicker, так как стандартный меня не очень устраивает. Ну и матрицу календарика хотел сделать из лейблов.

В принципе та задача, которая описывалась, вполне успешно решается рисованием прямоугольника псевдометодом Line, а вопрос с Label и его стилями имеет гораздо более широкое применение, а не только для изготовления матрицы. На данном этапе практического интереса конечно нет, но вот академический в виде знаний на будущее естественно есть! И думаю не только у меня.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.02.2013 (Вс) 10:40

Хакер писал(а):Я сказал, что за такое надо расстреливать, и дальше помогать в этом направлении даже не думаю.

Так изменение границы с матрицей никак не связаны. Почему бы не сказать как сделать?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как можно изменить бордюр у Label

Сообщение iGrok » 11.02.2013 (Пн) 1:22

Для рисования таких вещей используется DrawEdge.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.02.2013 (Пн) 2:09

Почему-то мне кажется, что тут рисование вообще не нужно...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как можно изменить бордюр у Label

Сообщение ger_kar » 12.02.2013 (Вт) 6:03

Qwertiy писал(а):Почему-то мне кажется, что тут рисование вообще не нужно...
Ну в принципе да. Label то все равно рамку отрисовывает. Вопрос только в том, как заставить его рисовать не только ту рамку, которая предусмотрена изначально, а любую. Наверное стандартными средствами, без всякого блек кодинга это не сделать. В вот блек кодинг наверное бы помог. По моему разумению надо найти переменную или может даже не одну, которые отвечают за ширину и цвета бордюра, ну и принудительно ее изменять. Наверное только так.
Бороться и искать, найти и перепрятать


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

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

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

    TopList