purebasic.info

PureBasic forum
Текущее время: Пн окт 22, 2018 2:31 am

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




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс май 06, 2012 8:45 am 
Не в сети
профессор

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

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


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

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Вот еще кодес. ColorPicker в стиле MS Office XP - 2003
В чужой код не подсматривал :wink:
Пурик 4.6 и выше
Изображение

Если кто заменит мой костыль из стринга и батона на ComboBoxGadget, буду признателен

Код:
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
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
; ColorPicker в стиле MS Office XP - 2003
; Кодил Pablov
; 15\05\2012
; Тестил на win XP SP3
; PureBasic v => 4.60
Enumeration
  #Window_0
  #Window_1
EndEnumeration
Enumeration
  #Button_0
  #Button_1
  #String_0
  #But_Color
  #WinColor
  #text
EndEnumeration
 
Structure PALETTE
  index.w
  color.l
  hint.s
  rt.RECT
EndStructure  
 
Global NewList col.PALETTE()
Global sel_Color.l = $00CC99
 
Restore col
For i = 1 To 40
   AddElement(col())
   Read.l col()\color
Next i
 
FirstElement(col())
Restore stringnames
For i = 1 To 40
   Read.s col()\hint
   NextElement(col())
Next i
 
Procedure IsMouseOver(wnd)
 GetWindowRect_(wnd,re.RECT)
 GetCursorPos_(pt.POINT)
 Result.l = PtInRect_(@re, pt\x | (pt\y<<32) )
