purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 10:02 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Прога типа conky
СообщениеДобавлено: Сб окт 07, 2017 7:35 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Всем привет!
Настроил себе conky и вроде бы всё устраивает, но как известно, нет предела совершенству...
вообщем, есть мысль написать самостоятельно подобную прогу без излишеств и с нужным функционалом
первое на что натыкаюсь: как сделать прозрачное окно, причем чтобы надписи на нем не становились прозрачными...
если у кого есть идеи и наработки в данном направлении - милости просим :D


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Вс окт 08, 2017 6:18 am 
Не в сети
профессор

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

а чё за прога, чё делает?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Вс окт 08, 2017 12:50 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
показывает различную инфу на рабочем столе
у меня, к примеру, выглядит сейчас вот так:
https://yadi.sk/i/lkeZ3Qdh3NZdrY
когда делаю прозрачное окно, например вот так:
Код:
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
; Module/File:     Window_SetTransparency.pb
; Function:        Set window transparency -Linux gtk2-gtk3.8
; Author:          Omi/shardik
; Date:            Oct. 14, 2014
; Version:         0.3 updt. gtk3.8
; Target Compiler: PureBasic 5.22/5.31/5.40
; Target OS:       Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni
;--------------------------------------------------------------
;depends on distribution (Lubuntu without function)
;still works till gtk3.8
 
EnableExplicit
 
ImportC ""
        gtk_widget_is_composited(*widget.GtkWidget)
        ;gtk_widget_set_opacity(*window.GtkWindow, opacity.d)
        gtk_window_set_opacity(*window.GtkWindow, opacity.d)
        gtk_scale_clear_marks(*scale.GtkScale)
        gtk_scale_add_mark(*scale.GtkScale, value.d, position.i, *markup)
        gtk_range_get_value.d(*range.GtkRange)
        gtk_adjustment_set_lower(*adjustment.GtkAdjustment, lower.d)
        gtk_adjustment_set_value(*adjustment.GtkAdjustment, value.d)
        g_signal_connect(*instance, detailed_signal.p-ascii, *c_handler, *|/1/>data, destroy= 0, flags= 0) As "g_signal_connect_data"
EndImport
 
; Object constants
#MainWin= 0
#TBar1  = 0
 
Global.i I, gEvent, gQuit, gCounter
Global *gWidget.GtkWidget, *gAdjustment.GtkAdjustment
 
