Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Оформление диалоговых окон


Автор: Plamenk 8.1.2004, 09:53
Всем привет!!!

Возникла совершено нелепая проблема:
Во многих Windows - окнах, кнопки "Отмена", "Далее >" и т.д., отделяются линией, а как мне сделать такую же линию у себя??
(Таким же элементом в выпадающем меню разделяются пункты меню).

Заранее Всем СПАСИБО!!!

Автор: -Mikle- 8.1.2004, 11:37
Plamenk, у ВБ есть статический элемент такой, Line называется. Поставь две такие линии рядышком, через один пиксел, вернюю покрась в темный системный цвет, а нижний - в светлый.

Автор: Black_Star 8.1.2004, 20:34
Есть такое.

А для выпадающего в редакторе меню в поле Caption поставь "-" и дай имя любое, это будет разделительная полоса... thumbs-up.gif

Автор: Plamenk 9.1.2004, 17:51
Спасибо -Mikle-.

В VB все получилось, но проблема в том что такой элемент нужен в VBA, а там линии нет. Может есть какой-нибудь альтернативный вариант.

Пока сделал свой элемент управления состоящий из двух линий, но это, по-моему, изврат!

Автор: Plamenk 9.1.2004, 19:07
Все вопрос снят!!!

Сделал из двух Label.

Автор: cardinal 9.1.2004, 20:22
Ну вот пока сочинял, ты уже из Label`ов все слепил smile.gif. Короче я бы наверно по такому принципу сделал:
Код
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long

Private Const PS_SOLID = 0

Private Type POINTAPI
       x As Long
       y As Long
End Type

Private Sub CommandButton1_Click()
Dim point As POINTAPI
Dim hwnd As Long
Dim hdc As Long
Dim hPen As Long
Dim hPenOld As Long
hwnd = FindWindow(vbNullString, "UserForm1")
hdc = GetDC(hwnd)
hPen = CreatePen(PS_SOLID, 2, RGB(220, 220, 220))
hPenOld = SelectObject(hdc, hPen)

MoveToEx hdc, 90, 30, point
LineTo hdc, 90, 80
MoveToEx hdc, 30, 80, point
LineTo hdc, 90, 80
MoveToEx hdc, 94, 80, point
LineTo hdc, 150, 80

DeleteObject hPen
hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0))
SelectObject hdc, hPen

MoveToEx hdc, 92, 30, point
LineTo hdc, 92, 82
MoveToEx hdc, 30, 82, point
LineTo hdc, 150, 82

SelectObject lhDC, hPenOld
DeleteObject hPen
ReleaseDC hwnd, hdc
End Sub

Все тут конечно не проще, но зато без всяких там элементов-компонентов и работает в VB и VBA. Скоро засуну это в FAQ - надо же его наполнять smile.gif.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)