purebasic.info

PureBasic forum
Текущее время: Чт июл 19, 2018 6:44 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: ColorGadget из ListViewGadget
СообщениеДобавлено: Вт май 01, 2012 5:52 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Предлагаю следующий кодес. Может кому пригодится. Получается своеобразный ColorGadget.
Изображение
Буду благодарен, если кто подскажет вариант без DialogBoxParam()
Я пробовал рисовать второе окно, на нем ListViewGadget, но не обрабатывается сообщение #WM_INITDIALOG и #WM_DRAWITEM и как следствие не работает
ЗЫ кодес частично стырен с Masm32. Во вложении файл ресурса
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
; Кодил Pablov
; 30\04\2012
; Тестил на win XP SP3
 
Enumeration
  #Main
EndEnumeration
Enumeration
  #String_0 = 0
  #String_1 = 1
  #String_2 = 2
  #String_3 = 3
  #String_4 = 4
  #String_5 = 5
  #String_6 = 6
  #String_7 = 7
  #Button_4 = 8
EndEnumeration
 
;****************************************
 Import "ColorOptionDlg.res" : EndImport
;****************************************
 
#IDD_DLGOPTIONCOLOR = 3300                   ; Dialog
#IDC_LSTCOLOR       = 3301                   ; ListView
#IDOK               = 1                      ; Button ОК
#IDCANCEL           = 2                      ; Button Cancel
 
Global Dim color.l(11)
        Restore col
        For i=1 To 11
           Read.l color(i)
        Next i
 