ProcedureReturn Result
EndProcedure
 
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 200, 100, "ColorGadget", #PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
     StringGadget(#String_0, 50, 31, 70, 20, "",#WS_CLIPSIBLINGS|#PB_String_ReadOnly)
     SetGadgetColor(#String_0, #PB_Gadget_BackColor, sel_Color)
     ButtonImageGadget(#But_Color, 103, 33, 15, 16, CatchImage(#WinColor, ?pic))
     
    SetWindowTheme_(GadgetID(#But_Color), @"", @"")   ; Снимаем WindowTheme с двух гаджетов
    SetWindowTheme_(GadgetID(#String_0), @"", @"")
      ; Flat button  ***************************************************************
;     SetWindowTheme_(GadgetID(#But_Color),@"",@"")
;     SetWindowLongPtr_(GadgetID(#But_Color),#GWL_STYLE,GetWindowLongPtr_(GadgetID(#But_Color),#GWL_STYLE)|#BS_FLAT)
; ****************************************************************************
     ; Помещаем кнопку внуть StringGadget
     SetWindowPos_(GadgetID(#String_0),#HWND_BOTTOM,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
  EndIf
EndProcedure
 
Procedure Lin(x,y,x1,y1,Width,color)
   hDC=GetDC_(WindowID(#Window_1))
   pen=CreatePen_(#PS_SOLID,Width,color)  
   hPenOld=SelectObject_(hDC,pen)
   MoveToEx_(hDC,x,y,0):LineTo_(hDC,x1,y1)
   DeleteObject_(pen)
   DeleteObject_(hPenOld)
EndProcedure
 
Procedure OpenWindow_Window_1()
  If OpenWindow(#Window_1, 0, 0, 176, 133, "Window_1", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible,WindowID(#Window_0))
       SetWindowColor(#Window_1, #White)
       ClientToScreen_(GadgetID(#String_0), p.RECT)
       GetWindowRect_(WindowID(#Window_1), r.RECT)
       MoveWindow_(WindowID(#Window_1), p\left-2,  p\top + GadgetHeight(#String_0), r\Right - r\Left, r\Bottom - r\Top, #Null)  
      ; Не даем окну выскочить за пределами экрана  *************************************************
       If WindowX(#Window_1) < 0
            g = Abs(WindowX(#Window_1))
            MoveWindow_(WindowID(#Window_1), p\left-2 + g,  p\top + GadgetHeight(#String_0), r\Right - r\Left, r\Bottom - r\Top, #Null)  
       EndIf
       If WindowX(#Window_1) + WindowWidth(#Window_1) > GetDeviceCaps_(GetDC_(0), #HORZRES)
            d = WindowX(#Window_1) + WindowWidth(#Window_1) - GetDeviceCaps_(GetDC_(0), #HORZRES)
            MoveWindow_(WindowID(#Window_1), p\left-2 - d,  p\top + GadgetHeight(#String_0), r\Right - r\Left, r\Bottom - r\Top, #Null)  
       EndIf
       If WindowY(#Window_1) + WindowHeight(#Window_1) > GetDeviceCaps_(GetDC_(0), #VERTRES)
           MoveWindow_(WindowID(#Window_1), p\left-2 - d + g,  p\top - WindowHeight(#Window_1)-4, r\Right - r\Left, r\Bottom - r\Top, #Null)  
       EndIf  
      ; **********************************************************************************************    
     p1.POINT
     p2.POINT
     lpRect.RECT
     FirstElement(col())
     For i = 100 To 139   ; Размещаем элементы палитры на окне #Window_1
          If j = 8 : j = 0 : m + 21 : n = 0 : a + 8 : EndIf
       
          col()\index = i
          CanvasGadget(i, i- 95 - a + n, 5 + m, 20, 20, #PB_Canvas_DrawFocus)
          GadgetToolTip(i, col()\hint)
          GetWindowRect_(GadgetID(i), lpRect)
         
          p1\x = lpRect\left
          p1\y = lpRect\top
          ScreenToClient_(WindowID(#Window_1), p1)
          col()\rt\left = p1\x
          col()\rt\top  = p1\y
         
          p2\x = lpRect\right
          p2\y = lpRect\bottom
          ScreenToClient_(WindowID(#Window_1), p2)
          col()\rt\right  = p2\x
          col()\rt\bottom = p2\y
         
          If StartDrawing(CanvasOutput(i))
             Box(3,3,14,14, $C0C0C0)
             Box(4,4,12,12, col()\color)
            StopDrawing()
          EndIf
          j + 1
          n + 20
          NextElement(col())
     Next i
     
     hWnd = TextGadget(#text,9,113,159, 15,"More colors...",#PB_Text_Center|#SS_NOTIFY)
     SetClassLong_(hWnd, #GCL_HCURSOR, LoadCursor_(0, #IDC_HAND))      
     SetGadgetColor(#text, #PB_Gadget_BackColor,  $FAE1D0)   ;
     
     SetClassLongPtr_(WindowID(#Window_1),#GCL_STYLE,$00020000)    ; тень от окна
     HideWindow(#Window_1,0)
     
     Lin(GadgetX(#text)-1, GadgetY(#text)-1, GadgetWidth(#text)+9,GadgetY(#text)-1, 1, $FFA000)
     Lin(GadgetX(#text)-1, GadgetY(#text)+GadgetHeight(#text), GadgetWidth(#text)+9,GadgetY(#text)+GadgetHeight(#text), 1, $FFA000)
     Lin(GadgetX(#text)-1, GadgetY(#text)-1, GadgetX(#text)-1, GadgetY(#text)+GadgetHeight(#text)+1, 1, $FFA000)
     Lin(GadgetWidth(#text)+9,GadgetY(#text)-1,GadgetWidth(#text)+9,GadgetY(#text)+GadgetHeight(#text)+1, 1, $FFA000)
     
     Lin(0,0,WindowWidth(#Window_1),0,1,GetSysColor_(#COLOR_BTNSHADOW))
     Lin(0,0,0,WindowHeight(#Window_1),1,GetSysColor_(#COLOR_BTNSHADOW))
     Lin(0, WindowHeight(#Window_1)-1 ,WindowWidth(#Window_1), WindowHeight(#Window_1)-1,1,GetSysColor_(#COLOR_BTNSHADOW))
     Lin(WindowWidth(#Window_1)-1, 0, WindowHeight(#Window_1)+42, WindowWidth(#Window_1),1, GetSysColor_(#COLOR_BTNSHADOW))  
 
     If sel_Color <> -1
         FirstElement(col())
         ForEach col()
            If col()\color = sel_Color
               hDC=GetDC_(WindowID(#Window_1))
               InflateRect_(col()\rt, 1, 1)
               DrawFocusRect_(hDC, col()\rt)     ; Выделяем выбраный цвет
               Break
            EndIf      
         Next col()
     EndIf    
  EndIf
EndProcedure
 
Procedure DrawItem(item.l, itemcolor.l, backcolor.l)
   ; Рисуем новый контур, либо удаляем предидущий
  FirstElement(col())
  ForEach col()
    If col()\index = item
       Break
    EndIf  
  Next col()
  If StartDrawing(CanvasOutput(item))
     Box(0,0,20,20, itemcolor)
     Box(1,1,18,18, backcolor)
     Box(3,3,14,14, $C0C0C0)
     Box(4,4,12,12, col()\color)
     StopDrawing()
  EndIf
EndProcedure
 
OpenWindow_Window_0()
 
Repeat
  If IsWindow(#Window_1)
     If GetForegroundWindow_() <> WindowID(#Window_1)
         CloseWindow(#Window_1)
     EndIf
  EndIf
  If IsGadget(#text)
    If IsMouseOver(GadgetID(#text))
       If n = 0
         SetGadgetColor(#text, #PB_Gadget_BackColor,  $FFA000)
         SetGadgetColor(#text, #PB_Gadget_FrontColor, $FFFFFF)
         n!1
        EndIf
     Else
        If n    
          SetGadgetColor(#text, #PB_Gadget_BackColor,  $FAE1D0)
          SetGadgetColor(#text, #PB_Gadget_FrontColor, $0)
          n!1
         EndIf
     EndIf
  EndIf    
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
         If EventGadget => 100                            
             DrawItem(EventGadget, $FFA000, $FFFFFF)      ; Подсвечиваем цвета под мышкой
         EndIf
         If EventGadget => 100 And EventType = #PB_EventType_MouseLeave  
             DrawItem(EventGadget, $FFFFFF, $FFFFFF)      ; Удаляем подсведку
         EndIf
         If EventGadget => 100 And EventType = #PB_EventType_LeftButtonUp  
             FirstElement(col())
             ForEach col()
               If col()\index = EventGadget
                  SetGadgetColor(#String_0, #PB_Gadget_BackColor, col()\color)
                  sel_Color = col()\color
                  Break
               EndIf
             Next col()
             CloseWindow(#Window_1)
         EndIf
      Select EventGadget
         
        Case #text
            CloseWindow(#Window_1)
            rescol = ColorRequester()
            If rescol <> -1
              SetGadgetColor(#String_0, #PB_Gadget_BackColor, rescol)
              sel_Color = rescol
            EndIf
         Case #But_Color
            OpenWindow_Window_1()
      EndSelect
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf  
  EndSelect
ForEver
 
DataSection
  col:          ; Цветовая палитра
  Data.l $000000,$003399,$003333,$003300,$663300,$800000,$993333,$333333          
  Data.l $000080,$0066FF,$008080,$008000,$808000,$FF0000,$996666,$808080          
  Data.l $0000FF,$0099FF,$00CC99,$669933,$CCCC33,$FF6633,$800080,$999999          
  Data.l $FF00FF,$00CCFF,$00FFFF,$00FF00,$FFFF00,$FFCC00,$663399,$C0C0C0        
  Data.l $CC99FF,$99CCFF,$99FFFF,$CCFFCC,$FFFFCC,$FFCC99,$FF99CC,$FFFFFF  
  stringnames:   ; Всплывающие подсказки
;   Data.s "Black","Brown","Dark Olive Green","Dark Green","Dark Teal","Dark blue","Indigo","Dark grey"  
;   Data.s "Dark red","Orange","Dark yellow","Green","Teal","Blue","Blue-grey","Grey - 40"
;   Data.s "Red","Light orange","Lime","Sea green","Aqua","Light blue","Violet","Grey - 50"
;   Data.s "Pink","Gold","Yellow","Bright green","Turquoise","Skyblue","Plum","Light grey"
;   Data.s "Rose","Tan","Light yellow","Pale green","Pale turquoise","Pale blue","Lavender","White"
; По русски
  Data.s "Черный","Коричневый","Оливковый","Темно-зеленый","Темно-сизый","Темно-синий","Индиго","Серый 80%"
  Data.s "Темно-красный","Оранжевый","Коричнево-зеленый","Зеленый","Сине-зеленый","Синий","Сизый","Серый 50%"
  Data.s "Красный","Светло-оранжевый","Травяной","Изумрудный","Темно-бирюзовый","Темно-голубой","Фиолетовый","Серый 40%"
  Data.s "Лиловый","Золотистый","Желтый","Ярко-зеленый","Бирюзовый","Голубой","Вишневый","Серый 25%"
  Data.s "Розовый","Светло-коричневый","Светло-желтый","Бледно-зеленый","Светло-бирюзовый","Бледно-голубой","Сиреневый","Белый"
  pic:
  Data.l $00010000,$20200001,$00010000,$10A80020,$00160000,$00280000,$00200000,$00400000,$00010000,$00000020
  Data.l $10800000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$0000FF00
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $0000FF00,$0000FF00,$0000FF00,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$0000FF00,$0000FF00,$0000FF00,$0000FF00,$0000FF00,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$0000FF00,$0000FF00,$0000FF00,$0000FF00,$0000FF00,$0000FF00,$0000FF00,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
  Data.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$FFFF0000
  Data.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
  Data.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FEFFFFFF,$FCFFFFFF,$F8FFFF7F,$F0FFFF3F,$FFFFFF1F,$FFFFFFFF,$FFFFFFFF
  Data.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
  Data.l $FFFFFFFF
  Data.b $FF,$FF
EndDataSection  


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


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

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

Заменил сам
Код:
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
286
287
288
289
290
291
292
293
294
295
Enumeration
  #Window_0
  #Window_1
EndEnumeration
Enumeration
  #text
  #ComboBox_1
  #rgb
EndEnumeration
 
Structure PALETTE
  index.w
  color.l
  hint.s
  rt.RECT
EndStructure  
 
Declare OpenWindow_Window_1()
 
Global NewList col.PALETTE()
Global sel_Color.l = $00CC99
Global BackBrush.l
Global Callback.l
 
Restore col
For i = 1 To 40
   AddElement(col())
   Read.l col()\color
Next i
 
FirstElement(col())
Restore stringnames
For i = 1 To 40
   Read.s col()\hint
   NextElement(col())
Next i
 
Procedure IsMouseOver(wnd)
 GetWindowRect_(wnd,re.RECT)
 GetCursorPos_(pt.POINT)
 Result.l = PtInRect_(@re, pt\x | (pt\y<<32) )
ProcedureReturn Result
EndProcedure
 
Procedure.l MainCallback( hwnd.l, msg.l, wparam.l, lparam.l )
  Protected result ;
  result = #PB_ProcessPureBasicEvents
  If msg = #WM_CTLCOLOREDIT And lparam = GadgetID(#ComboBox_1)
      lb.LOGBRUSH
      lb\lbColor = sel_Color
      lb\lbStyle = #BS_SOLID
      result = CreateBrushIndirect_(@lb)
      hBrush = result
  EndIf
  ProcedureReturn result
EndProcedure
 
Procedure CBcallback(hwnd, msg, wparam, lparam)
  result = CallWindowProc_(Callback, hwnd, msg, wparam, lparam)
  Select msg
     Case #WM_LBUTTONDOWN
       If IsWindow(#Window_1)
          CloseWindow(#Window_1)
       Else  
          OpenWindow_Window_1()
       EndIf
     Case #WM_CTLCOLORLISTBOX
  ;        установить количество выпадающих элементов комбобокса
          rc.RECT : lItemHeight.l : lListHeight.l
          Static bIgnore.b
          iListItems.b = 0  ; - количество элементов
          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
  EndSelect
  ProcedureReturn result
EndProcedure
 
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 200, 100, "ColorGadget", #PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget)
    ComboBoxGadget(#ComboBox_1, 40, 30, 120, 20, #CBS_OWNERDRAWFIXED|#CBS_HASSTRINGS)
    TextGadget(#rgb, 40, 60, 140, 20, "")
    SetGadgetText(#rgb, "Color = RGB(" + Str(Red(sel_Color)) + ", " +Str(Green(sel_Color))+ ", "+Str(Blue(sel_Color)) +")")
  EndIf
EndProcedure
 
Procedure Lin(x,y,x1,y1,Width,color)
   hDC=GetDC_(WindowID(#Window_1))
   pen=CreatePen_(#PS_SOLID,Width,color)  
   hPenOld=SelectObject_(hDC,pen)
   MoveToEx_(hDC,x,y,0):LineTo_(hDC,x1,y1)
   DeleteObject_(pen)
   DeleteObject_(hPenOld)
EndProcedure
 
Procedure OpenWindow_Window_1()
  If OpenWindow(#Window_1, 0, 0, 176, 133, "Window_1", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible,WindowID(#Window_0))
       SetWindowColor(#Window_1, #White)
       ClientToScreen_(GadgetID(#ComboBox_1), p.RECT)
       GetWindowRect_(WindowID(#Window_1), r.RECT)
       MoveWindow_(WindowID(#Window_1), p\left,  p\top + GadgetHeight(#ComboBox_1)+1, r\Right - r\Left, r\Bottom - r\Top, #Null)  
      ; Не даем окну выскочить за пределами экрана  *************************************************
       If WindowX(#Window_1) < 0
            g = Abs(WindowX(#Window_1))
            MoveWindow_(WindowID(#Window_1), p\left-2 + g,  p\top + GadgetHeight(#ComboBox_1), r\Right - r\Left, r\Bottom - r\Top, #Null)  
       EndIf
       If WindowX(#Window_1) + WindowWidth(#Window_1) > GetDeviceCaps_(GetDC_(0), #HORZRES)
            d = WindowX(#Window_1) + WindowWidth(#Window_1) - GetDeviceCaps_(GetDC_(0), #HORZRES)
            MoveWindow_(WindowID(#Window_1), p\left-2 - d,  p\top + GadgetHeight(#ComboBox_1), r\Right - r\Left, r\Bottom - r\Top, #Null)  
       EndIf
       If WindowY(#Window_1) + WindowHeight(#Window_1) > GetDeviceCaps_(GetDC_(0), #VERTRES)
           MoveWindow_(WindowID(#Window_1), p\left-2 - d + g,  p\top - WindowHeight(#Window_1)-4, r\Right - r\Left, r\Bottom - r\Top, #Null)  
       EndIf  
      ; **********************************************************************************************    
     p1.POINT
     p2.POINT
     lpRect.RECT
     FirstElement(col())
     For i = 100 To 139   ; Размещаем элементы палитры на окне #Window_1
          If j = 8 : j = 0 : m + 21 : n = 0 : a + 8 : EndIf
       
          col()\index = i
          CanvasGadget(i, i- 95 - a + n, 5 + m, 20, 20, #PB_Canvas_DrawFocus)
          GadgetToolTip(i, col()\hint)
          GetWindowRect_(GadgetID(i), lpRect)
         
          p1\x = lpRect\left
          p1\y = lpRect\top
          ScreenToClient_(WindowID(#Window_1), p1)
          col()\rt\left = p1\x
          col()\rt\top  = p1\y
         
          p2\x = lpRect\right
          p2\y = lpRect\bottom
          ScreenToClient_(WindowID(#Window_1), p2)
          col()\rt\right  = p2\x
          col()\rt\bottom = p2\y
         
          If StartDrawing(CanvasOutput(i))
             Box(3,3,14,14, $C0C0C0)
             Box(4,4,12,12, col()\color)
            StopDrawing()
          EndIf
          j + 1
          n + 20
          NextElement(col())
     Next i
     
     hWnd = TextGadget(#text,9,113,159, 15,"More colors...",#PB_Text_Center|#SS_NOTIFY)
     SetClassLong_(hWnd, #GCL_HCURSOR, LoadCursor_(0, #IDC_HAND))      
     SetGadgetColor(#text, #PB_Gadget_BackColor,  $FAE1D0)   ;
     
     SetClassLongPtr_(WindowID(#Window_1),#GCL_STYLE,$00020000)    ; тень от окна
     HideWindow(#Window_1,0)
     
     Lin(GadgetX(#text)-1, GadgetY(#text)-1, GadgetWidth(#text)+9,GadgetY(#text)-1, 1, $FFA000)
     Lin(GadgetX(#text)-1, GadgetY(#text)+GadgetHeight(#text), GadgetWidth(#text)+9,GadgetY(#text)+GadgetHeight(#text), 1, $FFA000)
     Lin(GadgetX(#text)-1, GadgetY(#text)-1, GadgetX(#text)-1, GadgetY(#text)+GadgetHeight(#text)+1, 1, $FFA000)
     Lin(GadgetWidth(#text)+9,GadgetY(#text)-1,GadgetWidth(#text)+9,GadgetY(#text)+GadgetHeight(#text)+1, 1, $FFA000)
     
     Lin(0,0,WindowWidth(#Window_1),0,1,GetSysColor_(#COLOR_BTNSHADOW))
     Lin(0,0,0,WindowHeight(#Window_1),1,GetSysColor_(#COLOR_BTNSHADOW))
     Lin(0, WindowHeight(#Window_1)-1 ,WindowWidth(#Window_1), WindowHeight(#Window_1)-1,1,GetSysColor_(#COLOR_BTNSHADOW))
     Lin(WindowWidth(#Window_1)-1, 0, WindowHeight(#Window_1)+42, WindowWidth(#Window_1),1, GetSysColor_(#COLOR_BTNSHADOW))  
 
     If sel_Color <> -1
         FirstElement(col())
         ForEach col()
            If col()\color = sel_Color
               hDC=GetDC_(WindowID(#Window_1))
               InflateRect_(col()\rt, 1, 1)
               DrawFocusRect_(hDC, col()\rt)     ; Выделяем выбраный цвет
               Break
            EndIf      
         Next col()
     EndIf    
  EndIf
EndProcedure
 
Procedure DrawItem(item.l, itemcolor.l, backcolor.l)
   ; Рисуем новый контур, либо удаляем предидущий
  FirstElement(col())
  ForEach col()
    If col()\index = item
       Break
    EndIf  
  Next col()
  If StartDrawing(CanvasOutput(item))
     Box(0,0,20,20, itemcolor)
     Box(1,1,18,18, backcolor)
     Box(3,3,14,14, $C0C0C0)
     Box(4,4,12,12, col()\color)
     StopDrawing()
  EndIf
EndProcedure
 
OpenWindow_Window_0()
SetWindowCallback(@MainCallback(), #Window_0)
Callback = SetWindowLongPtr_(GadgetID(#ComboBox_1), #GWL_WNDPROC, @CBcallback())
 
Repeat
  If IsWindow(#Window_1)
     If GetForegroundWindow_() <> WindowID(#Window_1)
         CloseWindow(#Window_1)
     EndIf
  EndIf
  If IsGadget(#text)
    If IsMouseOver(GadgetID(#text))
       If n = 0
         SetGadgetColor(#text, #PB_Gadget_BackColor,  $FFA000)
         SetGadgetColor(#text, #PB_Gadget_FrontColor, $FFFFFF)
         n!1
        EndIf
     Else
        If n    
          SetGadgetColor(#text, #PB_Gadget_BackColor,  $FAE1D0)
          SetGadgetColor(#text, #PB_Gadget_FrontColor, $0)
          n!1
         EndIf
     EndIf
  EndIf    
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
         If EventGadget => 100                            
             DrawItem(EventGadget, $FFA000, $FFFFFF)      ; Подсвечиваем цвета под мышкой
         EndIf
         If EventGadget => 100 And EventType = #PB_EventType_MouseLeave  
             DrawItem(EventGadget, $FFFFFF, $FFFFFF)      ; Удаляем подсведку
         EndIf
         If EventGadget => 100 And EventType = #PB_EventType_LeftButtonUp  
             FirstElement(col())
             ForEach col()
               If col()\index = EventGadget
                  sel_Color = col()\color
                  Break
               EndIf
             Next col()
             If BackBrush : DeleteObject_(BackBrush) : EndIf
             SetGadgetText(#rgb, "Color = RGB(" + Str(Red(sel_Color)) + ", " +Str(Green(sel_Color))+ ", "+Str(Blue(sel_Color)) +")")
             CloseWindow(#Window_1)
             RedrawWindow_(GadgetID(#ComboBox_1),0,0,#RDW_INVALIDATE | #RDW_ERASE)
             UpdateWindow_(GadgetID(#ComboBox_1))
         EndIf
      Select EventGadget
        Case #text
            CloseWindow(#Window_1)
            rescol = ColorRequester()
            If rescol <> -1
              sel_Color = rescol
               If BackBrush : DeleteObject_(BackBrush) : EndIf
               SetGadgetText(#rgb, "Color = RGB(" + Str(Red(sel_Color)) + ", " +Str(Green(sel_Color))+ ", "+Str(Blue(sel_Color)) +")")
               RedrawWindow_(GadgetID(#ComboBox_1),0,0,#RDW_INVALIDATE | #RDW_ERASE)
               UpdateWindow_(GadgetID(#ComboBox_1))
            EndIf
      EndSelect
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf  
  EndSelect
ForEver
 
DataSection
  col:          ; Цветовая палитра
  Data.l $000000,$003399,$003333,$003300,$663300,$800000,$993333,$333333          
  Data.l $000080,$0066FF,$008080,$008000,$808000,$FF0000,$996666,$808080          
  Data.l $0000FF,$0099FF,$00CC99,$669933,$CCCC33,$FF6633,$800080,$999999          
  Data.l $FF00FF,$00CCFF,$00FFFF,$00FF00,$FFFF00,$FFCC00,$663399,$C0C0C0        
  Data.l $CC99FF,$99CCFF,$99FFFF,$CCFFCC,$FFFFCC,$FFCC99,$FF99CC,$FFFFFF  
  stringnames:   ; Всплывающие подсказки
;   Data.s "Black","Brown","Dark Olive Green","Dark Green","Dark Teal","Dark blue","Indigo","Dark grey"  
;   Data.s "Dark red","Orange","Dark yellow","Green","Teal","Blue","Blue-grey","Grey - 40"
;   Data.s "Red","Light orange","Lime","Sea green","Aqua","Light blue","Violet","Grey - 50"
;   Data.s "Pink","Gold","Yellow","Bright green","Turquoise","Skyblue","Plum","Light grey"
;   Data.s "Rose","Tan","Light yellow","Pale green","Pale turquoise","Pale blue","Lavender","White"
; По русски
  Data.s "Черный","Коричневый","Оливковый","Темно-зеленый","Темно-сизый","Темно-синий","Индиго","Серый 80%"
  Data.s "Темно-красный","Оранжевый","Коричнево-зеленый","Зеленый","Сине-зеленый","Синий","Сизый","Серый 50%"
  Data.s "Красный","Светло-оранжевый","Травяной","Изумрудный","Темно-бирюзовый","Темно-голубой","Фиолетовый","Серый 40%"
  Data.s "Лиловый","Золотистый","Желтый","Ярко-зеленый","Бирюзовый","Голубой","Вишневый","Серый 25%"
  Data.s "Розовый","Светло-коричневый","Светло-желтый","Бледно-зеленый","Светло-бирюзовый","Бледно-голубой","Сиреневый","Белый"
EndDataSection
   


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


Последний раз редактировалось pablov Пт май 18, 2012 9:45 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт май 18, 2012 9:22 pm 
Не в сети
PureBasic Coder
Аватар пользователя

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

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


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

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

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


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

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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 24, 2012 7:53 am 
Не в сети
профессор

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

Изображение


Вложения:
ToolBarPicker.pb [14.64 KiB]
Скачиваний: 237

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

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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Вс ноя 29, 2015 4:05 pm 
Не в сети
профессор

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

Изображение

Код существенно исправлен, реализована обработка событий нескольких подобных гаджетов
ButtonColorPicker
Код:
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
; https://luapower.com/files/luapower/winapi/button.lua
; https://msdn.microsoft.com/en-us/library/windows/desktop/bb775955(v=vs.85).aspx
EnableExplicit
Enumeration
  #Window_0
  #WinColor
EndEnumeration
 
Enumeration
  #But
  #text
  #Canvas
  #TextCol
EndEnumeration
 
#BS_SPLITBUTTON = 12
#BS_DEFSPLITBUTTON    = 13
#BCN_FIRST = -1250
#BCN_DROPDOWN = #BCN_FIRST + 2
 
#BCM_SETSPLITINFO = 5639
 
#BCSIF_GLYPH = 1
#BCSIF_IMAGE = 2
#BCSIF_STYLE = 4
#BCSIF_SIZE = 8
 
#BCSS_NOSPLIT = 1
#BCSS_STRETCH = 2
#BCSS_ALIGNLEFT = 4
#BCSS_IMAGE = 8
 
Structure PALETTE
  index.i
  color.i
  hint.s
 ; rt.RECT
EndStructure  
 
Structure BUTTON_SPLITINFO
  mask.i
  himlGlyph.i
  uSplitStyle.i
  size.SIZE
EndStructure
 
Define EventGadget, EventType, i, but1, but2, rescol, text1, text2
 
Global NewList col.PALETTE()
Global sel_Color.i
 
Restore col
For i = 1 To 40
   AddElement(col())
   Read.l col()\color
Next i
 
FirstElement(col())
Restore hints
For i = 1 To 40
   Read.s col()\hint
   NextElement(col())
Next i
 
Procedure IsMouseOver(wnd)
 Protected re.RECT, pt.POINT
 GetWindowRect_(wnd, re)
 GetCursorPos_(pt)
 ProcedureReturn PtInRect_(@re, pt\x | (pt\y<<32))
EndProcedure
 
Procedure cColor(c1, c2, c3)
  Protected Font = LoadFont(#PB_Any, "Arial", 8)
  If StartDrawing(CanvasOutput(#Canvas))
     DrawingFont(FontID(Font))
     DrawingMode(#PB_2DDrawing_Transparent)
     Box(0, 0, 160, 18, c1)  
     Box(1, 1, 158, 16, c2)  
     DrawText(45, 1, "More colors...", c3)
     StopDrawing()
 EndIf
EndProcedure
 
Procedure ColorWindow(*p.RECT, butdata)
  Protected d, i, j, n, m, a
  Protected r.RECT
  If OpenWindow(#WinColor, 0, 0, 176, 133, "Window_1", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible,WindowID(#Window_0))
     SetWindowColor(#WinColor, #White)
     GetWindowRect_(WindowID(#WinColor), @r)
     ResizeWindow(#WinColor, *p\left, *p\bottom, #PB_Ignore, #PB_Ignore)  
     ; Не даем окну выскочить за пределы экрана  *************************************************
     If WindowX(#WinColor) < 0
         ResizeWindow(#WinColor, *p\left-2 + Abs(WindowX(#WinColor)),  *p\top + *p\bottom-*p\top, r\Right - r\Left, r\Bottom - r\Top)  
     EndIf
     If WindowX(#WinColor) + WindowWidth(#WinColor) > GetDeviceCaps_(GetDC_(0), #HORZRES)
         d = WindowX(#WinColor) + WindowWidth(#WinColor) - GetDeviceCaps_(GetDC_(0), #HORZRES)
         ResizeWindow(#WinColor, *p\left-2 - d,  *p\top + *p\bottom-*p\top, r\Right - r\Left, r\Bottom - r\Top)  
     EndIf
     If WindowY(#WinColor) + WindowHeight(#WinColor) > GetDeviceCaps_(GetDC_(0), #VERTRES)
         ResizeWindow(#WinColor, *p\left-2,  *p\top - WindowHeight(#WinColor)-4, r\Right - r\Left, r\Bottom - r\Top)  
     EndIf  
     ; **********************************************************************************************    
     FirstElement(col())
     For i = 0 To 39   ; Размещаем элементы палитры на окне #WinColor
          If j = 8 : j = 0 : m + 21 : n = 0 : a + 8 : EndIf
          col()\index = CanvasGadget(#PB_Any, i + 5 - a + n, 5 + m, 20, 20, #PB_Canvas_DrawFocus)
          GadgetToolTip(col()\index, col()\hint)
          If StartDrawing(CanvasOutput(col()\index))
             Box(3,3,14,14, $C0C0C0)
             Box(4,4,12,12, col()\color)
            StopDrawing()
          EndIf
          j + 1  
          n + 20
          NextElement(col())
     Next i        
     SetWindowData(#WinColor, butdata)
     SetClassLongPtr_(WindowID(#WinColor),#GCL_STYLE, #CS_DROPSHADOW)                                        ; тень от окна
     TextGadget(#PB_Any, 0, 0, WindowWidth(#WinColor), WindowHeight(#WinColor), "", #SS_BLACKFRAME)          ; Контур окна
     HideWindow(#WinColor,0)
     CanvasGadget(#Canvas, 9, 110, 160, 18)
     cColor($FFA000, $FAE1D0, 0)
  EndIf
EndProcedure
 
Procedure DrawItem(item.i, itemcolor.i, backcolor.i = -1)
   ; Рисуем новый контур, либо удаляем предидущий
  If StartDrawing(CanvasOutput(item))
     Box(0,0,20,20, itemcolor)
     Box(1,1,18,18, backcolor)
     Box(3,3,14,14, $C0C0C0)
     Box(4,4,12,12, col()\color)
     StopDrawing()
  EndIf
EndProcedure
 
Procedure EventButton(gadget)
   Protected rcButton.RECT
   MapWindowPoints_(GadgetID(gadget), 0, rcButton, 2)
   rcButton\bottom = rcButton\bottom + GadgetHeight(gadget)
   rcButton\left   = rcButton\left + 1
   ColorWindow(rcButton, GetGadgetData(gadget))
EndProcedure
             
Procedure ColorButtonGadget(gadget, x, y, w, h, flag, color)
  Protected txt.i, but.i
  Protected SplitInfo.BUTTON_SPLITINFO
  txt = TextGadget(#PB_Any, x + 8, y + 6, w - 30, h - 12, "", #SS_SUNKEN)  ;  #SS_ETCHEDFRAME #WS_BORDER
  but = ButtonGadget(#PB_Any, x, y, w, h, "", #WS_CLIPSIBLINGS | #BS_SPLITBUTTON | #BS_DEFPUSHBUTTON)
  SplitInfo\mask = #BCSIF_STYLE | #BCSIF_SIZE
  SplitInfo\uSplitStyle = #BCSS_STRETCH | #BCSS_NOSPLIT
  SplitInfo\size\cx = 20
  SplitInfo\size\cy = 16
  SendMessage_(GadgetID(but), #BCM_SETSPLITINFO, 0, @SplitInfo)
  SetGadgetColor(txt, #PB_Gadget_BackColor, color)
  SetGadgetData(but, txt)
  SetGadgetData(txt, but)
;  Debug GetProp_(GadgetID(but), "PB_ID")
  ProcedureReturn but
EndProcedure  
         
OpenWindow(#Window_0, 0, 0, 400, 250, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  but1 = ColorButtonGadget(#PB_Any, 70, 35, 115, 30, #WS_CLIPSIBLINGS | #BS_SPLITBUTTON | #BS_DEFPUSHBUTTON, $ff9f00)
  GadgetToolTip(but1, "Window color")
  text1 = TextGadget(#PB_Any, 200, 42, 80, 18, "BackColor") : SetGadgetFont(text1, FontID(LoadFont(#PB_Any, "Arial", 10)))
  but2 = ColorButtonGadget(#PB_Any, 70, 75, 115, 30, #WS_CLIPSIBLINGS | #BS_SPLITBUTTON | #BS_DEFPUSHBUTTON, $0099ff)
  GadgetToolTip(but2, "Text color")
  text2 = TextGadget(#PB_Any, 200, 82, 100, 18, "ForeColor") : SetGadgetFont(text2, FontID(LoadFont(#PB_Any, "Arial", 10)))
Repeat
  If IsWindow(#WinColor)
     If GetForegroundWindow_() <> WindowID(#WinColor)
       CloseWindow(#WinColor)
     EndIf
  EndIf
  Select WaitWindowEvent()  
       Case #PB_Event_Gadget
         EventGadget = EventGadget()  
         EventType = EventType()
         If IsWindow(#WinColor)
           ForEach col()
             If col()\index = EventGadget  And EventType = #PB_EventType_MouseEnter
               DrawItem(EventGadget, $00A0FF)                               ; Подсвечиваем цвета под мышкой
               Break
             ElseIf col()\index = EventGadget And EventType = #PB_EventType_MouseLeave
               DrawItem(EventGadget, $FFFFFF)                               ; Удаляем подсведку
               Break
             ElseIf col()\index = EventGadget And EventType = #PB_EventType_LeftButtonUp
               Select GetGadgetData(GetWindowData(#WinColor))               ; Определяем с какой кнопки было вызвано окно #WinColor
                 Case but1                                                  ; и выполняем нужные действия
                   SetGadgetColor(text1, #PB_Gadget_BackColor, col()\color)
                 Case but2
                   SetGadgetColor(text2, #PB_Gadget_FrontColor, col()\color)
               EndSelect
               SetGadgetColor(GetWindowData(#WinColor), #PB_Gadget_BackColor, col()\color)
               CloseWindow(#WinColor)
               Break
             EndIf  
           Next col()
             If EventGadget =  #Canvas And EventType = #PB_EventType_MouseEnter
               cColor($FF8000, $FFA000, -1)
             ElseIf EventGadget =  #Canvas And EventType = #PB_EventType_MouseLeave
               cColor($FFA000, $FAE1D0, 0)
             EndIf
             If EventGadget =  #Canvas And EventType = #PB_EventType_LeftButtonDown
               rescol = ColorRequester()
               If rescol <> -1
                 Select GetGadgetData(GetWindowData(#WinColor))             ; Определяем с какой кнопки было вызвано окно #WinColor
                   Case but1                                                ; и выполняем нужные действия
                     SetGadgetColor(text1, #PB_Gadget_BackColor, rescol)
                   Case but2
                     SetGadgetColor(text2, #PB_Gadget_FrontColor, rescol)
                 EndSelect
                 SetGadgetColor(GetWindowData(#WinColor), #PB_Gadget_BackColor, rescol)
                 CloseWindow(#WinColor)
               Else
                 CloseWindow(#WinColor)
               EndIf
             EndIf  
         EndIf  
         Select EventGadget
           Case but1
             EventButton(but1)
           Case but2
             EventButton(but2)
         EndSelect    
       Case #PB_Event_CloseWindow
           Break      
  EndSelect
ForEver
 
DataSection
  col:          ; Цветовая палитра
  Data.l $000000,$003399,$003333,$003300,$663300,$800000,$993333,$333333          
  Data.l $000080,$0066FF,$008080,$008000,$808000,$FF0000,$996666,$808080          
  Data.l $0000FF,$0099FF,$00CC99,$669933,$CCCC33,$FF6633,$800080,$999999          
  Data.l $FF00FF,$00CCFF,$00FFFF,$00FF00,$FFFF00,$FFCC00,$663399,$C0C0C0        
  Data.l $CC99FF,$99CCFF,$99FFFF,$CCFFCC,$FFFFCC,$FFCC99,$FF99CC,$FFFFFF  
  hints:   ; Всплывающие подсказки
;   Data.s "Black","Brown","Dark Olive Green","Dark Green","Dark Teal","Dark blue","Indigo","Dark grey"  
;   Data.s "Dark red","Orange","Dark yellow","Green","Teal","Blue","Blue-grey","Grey - 40"
;   Data.s "Red","Light orange","Lime","Sea green","Aqua","Light blue","Violet","Grey - 50"
;   Data.s "Pink","Gold","Yellow","Bright green","Turquoise","Skyblue","Plum","Light grey"
;   Data.s "Rose","Tan","Light yellow","Pale green","Pale turquoise","Pale blue","Lavender","White"
; По русски
  Data.s "Черный","Коричневый","Оливковый","Темно-зеленый","Темно-сизый","Темно-синий","Индиго","Серый 80%"
  Data.s "Темно-красный","Оранжевый","Коричнево-зеленый","Зеленый","Сине-зеленый","Синий","Сизый","Серый 50%"
  Data.s "Красный","Светло-оранжевый","Травяной","Изумрудный","Темно-бирюзовый","Темно-голубой","Фиолетовый","Серый 40%"
  Data.s "Лиловый","Золотистый","Желтый","Ярко-зеленый","Бирюзовый","Голубой","Вишневый","Серый 25%"
  Data.s "Розовый","Светло-коричневый","Светло-желтый","Бледно-зеленый","Светло-бирюзовый","Бледно-голубой","Сиреневый","Белый"
EndDataSection


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Вт дек 01, 2015 8:23 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 684
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
pablov, я так понял, ты хочешь сделать свою версию подбора/выбора цветов?
У меня есть своя версия, правда она больше ориентирована на WEB, но в ней напихано много чего, там кому то функцианала не хватало в нерусских прогах.
Если ты не против, выложу тут, если оно тебе или кому то интересно.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Вт дек 01, 2015 10:42 am 
Не в сети
профессор

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

Пожалуйста

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Вт дек 01, 2015 3:31 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
pablov писал(а):
Предлагаю вот такие кнопки ColorPicker'ы

Я конечно понимаю, что WinXP уже ни кого не волнует, но всё же скажу, что выглядит это довольно уныло тут
Изображение

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Вт дек 01, 2015 10:37 pm 
Не в сети
профессор

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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Ср дек 02, 2015 7:09 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 684
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
Скрин морды
Изображение

Это свежая версия, у себя ещё не выкладывал, кому не лень попинайте, может что вылезет. Проверял в ХР и ВИН7.
Без установки, распаковать и пнуть экзешник.


Вложения:
p1.png [45.01 KiB]
Скачиваний: 0
color_1.3.7z [438.7 KiB]
Скачиваний: 121
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ColorGadget из ListViewGadget
СообщениеДобавлено: Вт фев 02, 2016 2:33 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Табличка с названиями цветов и различными цифровыми представлениями. Около 1000 названий. Можно добавлять недостающие и постить сюда
Навеяно отсюда http://whoyougle.ru/services/colour/list
http://colorscheme.ru/color-names.html
Кто придумывал названия не знаю, но точно не я. Особенно вставляет "Бедра испуганной нимфы"
Изображение

PS Может кто ответит, зачем в PureBasic перевернуты байты в hex-отображении цвета
Цитата:
Красный RGB - 255,0,0 hex везде - #FF0000 PureBasic - $0000FF


Вложения:
ListingColor.rar [34.63 KiB]
Скачиваний: 110

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

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