CHOOSECOLOR и дополнительные цвета

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

CHOOSECOLOR и дополнительные цвета

Сообщение A.A.Z. » 07.01.2005 (Пт) 14:31

Использую код из AG:
Код: Выделить всё
Dim cc As CHOOSECOLOR, CustomColors() As Byte
cc.lStructSize = Len(cc)
cc.hwndOwner = frmOptions.hWnd
cc.hInstance = App.hInstance
cc.lpCustColors = StrConv(CustomColors, vbUnicode)
cc.flags = 0
If CHOOSECOLOR(cc) <> 0 Then
GetColor = cc.rgbResult
CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
Else
GetColor = -1
End If
Но получается какая-то ерунда :( Цвета страшно колбасит, и при этом, иногда, если выбрать один из них, то выдает ошибку (цвет ячейки больше 16777216 :shock:). Помогите, плиз! :roll:

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

Сообщение GSerg » 07.01.2005 (Пт) 14:45

COLORREF - это DWORD. Поэтому объявляй массив из 16 лонгов, а в lpCustColors сувай varptr(lbound)...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 14:55

Понял, вроде :) Спасибо, ща будем пробовать :)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 14:59

Сделал так:
Код: Выделить всё
Dim cc As CHOOSECOLOR, CustomColors() As Byte
Static Colors(&HF) As Long
cc.lStructSize = Len(cc)
cc.hwndOwner = frmOptions.hWnd
cc.hInstance = App.hInstance
cc.lpCustColors = StrConv(VarPtr(LBound(Colors)), vbUnicode)
cc.flags = 0
If CHOOSECOLOR(cc) <> 0 Then
GetColor = cc.rgbResult
CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
Else
GetColor = -1
End If
Теперб цвета не колбасит, но ошибка с очень большим числом возникает... Что я не так делаю? :roll:

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

Сообщение GSerg » 07.01.2005 (Пт) 15:27

Ты, вредный человек, почему байты юзаешь, да ещё и через strconv? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 15:34

Это не я, это не я, это API-Guide все :lol:
Код: Выделить всё
    Dim CustomColors() As Byte
    Dim cc As CHOOSECOLOR
    Dim Custcolor(16) As Long
    Dim lReturn As Long

    'set the structure size
    cc.lStructSize = Len(cc)
    'Set the owner
    cc.hwndOwner = Me.hwnd
    'set the application's instance
    cc.hInstance = App.hInstance
    'set the custom colors (converted to Unicode)
    cc.lpCustColors = StrConv(CustomColors, vbUnicode)
    'no extra flags
    cc.flags = 0

    'Show the 'Select Color'-dialog
    If CHOOSECOLOR(cc) <> 0 Then
        ShowColor = cc.rgbResult
        CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
    Else
        ShowColor = -1
    End If

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

Сообщение GSerg » 07.01.2005 (Пт) 15:37

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

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 15:42

А как надо? :oops:

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

Сообщение GSerg » 07.01.2005 (Пт) 15:46

Dim Custcolor(1 To 16) As Long '(а не 0 To 16 - неужели ты это пропустил? :))

cc.lpCustColors as long - переобъявить

cc.lpCustColors = varptr(lbound(custcolor)) - юзать.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 16:03

1) в API-Guid'е вверху было Option Base 1 :)
2) OK
3) OK :)

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 22.03.2006 (Ср) 12:56

А как этот диалог засавить по центу формы появляться?
Делал на форме кнопку (по центру формы)
cc.hwndOwner = кнопка.hwnd
все равно в левом верхнем углу появляется.

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

Сообщение alibek » 22.03.2006 (Ср) 13:04

А причем тут кнопка? Форму родителем объявляй, а не кнопку.
Lasciate ogni speranza, voi ch'entrate.

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 22.03.2006 (Ср) 13:21

Делал родителем форму (form1.hwnd) - диалог появляется в верхнем в левом углу формы. Возможно ли сделать так, что бы диалог по центру появлялся (centerscreen) и как?


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

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

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

    TopList