ProcedureC Trackbar_changed(*trackbar, user_data)
        ; ----- set opacity with trackbar-position ...
        gtk_window_set_opacity(WindowID(#MainWin), gtk_range_get_value(*trackbar)); widget transparency set here
EndProcedure
 
If OpenWindow(#MainWin, 300, 200, 250, 200, "window-transparency", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
        TextGadget(#PB_Any, 5, 20, 90, 20, "transparency")
        TrackBarGadget(#TBar1, 90, 5, 150, 40, 0.5, 1);                    no lower-limit 0.5 possible (= 0) => need double instead PB-integer)
       
        ; ----- set trackbar to adjust transparency ...
        *gWidget= GadgetID(#TBar1)
        gtk_scale_set_value_pos_(*gWidget, #GTK_POS_RIGHT);                additional display value at right side
        gtk_scale_set_draw_value_(*gWidget, #True);                        display ON
        gtk_scale_clear_marks(*gWidget);                                   no marks => wrong cause pb-int-parameter
        *gAdjustment= gtk_range_get_adjustment_(*gWidget);                 get adjustment
        gtk_adjustment_set_lower(*gAdjustment, 0.5);                       set real lower-limit to 0.5
        gtk_adjustment_set_value(*gAdjustment, 0.8);                       preset value
        For I= 5 To 10
                gtk_scale_add_mark(*gWidget, I/10, #GTK_POS_TOP, #Null)
        Next I
        If Not gtk_widget_is_composited(WindowID(#MainWin))
                Debug "Window transparency is not supported on this system!"
        EndIf
       
        ; ----- set event for trackbar-change
        g_signal_connect(*gWidget, "value-changed", @Trackbar_changed(), *gWidget)
       
        ; ----- preset transparency ...
        gtk_window_set_opacity(WindowID(#MainWin), 0.8)
       
        Repeat
                gEvent= WaitWindowEvent()
               
                Select gEvent
                        Case #PB_Event_CloseWindow
                                gQuit= #True
                        Case #PB_Event_Gadget
                                ;  see Trackbar_changed(*trackbar, user_data) for event
                EndSelect
               
        Until gQuit
EndIf

все гаджеты на нем тоже становятся прозрачными, а мне этого не надо


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Пт дек 29, 2017 8:54 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Привет всем!
не прошло и года, а я кое-что сделал, правда, на conky совсем не похоже.
у кого будут предложения и замечания ю а вэлкам )
кнопки SwapOnOff() и LanOnOff() покамест не работают (не придумал, как заставить работать)
на прозрачность окна тоже пока "забил"
для отображения температуры нужно установить lm-sensors
жду предложений по уменьшению "прожорливости" проги в плане времени процессора и памяти
пробовал всё рисовать - памяти хавает втрое больше (
код прилагается:

Код:
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
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
Global width = 370, height = 590, sensor.s = "temp1", rows = 5, i$
#fnt0 = 0
 
Structure Statvfs
        f_bsize.i;   file system block size
        f_frsize.i;  fragment size
        f_blocks.i;  size of fs in f_frsize units
        f_bfree.i;   free blocks
        f_bavail.i;  free blocks for unprivileged users
        f_files.i;   inodes
        f_ffree.i;   free inodes
        f_favail.i;  free inodes for unprivileged users
        f_fsid.i;    file system ID
        CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        __f_unused.l
        CompilerEndIf
        f_flag.i;    mount flags: 1=readonly 2= nosuid
        f_namemax.i; maximum filename length
        f_spare.l[6]
EndStructure
 
Structure DriveInfoResult
        Size.q
        Used.q
        Free.q
EndStructure
Global Drive.DriveInfoResult
 
ImportC ""
        statvfs.l(Path.p-utf8, *value.Statvfs)
EndImport
 
Procedure.q DriveInfo(Path.s, *Result.DriveInfoResult)
        Protected v.statvfs
        Statvfs(Path, v)
        *Result\Size= v\f_blocks * v\f_frsize
        ;*Result\Used= (v\f_blocks - v\f_bfree) * v\f_frsize
        *Result\Free= v\f_bavail * v\f_frsize
EndProcedure
Procedure.s GetDataFromFile(file$, text1$, text2$, text3$)
  If ReadFile(0, file$)
    While Not Eof(0)
      t$ = ReadString(0)
      If FindString(t$, text1$)
        n = FindString(t$, text2$)+1
        If text3$ = ""
          t$ = LTrim(Mid(t$, n))
        Else
          t$ = LTrim(Mid(t$, n, FindString(t$, text3$)-n))
        EndIf
                    Break
                  EndIf      
    Wend
    CloseFile(0)
    ProcedureReturn t$
  EndIf
EndProcedure
Procedure DrawBox(idx, free)
  FreeImage(0)
  If CreateImage(0, 20, 40)
    If StartDrawing(ImageOutput(0))
      Box(0,0,20,40, RGB(0,0,0))
      Box(1,1,18,38, RGB(255,255,255))
      Box(1,1,18,free*0.4, RGB(0,0,0))
      DrawingMode(#PB_2DDrawing_Transparent): DrawingFont(FontID(#fnt0))
      If free>99
        DrawRotatedText(2, 30, Str(free), 90, RGB(255,255,255))
      Else
        DrawText(2,3,Str(free), RGB(255,255,255))
      EndIf
      StopDrawing()
    EndIf
  EndIf
  SetGadgetState(idx, ImageID(0))
EndProcedure
 
Procedure Timer()
  Dim arr(7)
  Dim brr.s(2)
  Static pidle = 0, ptotal = 0, pr = 0, pt = 0
  Structure Process
    PID.l
    CPU.f
    MEM.f
    COMMAND.s
  EndStructure
  NewList ProcInfo.Process()
 
  home$ = GetHomeDirectory()
  share$ = "/media/Share"
 
  If ReadFile(0, "/proc/cpuinfo")
    While Not Eof(0)
      t$ = ReadString(0)
      If FindString(t$, "MHz")
        i+1
        k.f + ValF(Mid(t$, FindString(t$, ":")+1))
                  EndIf      
    Wend
    CloseFile(0)
    CPUf.f = k/i                                                ;частота процессора
  EndIf
  SetGadgetText(101, Str(CPUf) + " МГц")
 
  ProgrammId = RunProgram("sensors", "", "", #PB_Program_Open | #PB_Program_Read)
  If ProgrammId
    While ProgramRunning(ProgrammId)
                If AvailableProgramOutput(ProgrammId)
                  t$ = ReadProgramString(ProgrammId)
                  If FindString(t$, sensor)
                    t$ = Mid(t$, FindString(t$, ":")+1)
                    Break
                  EndIf
                EndIf
        Wend
        CloseProgram(ProgrammId)
        CPUt.f = ValF(t$)
  EndIf
  SetGadgetText(102, Str(CPUt) + "°C")
    If CPUt>70
      SetGadgetColor(102, #PB_Gadget_FrontColor,RGB(255,0,0))
    ElseIf CPUt>60
      SetGadgetColor(102, #PB_Gadget_FrontColor,RGB(255,80,0))
    Else
      SetGadgetColor(102, #PB_Gadget_FrontColor,RGB(0,0,0))
    EndIf
 
  t$ = LTrim(GetDataFromFile("/proc/stat", "cpu", " ", ""))
  For i=0 To 7
    n = FindString(t$, " ")
    arr(i) = Val(Left(t$, n))
    total+arr(i)
    t$ = Mid(t$, n+1)
  Next i
  idle = arr(3) + arr(4)
  dt = total - ptotal
  di = idle - pidle
  ptotal = total
  pidle = idle
  CPUl.f = (dt-di)/dt*100                                           ;загрузка процессора
 
  t$ = GetDataFromFile("/proc/loadavg", "", "", "")
  For i=0 To 2
    n = FindString(t$, " ")
    brr(i) = Left(t$, n)
    t$ = Mid(t$, n+1)
  Next i
  LA$ = brr(0) + " " + brr(1) + " " + brr(2)                       ;load average
 
  SetGadgetText(103, Str(CPUl) + "%    " + LA$)
    If CPUl>80
      SetGadgetColor(103, #PB_Gadget_FrontColor,RGB(255,0,0))
    ElseIf CPUl>60
      SetGadgetColor(103, #PB_Gadget_FrontColor,RGB(255,80,0))
    ElseIf CPUl>40
      SetGadgetColor(103, #PB_Gadget_FrontColor,RGB(255,160,0))
    Else
      SetGadgetColor(103, #PB_Gadget_FrontColor,RGB(0,0,0))
    EndIf
 
  If ReadFile(0, "/proc/meminfo")
    While Not Eof(0)
      t$ = ReadString(0)
      If FindString(t$, "MemTotal")
        Mtotal = Val(Mid(t$, FindString(t$, ":")+1))
      ElseIf FindString(t$, "MemFree")
        Mfree = Val(Mid(t$, FindString(t$, ":")+1))
      ElseIf FindString(t$, "SwapTotal")
        Stotal = Val(Mid(t$, FindString(t$, ":")+1))
      ElseIf FindString(t$, "SwapFree")
        Sfree = Val(Mid(t$, FindString(t$, ":")+1))
                  EndIf      
    Wend
    CloseFile(0)
  EndIf
 
  SetGadgetText(104, StrF(Mtotal/1024, 2) + " Мб")
  SetGadgetText(105, StrF(Mfree/1024, 2) + " Мб")
    mf.f =Mfree/Mtotal*100
    If mf<5
      SetGadgetColor(105, #PB_Gadget_FrontColor,RGB(255,0,0))
    ElseIf mf<10
      SetGadgetColor(105, #PB_Gadget_FrontColor,RGB(255,150,0))
    Else
      SetGadgetColor(105, #PB_Gadget_FrontColor,RGB(0,0,0))
    EndIf
    DrawBox(201, mf)
  SetGadgetText(106, StrF(Stotal/1024, 2) + " Мб")
  SetGadgetText(107, StrF(Sfree/1024, 2) + " Мб")
    mf = Stotal-Sfree
    If mf>0
      SetGadgetColor(107, #PB_Gadget_FrontColor,RGB(255,0,0))
    Else
      SetGadgetColor(107, #PB_Gadget_FrontColor,RGB(0,0,0))
    EndIf
    mf = Sfree/Stotal*100
    DrawBox(202, mf)
 
  If ReadFile(0, "/proc/net/dev")
    j=0
    While Not Eof(0)
      t$ = ReadString(0)
      If j>1
        If FindString(t$, "lo:")
          Break
        EndIf
        For i=0 To 9
          n = FindString(t$, " ")
          If i=0
            tt$ = Left(t$, n)
          ElseIf i=1
            r = Val(Left(t$, n))
            If r=0
              Break  
            EndIf
          ElseIf i=9
            t = Val(Left(t$, n))
            i$ = tt$
          EndIf
          t$ = LTrim(Mid(t$, n+1))
        Next i
      EndIf  
      j+1
    Wend
    CloseFile(0)
  EndIf
  rx.f = r-pr: tx.f = t-pt
  pr = r:    pt = t:    tt$ = ""
  If rx>1048576
    rx/1048576
    r$ = "M"
  ElseIf rx>1024
    rx/1024
    r$ = "K"
  EndIf
  If tx>1048576
    tx/1048576
    tt$ = "M"
  ElseIf tx>1024
    tx/1024
    tt$ = "K"
  EndIf
 
  SetGadgetText(1005, "Сеть " + i$)
    If r$ = ""
      SetGadgetText(108, Str(rx) + " B")
    Else
      SetGadgetText(108, StrF(rx,2) + " " + r$ + "B")
    EndIf
    If tt$ = ""
      SetGadgetText(109, Str(tx) + " B")
    Else
      SetGadgetText(109, StrF(tx,2) + " " + tt$ + "B")
    EndIf
    i$ = Left(t$, FindString(t$,":")-1)
   
  DriveInfo(home$, Drive)
  SetGadgetText(1006,  home$)
    SetGadgetText(110, StrF(Drive\Size/1073741824,2) + " Гб")
    SetGadgetText(111, StrF(Drive\Free/1073741824,2) + " Гб")
    mf = Drive\Free / Drive\Size * 100
    DrawBox(203, mf)
   
  ProgrammId = RunProgram("ps", "axo pid,pcpu,pmem,comm", "", #PB_Program_Open | #PB_Program_Read)
  If ProgrammId
    While ProgramRunning(ProgrammId)
                If AvailableProgramOutput(ProgrammId)
                  t$ = LTrim(ReadProgramString(ProgrammId))
                  t$ + " "
                  AddElement(ProcInfo())
                    n = FindString(t$, " ")
                    ProcInfo()\PID = Val(Left(t$, n-1))
                    t$=LTrim(Mid(t$, n))
                    n = FindString(t$, " ")
                    ProcInfo()\CPU = ValF(Left(t$, n-1))
                    t$=LTrim(Mid(t$, n))
                    n = FindString(t$, " ")
                    ProcInfo()\MEM = ValF(Left(t$, n-1))
                    t$=LTrim(Mid(t$, n))
                    n = FindString(t$, " ")
                    ProcInfo()\COMMAND = Left(t$, n-1)
                EndIf
        Wend
        CloseProgram(ProgrammId)
        FirstElement(ProcInfo())
        DeleteElement(ProcInfo(),1)
        SortStructuredList(ProcInfo(), #PB_Sort_Descending, OffsetOf(Process\CPU), TypeOf(Process\CPU))
        p$="": i=0
        ForEach ProcInfo()
          i+1
      If i>rows
        Break
      EndIf
          SetGadgetText(113+i, Str(ProcInfo()\PID)+#TAB$+StrF(ProcInfo()\CPU,1)+#TAB$+StrF(ProcInfo()\MEM,1)+#TAB$+ProcInfo()\COMMAND)
    Next
        SortStructuredList(ProcInfo(), #PB_Sort_Descending, OffsetOf(Process\MEM), TypeOf(Process\MEM))
        i=0:   p$ + #LF$
        ForEach ProcInfo()
          i+1
      If i>rows
        Break
      EndIf
          SetGadgetText(118+i, Str(ProcInfo()\PID)+#TAB$+StrF(ProcInfo()\CPU,1)+#TAB$+StrF(ProcInfo()\MEM,1)+#TAB$+ProcInfo()\COMMAND)
    Next
  EndIf
EndProcedure
Procedure SysUpdate()
  RunProgram("/usr/bin/update-manager", "", "", #PB_Program_Open)
EndProcedure
Procedure SwapOnOff()
  Static s=1
  If s=1
    p = RunProgram("gksu", "swapoff -a", "", #PB_Program_Open)
  Else
    p = RunProgram("gksu", "swapon -a", "", #PB_Program_Open)
  EndIf
  If p
    If s=1
      s=0
      SetGadgetText(12,  "!")
    Else
      s=1
      SetGadgetText(12,  "X")
    EndIf
    CloseProgram(p)
  EndIf
EndProcedure
Procedure LanOnOff()
  Static s=1
  If s=1
    p = RunProgram("gksu", "ifconfig "+i$+" down", "", #PB_Program_Open | #PB_Program_Read)
  Else
    p = RunProgram("gksu", "ifconfig "+i$+" up", "", #PB_Program_Open | #PB_Program_Read)
  EndIf
  If p
    If s=1
      s=0
      SetGadgetText(13,  "!")
    Else
      s=1
      SetGadgetText(13,  "X")
    EndIf
    CloseProgram(p)
  EndIf
EndProcedure
Procedure KillP()
  t$ = GetGadgetText(GetActiveGadget()+100)
  If MessageRequester("Подтверждение операции", "Завершить процесс " + t$ + "?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
    n.s = Left(t$, FindString(t$, #TAB$)-1)
    RunProgram("kill", n.s, "", #PB_Program_Wait)
  EndIf
EndProcedure
 
Procedure OpenForm()
  ExamineDesktops()
  OpenWindow(0, DesktopWidth(0)-width, 0, width, height, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_Tool)
  LoadFont(#fnt0,"Courier New", 10)
  LoadFont(1,"Courier New", 10, #PB_Font_Bold)
  SetGadgetFont(#PB_Default, FontID(#fnt0))
  CreateImage(0, 20, 40)
  FrameGadget(1001, 0, 0, width, 60, "Система")
    SetGadgetFont(1001, FontID(1))
    TextGadget(#PB_Any, 10, 20, 350, 20, GetDataFromFile("/etc/lsb-release", "DESCRIPTION", "=", ""))
    TextGadget(#PB_Any, 10, 40, 330, 20, GetDataFromFile("/proc/cmdline", "BOOT_IMAGE", "/vm", " root"))
    ButtonGadget(11, 340, 35, 20, 20, "U")
  FrameGadget(1002, 0, 60, width, 60, "Процессор")
    SetGadgetFont(1002, FontID(1))
    TextGadget(#PB_Any, 10, 80, 350, 20, GetDataFromFile("/proc/cpuinfo", "name", ":", ""))
    TextGadget(101, 10, 100, 90, 20, "Частота")
    TextGadget(102, 100, 100, 70, 20, "Температура")
    TextGadget(103, 170, 100, 190, 20, "Загрузка")
  FrameGadget(1003, 0, 120, width, 60, "Память")
    SetGadgetFont(1003, FontID(1))
    TextGadget(#PB_Any, 10, 140, 100, 20, "Всего")
    TextGadget(104, 150, 140, 100, 20, "")
    TextGadget(#PB_Any, 10, 160, 100, 20, "Свободно")
    TextGadget(105, 150, 160, 100, 20, "")
    ImageGadget(201, 320, 135, 20, 40, ImageID(0))
  FrameGadget(1004, 0, 180, width, 60, "Подкачка")
    SetGadgetFont(1004, FontID(1))
    TextGadget(#PB_Any, 10, 200, 100, 20, "Всего")
    TextGadget(106, 150, 200, 100, 20, "")
    TextGadget(#PB_Any, 10, 220, 100, 20, "Свободно")
    TextGadget(107, 150, 220, 100, 20, "")
    ButtonGadget(12, 340, 215, 20, 20, "X")
    ImageGadget(202, 320, 195, 20, 40, ImageID(0))
  FrameGadget(1005, 0, 240, width, 60, "Сеть")
    SetGadgetFont(1005, FontID(1))
    TextGadget(#PB_Any, 10, 260, 100, 20, "RX")
    TextGadget(108, 150, 260, 100, 20, "")
    TextGadget(#PB_Any, 10, 280, 100, 20, "TX")
    TextGadget(109, 150, 280, 100, 20, "")
    ButtonGadget(13, 340, 275, 20, 20, "X")
  FrameGadget(1006, 0, 300, width, 60, "Файловая система")
    SetGadgetFont(1006, FontID(1))
    TextGadget(#PB_Any, 10, 320, 100, 20, "Всего")
    TextGadget(110, 150, 320, 100, 20, "")
    TextGadget(#PB_Any, 10, 340, 100, 20, "Свободно")
    TextGadget(111, 150, 340, 100, 20, "")
    ImageGadget(203, 320, 315, 20, 40, ImageID(0))
  FrameGadget(1007, 0, 360, width, 230, " PID    %CPU    %MEM    COMMAND")
    SetGadgetFont(1007, FontID(1))
    TextGadget(114, 10, 380, 330, 20, "")
    SetGadgetColor(114, #PB_Gadget_FrontColor,RGB(255,80,0))
    ButtonGadget(14, 340, 375, 20, 20, "X")
    TextGadget(115, 10, 400, 330, 20, "")
    ButtonGadget(15, 340, 395, 20, 20, "X")
    TextGadget(116, 10, 420, 330, 20, "")
    ButtonGadget(16, 340, 415, 20, 20, "X")
    TextGadget(117, 10, 440, 330, 20, "")
    ButtonGadget(17, 340, 435, 20, 20, "X")
    TextGadget(118, 10, 460, 330, 20, "")
    ButtonGadget(18, 340, 455, 20, 20, "X")
    TextGadget(119, 10, 485, 330, 20, "")
    SetGadgetColor(119, #PB_Gadget_FrontColor,RGB(255,80,0))
    TextGadget(120, 10, 505, 330, 20, "")
    TextGadget(121, 10, 525, 330, 20, "")
    TextGadget(122, 10, 545, 330, 20, "")
    TextGadget(123, 10, 565, 330, 20, "")
   
    AddWindowTimer(0, 0, 1000)
    BindEvent(#PB_Event_Timer, @Timer())
    BindGadgetEvent(11, @SysUpdate(), #PB_EventType_LeftClick)
    BindGadgetEvent(12, @SwapOnOff(), #PB_EventType_LeftClick)
    BindGadgetEvent(13, @LanOnOff(), #PB_EventType_LeftClick)
    BindGadgetEvent(14, @killP(), #PB_EventType_LeftClick)
    BindGadgetEvent(15, @killP(), #PB_EventType_LeftClick)
    BindGadgetEvent(16, @killP(), #PB_EventType_LeftClick)
    BindGadgetEvent(17, @killP(), #PB_EventType_LeftClick)
    BindGadgetEvent(18, @killP(), #PB_EventType_LeftClick)
EndProcedure
 
OpenForm()
Repeat
  Event = WaitWindowEvent()
  Delay(10)
Until Event = #PB_Event_CloseWindow
 
End



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Вт янв 02, 2018 10:49 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Нашёл пример, к сожалению, не желает у меня запускаться пишет следующее:
purebasic.asm[79]
extrn g_signal_connect_data
error: symbol already defined.
что не так и как поправить?

Код:
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
EnableExplicit
 
ImportC ""
        g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *pdata, destroy= 0, flags= 0) As "g_signal_connect_data"
        gdk_cairo_create(*drawable.GdkDrawable)
        gdk_display_get_pointer(*display.GdkDisplay, *screen.GdkScreen, *x, *y, *mask);    gtk2.2+
        gdk_screen_get_rgba_colormap(*screen.GdkScreen)
        gtk_widget_get_window(*widget.GtkWidget)
       
        cairo_destroy(*cairocontext)
        cairo_fill_preserve(*cairocontext)
        cairo_paint(*cairocontext)
        cairo_rectangle(*cairocontext, x.d, y.d, width.d, height.d)
        cairo_set_line_width(*cairocontext, width.d)
        cairo_set_operator(*cairoregion, op)
        cairo_set_source_rgba(*cairoregion, red.d, green.d, blue.d, alpha.d)
        cairo_stroke(*cairocontext)
EndImport
 
#CAIRO_OPERATOR_SOURCE = 1
 
#Win_Main = 0
 
#But      = 0
 
 
ProcedureC Callback_ButtonMotion(*widget.GtkWindow, *event.GdkEventButton, window); based on a mestnyi-example
        Static.i    isPressed
        Static.i    wX, wY;                                                          pointer window relative
        Static.i    wBorderL, wBorderT;                                              left, upper window delta
        Protected.i rX, rY, rMask;                                                   pointer root relative
       
        If PeekS(gtk_widget_get_name_(*widget), -1, #PB_UTF8) = "GtkButton"
                *widget= gtk_widget_get_parent_window_(*widget)
                gdk_window_get_user_data_(*widget, @*widget)
        EndIf
       
        If *event\type = #GDK_BUTTON_PRESS And *event\button= 1
                wX = WindowMouseX(window); see Window_GetInnerMousePos.pb
                wY = WindowMouseY(window)
                isPressed= #True
                gdk_window_get_position_(gtk_widget_get_window(*widget), @wBorderL, @wBorderT)
                gdk_window_get_root_origin_(gtk_widget_get_window(*widget), @rX, @rY)
                wBorderL- rX : wBorderT- rY
        ElseIf *event\type = #GDK_BUTTON_RELEASE
                isPressed= #False
        EndIf
       
        If isPressed
                gdk_display_get_pointer(gdk_display_get_default_(), #Null, @rX, @rY, @rMask)
                gtk_window_move_(*widget, rX- wX- wBorderL, rY- wY- wBorderT)
                If Not (rMask & #GDK_BUTTON1_MASK) : isPressed= #False : EndIf;            against trailing, quick stop
        EndIf
       
        ProcedureReturn #False
EndProcedure
 
ProcedureC Callback_DrawGadgetBackground(*Widget.GtkWidget, *Event.GdkEventExpose, user_data)
        Protected *cr= gdk_cairo_create(gtk_widget_get_window(*widget))
       
        ; ----- Draw transparent background
        cairo_set_source_rgba(*cr, 1, 1, 1, 0)
        cairo_set_operator(*cr, #CAIRO_OPERATOR_SOURCE)
        cairo_paint(*cr)
       
        ; ----- A frame + slight-opacity-background to show window and it's borders.
        cairo_rectangle(*cr, 0, 0, WindowWidth(user_data), WindowHeight(user_data))
        cairo_set_source_rgba(*cr, 1.0, 1.0, 0.0, 0.15)
        cairo_fill_preserve(*cr)
;       cairo_set_source_rgba(*cr, 0.0, 0.0, 1.0, 1.0)
;       cairo_set_line_width(*cr, 5)
;       cairo_stroke(*cr)
       
        cairo_destroy(*cr)
EndProcedure
 
Procedure CreateWindow_Main()
        Protected *Window.GtkWindow
        Protected *MainContainer.GtkContainer
        Protected Screen, Colormap
       
        OpenWindow(#Win_Main, 140, 100, 200, 200, "Gadget without background (gtk3)", #PB_Window_Invisible)
        *Window= WindowID(#Win_Main)
        *MainContainer= g_list_nth_data_(gtk_container_get_children_(gtk_bin_get_child_(WindowID(#Win_Main))), 0)
       
        g_signal_connect_(*MainContainer, "expose-event", @Callback_DrawGadgetBackground(), #Win_Main)
        gtk_window_set_decorated_(*Window, #False)
        gtk_widget_set_app_paintable_(*MainContainer, #True)
       
; ----- Delete GdkWindow resources to be able to change colormap
        gtk_widget_unrealize_(*Window)
       
; ----- Change colormap to support alpha values and hence allow transparency
        Screen  = gtk_widget_get_screen_(*Window)
        Colormap= gdk_screen_get_rgba_colormap(Screen)
       
        If Colormap
                gtk_widget_set_colormap_(*Window, Colormap)
        Else
                MessageRequester("Error", "Your current system configuration doesn't support transparency!")
                End
        EndIf
       
        g_signal_connect(*Window, "event",  @Callback_ButtonMotion(), #Win_Main);    event to use for moving window
       
        gtk_widget_show_all_(*Window)
       
        ButtonGadget(#But, 10, 10, 180, 180, "A gtk2-ButtonGadget" + #LF$ + "in an invisible window.")
        GadgetToolTip(#But, "Button is clickable, grab on semi-transparent yellow frame to move the window. [Esc] to close.")
       
        AddKeyboardShortcut(#Win_Main, #PB_Shortcut_Escape, 0)
EndProcedure
 
CreateWindow_Main()
 
Repeat
        Select WaitWindowEvent()
                Case #PB_Event_Menu
                        If EventMenu() = 0
                                RemoveWindowTimer(#Win_Main, 0)
                                Break
                        EndIf
                Case #PB_Event_Gadget
                        If EventGadget() = #But
                                Debug "Button clicked"
                        EndIf
                       
        EndSelect
ForEver



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Ср янв 03, 2018 12:44 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Никто не хочет со мной разговаривать...
злые Вы, уйду я от Вас...
)))


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Ср янв 03, 2018 1:55 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6382
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
amer писал(а):
Никто не хочет со мной разговаривать...

Дело не в тебе, а в Linux.
В основном если и пишут тут приложения для него, то кодо-совместимые с Виндой.
А какие то особенности редко всплывают, нет особо желающих Linux испоьзовать в виде основной ОС, таких единицы.
Попробуй на английском форуме, хотя там тоже ветка Линя не часто обновляется, но побогаче будет.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Прога типа conky
СообщениеДобавлено: Ср янв 03, 2018 2:32 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
нашёл, почему пример не работает
заменил g_signal_connect на g_signal_connect_data_ и всё ОК!
попробую сделать прозрачность, как и планировал )))


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

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


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

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


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

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