Textbox with rounded corners

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

Textbox with rounded corners

Сообщение _igor_ » 14.11.2007 (Ср) 11:16

Привет всем!
Кто-нибудь видел пример такого?
Думал можно так
picturebox, а на него textbox без границы, смотриться неплохо, только когда меняются размеры в run-time картинка на picturebox искажается
Пробовал еще через API округлять, но как-то оно топорно получается...

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 14.11.2007 (Ср) 11:37

Хм.... Ну в голову приходит банальный вариант.

Сгородить UserControl. В котором положить Shape c свойством Rounded Rectangle Он Автоматически подстраивает края.

Сделать фон у юзерконтрола Transparent и в коде контрола сделать что то типа этого

Код: Выделить всё
Private Sub UserControl_Resize()
    Shape1.Move 0, 0, UserControl.Width, UserControl.Height
    Text1.Move 120, 120, UserControl.Width - 220, UserControl.Height - 220
End Sub


По событию ресайза растягивать шейп на ширину контрола, а текст на ширину контрола минус отступы.

Неказисто конечно, но дальше можно доделывать и доделывать :)

_igor_
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 25.08.2007 (Сб) 14:00

Сообщение _igor_ » 14.11.2007 (Ср) 11:52

Тоже думал об этом :) И даже попробовал сделать. Прикол в том, что чем больше будет usercontrol, тем более закруленные у него получаются края. А хотелось бы чтобы это закругление не менялось с ресайзом контрола.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 14.11.2007 (Ср) 13:10

Не вопрос. Делай по UserControl_Paint отрисовку апишной функцией RoundRect :) У неё можно указать степень закругления :)

Или на замену вырезать контрол по региону.

_igor_
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 25.08.2007 (Сб) 14:00

Сообщение _igor_ » 14.11.2007 (Ср) 14:27

Спс, получилось, надо будет только свойства до ума довести, а так все как надо :)

что-то типа того:

Код: Выделить всё
Private Declare Function RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Sub UserControl_Paint()
   Dim r As Double
   r = RoundRect(UserControl.hdc, 10, 10, UserControl.ScaleWidth - 10, UserControl.ScaleHeight - 10, 10, 10)
End Sub


свойство usercontrol.scalemode надо поставить 3-Pixel

И еще вопрос - как можно поменять цвет линии, которую рисует roundrect? больно уж она черная... :)

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 14.11.2007 (Ср) 15:31

_igor_, может UserControl.ForeColor установить?
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

_igor_
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 25.08.2007 (Сб) 14:00

Сообщение _igor_ » 14.11.2007 (Ср) 16:02

burik писал(а):_igor_, может UserControl.ForeColor установить?

Точно, самому в голову почему-то не пришло))
Спасибо))
Вот собственно, что получилось, может кому-то пригодиться...
Свойства правда надо будет добавить, а так заготовка готова для дальнейшей доработки))
Вложения
RoundedTextBox.zip
(629 байт) Скачиваний: 33

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 14.11.2007 (Ср) 17:59

Я тут ещё вырезку по региону добавил. Может тебе тоже пригодится.

Иначе у контрола задний фон в углах виден был. ;)

Да и проперти сгенерил. Чтоб цвет, шрифт и т.п менять можно было
Вложения
RoundRectTextBox.zip
(3.33 Кб) Скачиваний: 49


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 96

    TopList