Procedure OpenWindow_Window_0()
  If OpenWindow(#Main, 450, 200, 250, 240, "Main", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    StringGadget(#String_0, 10, 15, 230, 20, "")
    StringGadget(#String_1, 10, 40, 230, 20, "")
    StringGadget(#String_2, 10, 65, 230, 20, "")
    StringGadget(#String_3, 10, 90, 230, 20, "")
    StringGadget(#String_4, 10, 115, 230, 20, "")
    StringGadget(#String_5, 10, 140, 230, 20, "")
    StringGadget(#String_6, 10, 165, 230, 20, "")
    StringGadget(#String_7, 10, 190, 230, 20, "")
    ButtonGadget(#Button_4, 140, 215, 100, 20, "Color")
  EndIf
EndProcedure
 
Procedure DlgProc(hDlg, uMsg, wParam, lParam)
  hBr.l
  colorSB.l
        rect.RECT
        Dim     buffer.b(32)
        cc.CHOOSECOLOR
        cc\lStructSize = SizeOf(CHOOSECOLOR)
        color.l
        Dim nameColor$(11)
  Select uMsg
    Case #WM_INITDIALOG
       Restore stringnames
       For i=1 To 11
          Read$ nameColor$(i)
       Next i
       For i=1 To 11
           num = SendDlgItemMessage_(hDlg, #IDC_LSTCOLOR, #LB_ADDSTRING, 0, @nameColor$(i))
           SendDlgItemMessage_(hDlg, #IDC_LSTCOLOR, #LB_SETITEMDATA, num, color(i))
       Next i
    Case #WM_DRAWITEM
       *drawitem.DRAWITEMSTRUCT = lParam
       If       *drawitem\itemState <> #ODS_SELECTED
                cw  =   #COLOR_WINDOW
                              cwt = #COLOR_WINDOWTEXT
                         Else
                cw  =   #COLOR_HIGHLIGHT
                              cwt = #COLOR_HIGHLIGHTTEXT
       EndIf  
       syscolor = GetSysColor_(cwt)
       SetTextColor_(*drawitem\hDC, syscolor)
       syscolor = GetSysColor_(cw)
       SetBkColor_(*drawitem\hDC, syscolor)
       ExtTextOut_(*drawitem\hDC, 0, 0, #ETO_OPAQUE, *drawitem\rcItem, #Null, 0, #Null)
                rect\left   = *drawitem\rcItem\left + 1
                rect\right  = *drawitem\rcItem\left + 1 + 25
                rect\top    = *drawitem\rcItem\top + 1
                rect\bottom = *drawitem\rcItem\bottom - 1
                colorSB     = *drawitem\itemData & $FFFFFF
             hBr = CreateSolidBrush_(colorSB)
             FillRect_(*drawitem\hdc, rect, hBr)
             DeleteObject_(hBr)
             gso = GetStockObject_(#BLACK_BRUSH)
             FrameRect_(*drawitem\hdc, rect, gso)      
             len = SendMessage_(*drawitem\hwndItem, #LB_GETTEXT,*drawitem\itemID, @buffer(0))  
              str$ =  PeekS(@buffer(0))
                   ots = *drawitem\rcItem\left + 30
                   TextOut_(*drawitem\hdc,ots,*drawitem\rcItem\top, @str$,len)  
    Case #WM_CLOSE
       EndDialog_(hDlg, wParam & $FFFF)
    Case #WM_COMMAND
       IDEvent = wParam
       IDEvent >> 16
       ID = wParam & $FFFF
       If IDEvent = #BN_CLICKED
          Select ID
            Case #IDOK
              For i = 1 To 8
                SetGadgetColor(i-1,  #PB_Gadget_BackColor, color(i))
              Next i
              SetWindowColor(#Main, color(9))
              EndDialog_(hDlg, wParam & $FFFF)
            Case #IDCANCEL
              EndDialog_(hDlg, wParam & $FFFF)
          EndSelect
       ElseIf IDEvent = #LBN_DBLCLK  
          n  = SendDlgItemMessage_(hDlg, #IDC_LSTCOLOR, #LB_GETCURSEL, 0, 0)
          cl = ColorRequester(SendDlgItemMessage_(hDlg, #IDC_LSTCOLOR, #LB_GETITEMDATA, n,0))
          If cl <> -1
             num = SendDlgItemMessage_(hDlg, #IDC_LSTCOLOR, #LB_GETCURSEL, 0, 0)
             color(num+1) = cl                         ; Записываем цвет в массив
             SendDlgItemMessage_(hDlg, #IDC_LSTCOLOR, #LB_SETITEMDATA, num, cl)
             InvalidateRect_(GetDlgItem_(hDlg, #IDC_LSTCOLOR), #Null, #False)
          EndIf
       EndIf
  EndSelect
EndProcedure
 
Procedure GetResDialog(DialogId, *DialogProcedure)
  ProcedureReturn DialogBoxParam_(GetModuleHandle_(0), DialogId, WindowID(#Main), *DialogProcedure, 0)
EndProcedure
 
OpenWindow_Window_0()
 
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #String_0
      ElseIf EventGadget = #String_1
      ElseIf EventGadget = #String_2
      ElseIf EventGadget = #String_3
      ElseIf EventGadget = #Button_4
        GetResDialog(#IDD_DLGOPTIONCOLOR, @DlgProc())
      EndIf
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Main
        CloseWindow(#Main)
        Break
      EndIf
  EndSelect
ForEver
DataSection
  stringnames:
 Data.s "Selection bar", "Address text", "Data text"
  Data.s "Number & text", "Selected focus back", "Selected lost focus back"
  Data.s "Selected number", "Selected ascii text", "Back"
  Data.s "Selection bar pen", "Line numbers"
  col:
 Data.l $ACFBB0, $EEC8D3, $87BECB, $00008000, $00FF0000, $000000FF, $A5BEFC, $00C0C0C0, $00C0F0F0, $00808080, $00800000
EndDataSection



Вложения:
ColorGadget.rar [257 байт]
Скачиваний: 342

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Последний раз редактировалось pablov Вс май 06, 2012 8:43 am, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 01, 2012 6:46 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт май 24, 2011 7:01 pm
Сообщений: 505
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
pablov
Затея неплохая. Я бы прям благодарен тебе был, если бы ты написал нормальную, многофункциональную утилиту для работы с цветом. Пользую для этих целей колорманию, но она не очень)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 01, 2012 7:50 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6323
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
pablov писал(а):
Получается своеобразный ColorGadget.

Или я чего то не понял ( сказывается праздничное застолье, прошу скидку! ) или 80% этого кода можно заменить на Color = ColorRequester([CurrentColor]) ?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 3:59 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Димастый писал(а):
многофункциональную утилиту для работы с цветом.

Помоему этих утилит как собак нерезаных. Лично меня устраивает Color Picker из состава PB. Ему бы еще добавить цвет точки под курсором...
kvitaliy писал(а):
или 80% этого кода можно заменить на Color = ColorRequester([CurrentColor]) ?

Виталий, че, гаджеты очень похожи? Внешне и функционально

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 5:44 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6323
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
pablov писал(а):
Внешне и функционально

Вот тут функционально. Кнопочку пощелкай:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
;kvitaliy for PB4.* 12.01.2007 
;{- Enumerations
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #ButtonGadget_0
  #ButtonGadget_1
EndEnumeration
;}
;}
;{   можно менять  цвет конкретных элементов
; #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 ;Text of inactive window
; #COLOR_BTNHIGHLIGHT = 20 ;3D highlight of button
 
;}
 
Global Dim SavedColors(21)
Global Dim IndexArray(21)
Global Dim NewColors(21)
 
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 386, 260, 275, 62, "Цвет системной палитры", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_SizeGadget)
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#ButtonGadget_0, 15, 15, 95, 20, "Изменить")
      ButtonGadget(#ButtonGadget_1, 150, 15, 100, 20, "Восстановить")
    EndIf
  EndIf
EndProcedure
 
OpenWindow_Window_0()
 
For i = 0 To 20
   SavedColors(i) = GetSysColor_(i)
Next i
 
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #ButtonGadget_0
     
      ; Изменить цвета всех элементов на экране случайным образом
         For i = 0 To 20
             NewColors(i) = RGB(Random(255),Random(255),Random(255))
             IndexArray(i) = i
         Next i
       SetSysColors_( 21, @IndexArray(0), @NewColors(0))
      ElseIf EventGadget = #ButtonGadget_1
       ; восстановить цвет
         SetSysColors_( 21, @IndexArray(0), @SavedColors(0))
      EndIf
    ; //////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        Break
      EndIf
  EndSelect
ForEver
;}
    ; восстановить цвет перед выходом!!!
    SetSysColors_( 21, @IndexArray(0), @SavedColors(0))
End
 


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 6:44 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
kvitaliy писал(а):
Кнопочку пощелкай:

По моему мы про разное говорим. Я про новый гаджет, а ты про кнопочку пощелкать :D
Кстати вот такие контролы то же имеют место быть.

Изображение

Этот на базе ComboBoxGadget
Изображение

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 7:55 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6323
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
Да нет, ты не понял. Мы говорили о наглядности и функциональности. Так вот если мой код соединить с твоим гаджетом то будет интересная функциональность!

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 02, 2012 11:33 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
kvitaliy писал(а):
Да нет, ты не понял.

Да я хз кто кого не понял. Я предложил новый ColorGadget, а ты говоришь что
kvitaliy писал(а):
80% этого кода можно заменить на Color = ColorRequester
дык замени...

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт май 03, 2012 5:45 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
pablov,kvitaliy "Alt+P"

Изображение

Только вот как у Фреда исходник выпросить?

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт май 03, 2012 6:21 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6323
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
pablov писал(а):
дык замени...

Не вижу пока практического применения
lakomet писал(а):
Только вот как у Фреда исходник выпросить?

Это пишется за 30 мин, что там сложного?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт май 03, 2012 6:26 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
kvitaliy писал(а):
Это пишется за 30 мин, что там сложного?

Сложного ни чего, как два пальца об асфальт, но когда есть готовое, зачем тратить время на велосипед :D

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт май 03, 2012 3:25 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Вот еще накодил два ColorGadget'a Один из ComboBoxGadget, другой из ListViewGadget

Изображение

Изображение

Пользуйтесь на здоровье :D
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
; Кодил Pablov 
; 02\05\2012
; Тестил на win XP SP3
Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Menu_Window_0
EndEnumeration
Enumeration
  #MenuExit
  #MenuForegroundColor
  #MenuBackgroundColor
  #MenuAbout
  #txt
EndEnumeration
 
Import "ColorPicker.res" : EndImport
 
#IDD_DLGBackground    = 129
#IDD_DLGForeground    = 130
#IDC_FOREGROUND       = 1000          
#IDC_BACKGROUND       = 1001
#IDOK_FOREGROUND      = 3
#IDCANCEL_FOREGROUND  = 4
#IDOK_BACKGROUND      = 1
#IDCANCEL_BACKGROUND  = 2
 
; Foreground And background colors
Global g_fgColor = $C0C0C0
Global g_bgColor = $C08000
; В массив запишем нашу колекцию цветов 48 штук
Global Dim g_crItems.l(47)
        Restore col
        For i=0 To 47
           Read.l g_crItems(i)
        Next i
;** Callback function of "Foreground color" dialog box.        
Procedure DlgForeground(hdlg.l, message.l, wParam.l, lparam.l)      
       
  Select message
;      Case #WM_CTLCOLORLISTBOX
          ; установить количество выпадающих элементов комбобокса
;           rc.RECT : lItemHeight.l : lListHeight.l
;           Static bIgnore.b
;           iListItems.b = 8  ; - количество элементов
;           If Not bIgnore
;              With rc
;                lItemHeight = SendMessage_(lParam, #LB_GETITEMHEIGHT, 0, 0)
;                lListHeight = lItemHeight * iListItems + 2
;                GetWindowRect_(lParam, rc)
;                bIgnore = #True
;                MoveWindow_(lParam, \Left, \Top, (\Right - \Left), lListHeight, #True)
;                bIgnore = False
;              EndWith
;           EndIf  
      Case #WM_INITDIALOG
          nColor.l
          For nColor = 0 To 47        
              num = SendDlgItemMessage_(hDlg, #IDC_FOREGROUND, #CB_ADDSTRING, 0, g_crItems(nColor))
              If g_fgColor = g_crItems(nColor)                       ; Устанавливаем позицию комбика
                SendDlgItemMessage_(hdlg, #IDC_FOREGROUND, #CB_SETCURSEL, nColor, 0)
              EndIf  
          Next nColor
      Case #WM_MEASUREITEM
          *lpmis.MEASUREITEMSTRUCT
          *lpmis = lparam
          *lpmis\itemWidth  = 10
          *lpmis\itemHeight = 18
      Case #WM_DRAWITEM
          hdc.l
          rc.RECT
          cr.l
          hbrush.l : hbrHighlight.l : hbrBackground.l
          *pdis.DRAWITEMSTRUCT
          *pdis = lparam
          hdc = *pdis\hDC
                      rc = *pdis\rcItem
                      If *pdis\itemID = -1 : ProcedureReturn 0 : EndIf
                      hbrHighlight = CreateSolidBrush_($FFFFFF - g_bgColor)
                      hbrBackground = CreateSolidBrush_(g_bgColor)                   
                      Select *pdis\itemAction
                         Case #ODA_DRAWENTIRE  
                           Select *pdis\CtlID
                             Case #IDC_FOREGROUND
                               rc = *pdis\rcItem
                               cr = *pdis\itemData
                               FillRect_(hdc, rc, hbrBackground)
                               InflateRect_(rc, -1, -1)
                               hbrush = CreateSolidBrush_(cr)
                               FillRect_(hdc, rc, hbrush)
                               DeleteObject_(hbrush)
                               FrameRect_(hdc, rc, GetStockObject_(#WHITE_BRUSH))
                           EndSelect
                         Case #ODA_SELECT  
                           rc = *pdis\rcItem
               If *pdis\itemState & #ODS_SELECTED
                                              hbrush = hbrHighlight
                                 Else
                                              hbrush = hbrBackground                       
                           EndIf
                           FrameRect_(hdc, @rc, hbrush)
                         Case #ODA_FOCUS  
                      EndSelect  
                      DeleteObject_(hbrHighlight)
                      DeleteObject_(hbrBackground)
            Case #WM_CLOSE
          EndDialog_(hDlg, wParam & $FFFF)
      Case #WM_COMMAND
          IDEvent = wParam
          IDEvent >> 16
          ID = wParam & $FFFF
          If IDEvent = #BN_CLICKED
            Select ID                                          
              Case  #IDOK_FOREGROUND                      ; Кнопка ОК
                                    i = SendDlgItemMessage_(hdlg, #IDC_FOREGROUND, #CB_GETCURSEL, 0, 0)
                                    g_fgColor = SendDlgItemMessage_(hdlg, #IDC_FOREGROUND, #CB_GETITEMDATA, i, 0)
                                    EndDialog_(hdlg, wParam & $FFFF)
                                    InvalidateRect_(GetParent_(hdlg), #Null, #True)
                                    SetGadgetColor(#txt, #PB_Gadget_FrontColor, g_fgColor)
                  SetGadgetColor(#txt, #PB_Gadget_BackColor, g_bgColor)
              Case #IDCANCEL_FOREGROUND                   ; Кнопка CANCEL
                 EndDialog_(hdlg, wParam & $FFFF)
                              EndSelect
                            EndIf    
  EndSelect    
       
EndProcedure  
;** Callback function of "Background color" dialog box.
Procedure DlgBackground(hdlg.l, message.l, wParam.l, lparam.l)      
 
  Select message
      Case #WM_INITDIALOG
                      nColor.l
          For nColor = 0 To 47        
                              SendDlgItemMessage_(hdlg, #IDC_BACKGROUND, #LB_ADDSTRING, nColor, "")
                        SendDlgItemMessage_(hdlg, #IDC_BACKGROUND, #LB_SETITEMDATA , nColor, g_crItems(nColor))
                        If g_bgColor = g_crItems(nColor)
                          SendDlgItemMessage_(hdlg, #IDC_BACKGROUND, #LB_SETCURSEL, nColor, 0)
                        EndIf
                Next nColor    
            Case #WM_MEASUREITEM
                      rc.RECT
                      *lpmis.MEASUREITEMSTRUCT
                      *lpmis = lparam
                      GetWindowRect_(GetDlgItem_(hdlg, *lpmis\CtlID), rc)
                      *lpmis\itemHeight = (rc\bottom - rc\top) / 6
                      *lpmis\itemWidth  = (rc\right - rc\left) / 8             
            Case #WM_CTLCOLORLISTBOX
                      CreateSolidBrush_(GetSysColor_(#COLOR_3DFACE))           
      Case #WM_DRAWITEM
                      hdc.l : cr.l : hbrush.l
                      *pdis.DRAWITEMSTRUCT             
                      *pdis = lparam
                      hdc = *pdis\hDC;
                      rc = *pdis\rcItem;
                ; Transparent.
                      SetBkMode_(hdc,#TRANSPARENT);                  
                      ; NULL object
                      If *pdis\itemID = -1 : ProcedureReturn 0 : EndIf
                      Select *pdis\itemAction                
                         Case #ODA_DRAWENTIRE                
                             If *pdis\CtlID = #IDC_BACKGROUND  
                                              rc = *pdis\rcItem
                                              cr = *pdis\itemData
                                              InflateRect_(rc, -3, -3)
                                              hbrush = CreateSolidBrush_(cr)
                                              FillRect_(hdc, rc, hbrush)
                                              DeleteObject_(hbrush)
                                              FrameRect_(hdc, rc, GetStockObject_(#GRAY_BRUSH))
                                         EndIf    
                                 ; *** FALL THROUGH ***
                         Case #ODA_SELECT                          
                                   rc = *pdis\rcItem;
                                   If *pdis\itemState & #ODS_SELECTED                      
                                             rc\bottom - 2
                                             rc\right - 2
                                             ; Draw the lighted side.
                                             hpen.l    = CreatePen_(#PS_SOLID, 1, GetSysColor_(#COLOR_BTNSHADOW))
                                             holdPen.l = SelectObject_(hdc, hpen)
                                             MoveToEx_(hdc, rc\left, rc\bottom, #Null)
                                             LineTo_(hdc, rc\left, rc\top)
                                             LineTo_(hdc, rc\right, rc\top)
                                             SelectObject_(hdc, holdPen)
                                             DeleteObject_(hpen);
                                             ; Draw the darkened side.
                                             hpen = CreatePen_(#PS_SOLID, 1, GetSysColor_(#COLOR_BTNHIGHLIGHT))
                                             holdPen = SelectObject_(hdc, hpen)
                                             LineTo_(hdc, rc\right, rc\bottom)
                                             LineTo_(hdc, rc\left, rc\bottom)
                                             SelectObject_(hdc, holdPen)
                                             DeleteObject_(hpen)                           
                             Else
                                             hbrush = CreateSolidBrush_(GetSysColor_(#COLOR_3DFACE))
                                             FrameRect_(hdc, rc, hbrush)
                                             DeleteObject_(hbrush)                             
                             EndIf
                         Case #ODA_FOCUS
                                   rc = *pdis\rcItem;
                                   InflateRect_(rc, -2, -2)
                                   DrawFocusRect_(hdc, rc)
                EndSelect
              Case #WM_COMMAND
          IDEvent = wParam
          IDEvent >> 16
          ID = wParam & $FFFF
          If IDEvent = #BN_CLICKED
            Select ID                                          
              Case  #IDOK_BACKGROUND                       ; Кнопка ОК
                                 nItem.l = SendDlgItemMessage_(hdlg, #IDC_BACKGROUND, #LB_GETCURSEL, 0, 0)
                                   g_bgColor = SendDlgItemMessage_(hdlg, #IDC_BACKGROUND, #LB_GETITEMDATA, nItem, 0)
                 EndDialog_(hdlg, wParam & $FFFF)
                 InvalidateRect_(GetParent_(hdlg), #Null, #True)  
                 SetWindowColor(#Window_0, g_bgColor)
                 SetGadgetColor(#txt, #PB_Gadget_BackColor, g_bgColor)
              Case  #IDCANCEL_BACKGROUND                   ; Кнопка CANCEL
                 EndDialog_(hdlg, wParam & $FFFF)
                  EndSelect
                EndIf
            Case #WM_CLOSE
          EndDialog_(hDlg, wParam & $FFFF)
  EndSelect  
EndProcedure
 
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 467, 184, 510, 321, "Main", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    SetWindowColor(#Window_0, g_bgColor)
    TextGadget(#txt, 150, 100, 300, 50, "Hello World!") : HideGadget(#txt, 1)
    SetGadgetFont(#txt, LoadFont(0, "Arial", 32, #PB_Font_Bold))
    SetGadgetColor(#txt, #PB_Gadget_FrontColor, g_fgColor)
    SetGadgetColor(#txt, #PB_Gadget_BackColor, g_bgColor)
    HideGadget(#txt, 0)
    If CreateMenu(#Menu_Window_0, WindowID(#Window_0))
      MenuTitle("File")
      MenuItem(#MenuExit, "Exit")
      MenuTitle("Color")
      MenuItem(#MenuForegroundColor, "Foreground Color")
      MenuItem(#MenuBackgroundColor, "Background Color")
      MenuTitle("Help")
      MenuItem(#MenuAbout, "About")
    EndIf
  EndIf
EndProcedure
 
Procedure GetResDialog(DialogId, *DialogProcedure)
  ProcedureReturn DialogBoxParam_(GetModuleHandle_(0), DialogId, WindowID(#Window_0), *DialogProcedure, 0)
EndProcedure
 
OpenWindow_Window_0()
 
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
    Case #PB_Event_Menu
      EventMenu = EventMenu()
      If EventMenu = #MenuExit
        CloseWindow(#Window_0)
        Break
      ElseIf EventMenu = #MenuForegroundColor
           GetResDialog(#IDD_DLGForeground, @DlgForeground())
         ElseIf EventMenu = #MenuBackgroundColor
           GetResDialog(#IDD_DLGBackground, @DlgBackground())
      ElseIf EventMenu = #MenuAbout
        MessageRequester("About", "   Created by Pablov              " +  Chr(10) + "  Copyright © 2012", #MB_OK|#MB_ICONINFORMATION)    
      EndIf
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
DataSection
  col:   ; Цвета в комбобоксе  и  листбоксе
  Data.l $000000, $000040, $000080, $404080, $80FFFF, $00FFFF, $4080FF, $0080FF
  Data.l $004080, $008080, $408080, $004000, $008000, $00FF00, $00FF80, $80FF80
  Data.l $80FF00, $40FF00, $808000, $408000, $404000, $808080, $808040, $800000
  Data.l $FF0000, $804000, $FFFF00, $FFFF80, $FF8000, $C08000, $FF8080, $A00000
  Data.l $400000, $C0C0C0, $400040, $600040, $800080, $400080, $C08080, $C080FF
  Data.l $FF80FF, $FF00FF, $8000FF, $FF0080, $800040, $70E88F, $74BEDF, $BDF6BD
EndDataSection


kvitaliy писал(а):
Не вижу пока практического применения

Слышал наверно о таком понятии, как цветовая схема. Вот у Петра редактор есть. Там дофига цветов настраивается. Всякие там ключевые слова, коменты, нумерация и т.д. Вот для таких случаев гаджет из первого поста. Юзер настраивает под себя прогу и сразу видит цветовую схему

ЗЫ у кого вынь 7 стоит, отпишитесь ( и х64 тоже)


Вложения:
Комментарий к файлу: Файл ресурса
ColorPicker.rar [292 байт]
Скачиваний: 329

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт май 03, 2012 3:28 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Windows 7 х32
Всё отлично робит. pablov, молодец

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт май 04, 2012 4:04 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Вот здесь есть ещё вариант, мож кому пригодится.

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт май 04, 2012 2:31 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Вот здесь лежит почти готовый ColorPicker AdobePhotoShop style
Димастый, доведи до ума 8)

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB