purebasic.info

PureBasic forum
Текущее время: Пт авг 23, 2019 1:32 am

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Добавление гаджетов из DLL
СообщениеДобавлено: Вт мар 26, 2019 8:02 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11505
Благодарил (а): 4 раз.
Поблагодарили: 469 раз.
Пример добавления в окно гаджетов из DLL.
exe.
Код:
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
If OpenLibrary(0, "dll.dll")=0
  MessageRequester("", "Нет dll")
  End
EndIf
 
OpenWindow(0, 0, 0, 500, 500, "", #PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_ScreenCentered)
PanelGadget(0, 8, 8, 486, 486)
AddGadgetItem (0, -1, "exe")
  ButtonGadget(1, 10, 15, 80, 24,"Кнопка 1")
  ButtonGadget(2, 95, 15, 80, 24,"Кнопка 2")
AddGadgetItem(0, -1,"dll")
CloseGadgetList()
 
CallFunction(0, "CreateGadgets", OpenGadgetList(0, 1))
HideWindow(0, 0)
 
Repeat
  Event = WaitWindowEvent()
 
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case 1
        MessageRequester("exe", "Кнопка 1")
      Case 2
        MessageRequester("exe", "Кнопка 2")
    EndSelect
  EndIf
 
Until Event = #PB_Event_CloseWindow
 
CallFunction(0, "FreeGadgets")
CloseLibrary(0)

dll.
Код:
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
Enumeration
  #IMAGE_Content
  #IMAGE_Color
  #IMAGE_LoadSave
EndEnumeration
 
Enumeration
  #GADGET_Container
  #GADGET_Canvas
  #GADGET_Color
  #GADGET_Brush
  #GADGET_Line
  #GADGET_Box
  #GADGET_Circle
  #GADGET_Fill
  #GADGET_Clear
  #GADGET_Load
  #GADGET_Save
EndEnumeration
 
Global CurrentColor, CurrentMode, StartX, StartY
 
Procedure DrawAction(x, y, EventType)
 
  If StartDrawing(CanvasOutput(#GADGET_Canvas))
    Select CurrentMode
   
      Case #GADGET_Brush
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, 5, CurrentColor)
        EndIf
       
      Case #GADGET_Line
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
     
      Case #GADGET_Box
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
       
      Case #GADGET_Circle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
       
        If x > StartX
          rx = x - StartX
        Else
          rx = StartX - x
        EndIf
       
        If y > StartY
          ry = y - StartY
        Else
          ry = StartY - y
        EndIf
       
        If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
          ry = rx
        EndIf
       
        Ellipse(StartX, StartY, rx, ry, CurrentColor)
     
      Case #GADGET_Fill
        If EventType = #PB_EventType_LeftButtonDown
          FillArea(x, y, -1, CurrentColor)
        EndIf
 
    EndSelect
   
    StopDrawing()
  EndIf
 
EndProcedure
 
Procedure GadgetEvent()
 
  Select EventGadget()
     
    Case #GADGET_Canvas
      X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
      Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
      Type = EventType()
     
      Select EventType()
         
        Case #PB_EventType_LeftButtonDown
          ;
          If StartDrawing(ImageOutput(#IMAGE_Content))
            DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
            StopDrawing()
          EndIf
         
          StartX = X
          StartY = Y
          DrawAction(X, Y, EventType())
         
         
        Case #PB_EventType_LeftButtonUp
          DrawAction(X, Y, EventType())                        
         
        Case #PB_EventType_MouseMove
          If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
            DrawAction(X, Y, EventType())            
          EndIf
         
      EndSelect
     
    Case #GADGET_Color
      CurrentColor = ColorRequester(CurrentColor)
      If StartDrawing(ImageOutput(#IMAGE_Color))
        Box(0, 0, 35, 35, CurrentColor)
        StopDrawing()
        SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
      EndIf
     
    Case #GADGET_Brush, #GADGET_Line, #GADGET_Box, #GADGET_Circle, #GADGET_Fill
      EventGadget = EventGadget()
      For Gadget = #GADGET_Brush To #GADGET_Fill
        If Gadget = EventGadget
          SetGadgetState(Gadget, 1)
        Else
          SetGadgetState(Gadget, 0) ; Изменяет состояние всех остальных гаджетов
        EndIf
      Next Gadget          
      CurrentMode = EventGadget            
     
    Case #GADGET_Clear
      If StartDrawing(CanvasOutput(#GADGET_Canvas))
        Box(0, 0, 380, 380, $FFFFFF)
        StopDrawing()
      EndIf
     
    Case #GADGET_Load
      File$ = OpenFileRequester("Load Image...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
      If File$
        If LoadImage(#IMAGE_LoadSave, File$)
          If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, 380, 380, $FFFFFF)
            DrawImage(ImageID(#IMAGE_LoadSave), 0, 0)
            StopDrawing()
          EndIf
          FreeImage(#IMAGE_LoadSave)
        Else
          MessageRequester("CanvasGadget", "Cannot load image: " + File$)
        EndIf
      EndIf
     
    Case #GADGET_Save
      File$ = SaveFileRequester("Save Image...", File$, "JPEG Images|*.jpeg|All Files|*.*", 0)
      If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
        If CreateImage(#IMAGE_LoadSave, 380, 380, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
          DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
          StopDrawing()
         
          If SaveImage(#IMAGE_LoadSave, File$, #PB_ImagePlugin_JPEG) = 0
            MessageRequester("CanvasGadget", "Cannot save image: " + File$)
          EndIf
         
          FreeImage(#IMAGE_LoadSave)
        EndIf            
      EndIf
     
  EndSelect
 
EndProcedure
 
ProcedureDLL AttachProcess(Instance)
  UseJPEGImageDecoder()
  UseJPEGImageEncoder()
 
  CurrentColor = $000000
  CurrentMode  = #GADGET_Brush
  CreateImage(#IMAGE_Color, 35, 35, 24)
  CreateImage(#IMAGE_Content, 380, 380, 24)
 
EndProcedure
 
ProcedureDLL CreateGadgets(ParentID)
 
  UseGadgetList(ParentID)
  ContainerGadget(#GADGET_Container, 0, 0, 460, 400)
  CanvasGadget(#GADGET_Canvas, 10, 10, 380, 380, #PB_Canvas_ClipMouse)
 
  ButtonImageGadget(#GADGET_Color, 400, 10, 50, 50, ImageID(#IMAGE_Color))
 
  ButtonGadget(#GADGET_Brush,  400, 100, 50, 25, "Brush",  #PB_Button_Toggle)
  ButtonGadget(#GADGET_Line,   400, 130, 50, 25, "Line",   #PB_Button_Toggle)
  ButtonGadget(#GADGET_Box,    400, 160, 50, 25, "Box",    #PB_Button_Toggle)
  ButtonGadget(#GADGET_Circle, 400, 190, 50, 25, "Circle", #PB_Button_Toggle)
  ButtonGadget(#GADGET_Fill,   400, 220, 50, 25, "Fill",   #PB_Button_Toggle)
   
  ButtonGadget(#GADGET_Clear,  400, 280, 50, 25, "Clear")
 
  ButtonGadget(#GADGET_Load,   400, 335, 50, 25, "Load")
  ButtonGadget(#GADGET_Save,   400, 365, 50, 25, "Save")
 
  SetGadgetState(#GADGET_Brush, 1)
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
 
  CloseGadgetList()
 
  BindEvent(#PB_Event_Gadget, @GadgetEvent())
EndProcedure
 
ProcedureDLL FreeGadgets()
  UnbindEvent(#PB_Event_Gadget, @GadgetEvent())
 
  FreeGadget(#PB_All)
EndProcedure



Вложения:
Gadget_dll.zip [166.17 KiB]
Скачиваний: 41

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Добавление гаджетов из DLL
СообщениеДобавлено: Чт мар 28, 2019 10:22 am 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 462
Благодарил (а): 51 раз.
Поблагодарили: 21 раз.
Пункты репутации: 10
Пётр, при выходе из программы ошибка: "Прекращена работа программы "Прога.exe" Возникшая проблема привела к прекращения работы программы. Закройте эту программу. Закрыть программу". Это скомпилированный вариант. В IDE 561: "Invalid memory access (read error at address 3490983)". Win7 x86. Выделена строка: CloseLibrary(0). Но если после цикла добавить FreeGadget(0), то нет ошибки.


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

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


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

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


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

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