Козлится юзерский тип... Солюшен... И далее про кисти

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Козлится юзерский тип... Солюшен... И далее про кисти

Сообщение GSerg » 02.05.2003 (Пт) 4:28

Решил я облегчить себе жизнь. Стал писать класс Brush, чтобы создавать и удобно юзать Brush'и. В качестве примера взял работающий класс для мультитрединга. там в рамках класса объявляются Private APIs и Public Enums. Сделал всё так же. Только один из методов класса у мееня юзает входной агрумент lpLogBrush As LOGBRUSH. Тип LOGBRUSH я сначала определил внутри класса как Public. Меня послали, поскольку можно только Private. Я его определил как Private, меня послали, потому что нельзя, чтобы Public метод юзал Private тип. Я создал модуль, запихал туда все типы и энумы, удалив их из класса, и всем им указал Public. Но всё равно, при попытке юзания мемня посылают с формулировкой Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types. Но у меня ввсё так и есть! Все типы и энумы в модуле, и все публичные!

Козлится классовая функция:
Код: Выделить всё
Public Function CreateIndirect(lpLogBrush As LOGBRUSH) As Long
  tmpLong = CreateBrushIndirect(lpLogBrush)
  ReplaceBrush tmpLong, lHandle
  CreateIndirect = lHandle
End Function


Содержимое модуля (целиком):
Код: Выделить всё
Option Explicit

Public Enum BrushStyles
  BS_SOLID = 0
  BS_NULL = 1
  BS_HOLLOW = BS_NULL
  BS_HATCHED = 2
  BS_PATTERN = 3
  BS_INDEXED = 4
  BS_DIBPATTERN = 5
  BS_DIBPATTERNPT = 6
  BS_PATTERN8X8 = 7
  BS_DIBPATTERN8X8 = 8
End Enum

Public Enum BrushFillStyles
  HS_HORIZONTAL = 0              '  -----
  HS_VERTICAL = 1                '  |||||
  HS_FDIAGONAL = 2               '  \\\\\
  HS_BDIAGONAL = 3               '  /////
  HS_CROSS = 4                   '  +++++
  HS_DIAGCROSS = 5               '  xxxxx
End Enum

Public Enum SysElements
  COLOR_SCROLLBAR = 0
  COLOR_BACKGROUND = 1
  COLOR_ACTIVECAPTION = 2
  COLOR_INACTIVECAPTION = 3
  COLOR_MENU = 4
  COLOR_WINDOW = 5
  COLOR_WINDOWFRAME = 6
  COLOR_MENUTEXT = 7
  COLOR_WINDOWTEXT = 8
  COLOR_CAPTIONTEXT = 9
  COLOR_ACTIVEBORDER = 10
  COLOR_INACTIVEBORDER = 11
  COLOR_APPWORKSPACE = 12
  COLOR_HIGHLIGHT = 13
  COLOR_HIGHLIGHTTEXT = 14
  COLOR_BTNFACE = 15
  COLOR_BTNSHADOW = 16
  COLOR_GRAYTEXT = 17
  COLOR_BTNTEXT = 18
  COLOR_INACTIVECAPTIONTEXT = 19
  COLOR_BTNHIGHLIGHT = 20
End Enum

Public Type LOGBRUSH
  lbStyle As BrushStyles
  lbColor As Long
  lbHatch As BrushFillStyles
End Type
Последний раз редактировалось GSerg 12.05.2003 (Пн) 8:59, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.05.2003 (Пт) 8:58

ЕМНИП нельзя юзать Public User Type.
Создай субкласс LOGBRUSH (с методами Style, Color, Hatch) и юзай его.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.05.2003 (Вс) 15:01

Хотя должен он юзаться, но не юзается. Лишь мудрый совет мудрого alibek исправил дело, хотя два класса вместо одного это нехорошо. :(

Ну ладно, продолжаем вопрос о кистях :wink:
Дабы не нарушать новых правил, пошёл я на msdn.microsoft.com и поискал там по слову Brush в разделе API&References, предварительно указав, что язык VB. Нашёл всякую чушь, в основном про .NET и GDI+, градиентные кисти etc. Короче, нет того, что я искал. Поэтому спрашиваю тут.

Что есть Pattern? То есть я понимаю, что это закраска такая, я видел, как она выглядит, и всё такое. Но я не понимаю. Вот в примере из API-Guide создаётся BMP размером 8х8, по одному биту на пиксел, 1 плоскость. Это значит 64 бита. А массив под pattern создаётся ( 1 To 8 ) As Integer, это же 128 бит. А всё у них там работает прекрасно. Не секу я момент этот что-то.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.05.2003 (Пн) 8:54

Проблема арыгынально решилась. Делюсь.
Нужно создать ActiveX Dll, сделать в нём класс, и в оном описать Public Type. Потом библа компилится и подключается через references. Вот такая вот фигня. :)

ЗЫ: А про кисти не ага ? :(
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

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

    TopList