purebasic.info

PureBasic forum
Текущее время: Пт июл 20, 2018 1:44 am

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




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: linux API (Gtk+)
СообщениеДобавлено: Ср авг 18, 2010 5:25 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Если кому интересен linux и его системные вызовы, предлагаю в данной ветке делиться примерами использования API в пурике.
Вот для начала окно которое не отображается в панели задач
Код:
1
2
3
4
5
6
OpenWindow(0, 0, 0, 300, 200, "Test", #PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
gtk_window_set_skip_taskbar_hint_ (WindowID (0), #True)
Repeat
  Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
End


окно без рамки
Код:
1
2
3
4
5
6
7
8
9
10
11
OpenWindow(0, 0, 0, 300, 200, "Test", #PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
Wnd = WindowID(0)
If Wnd <> 0
ButtonGadget(0, 10, 10, 280, 20, "Status")
    *Window1.GTKWindow = Wnd
    gtk_window_set_decorated_(*Window1, #False)
      Repeat
        Event = WindowEvent()
      Until Event = #PB_Event_CloseWindow
EndIf
End


изменение вида курсора
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
; maus = gdk_cursor_new_(#GDK_TOP_LEFT_ARROW)
; maus = gdk_cursor_new_(#GDK_TCROSS)
; maus = gdk_cursor_new_(#GDK_SB_V_DOUBLE_ARROW)
; maus = gdk_cursor_new_(#GDK_SB_H_DOUBLE_ARROW)
maus = gdk_cursor_new_(#GDK_CROSSHAIR)
OpenWindow(0,100,100,400,300,"")
ButtonGadget(0,50,100,200,30,"Mauszeiger ver&#228;ndern")
ButtonGadget(1,50,200,200,30,"Beenden")
*Widget.GtkWidget = WindowID(0)
Repeat
  ev = WaitWindowEvent()
  If ev = #PB_Event_Gadget
     Select EventGadget()
       Case 0
         gdk_window_set_cursor_(*Widget\window,maus)
       Case 1
         End
     EndSelect  
  EndIf
Until ev = #PB_Event_CloseWindow


нажатие мышкой и одновременное нажатие Ctrl
Код:
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
OpenWindow(0, 0, 0, 300, 200, "Test", #PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
Wnd = WindowID(0)
If Wnd <> 0
ButtonGadget(0, 10, 10, 280, 20, "Status")
Gad=GadgetID(0)
    *Window1.GTKWindow = Wnd
    gdkWnd = *Window1\bin\child\window
Repeat
  Event = WindowEvent()
   gdk_window_get_pointer_(gdkWnd, @x, @y, @mask)
  If (mask & #GDK_BUTTON1_MASK) And (mask & #GDK_CONTROL_MASK)
      Debug x
      Debug y
      Debug "L"
  ElseIf (mask & #GDK_BUTTON2_MASK)
      Debug x
      Debug y
      Debug "S"
  ElseIf (mask & #GDK_BUTTON3_MASK)
      Debug x
      Debug y
      Debug "P"
  EndIf  
  Delay(100)
Until Event = #PB_Event_CloseWindow
EndIf
End


Добавляйте если у кого есть, чего интересного :arrow:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 18, 2010 6:19 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Перенос по словам в EditorGadget
Код:
1
2
3
4
5
6
7
8
9
Procedure EditorGadgetActivateWordWrap(EditorID.l, State.l)
  TextBuffer.s = GetGadgetText(EditorID)
  If State = 0
        gtk_text_view_set_wrap_mode_(GadgetID(EditorID), #GTK_WRAP_NONE)
  ElseIf State = 1
        gtk_text_view_set_wrap_mode_(GadgetID(EditorID), #GTK_WRAP_WORD)
  EndIf
  SetGadgetText(EditorID, TextBuffer)
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


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

Зарегистрирован: Вт янв 27, 2009 3:09 pm
Сообщений: 295
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Каким боком GTK относится к системным вызовам?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 19, 2010 9:09 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Может я неправильно выразился, но думаю те кто хотел, тот понял про что я сказал.
Я понимаю, что в linux вроде как нет API и поэтому как правильно назвать те команды которые заканчиваются знаком "_" я не знаю, скажите и я поправлю.

_________________
.


Последний раз редактировалось lakomet Пт сен 10, 2010 7:02 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 19, 2010 10:18 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
lakomet писал(а):
linux вроде как нет API
Есть API.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 29, 2010 9:53 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 300
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2
http://www.ibm.com/developerworks/linux/library/l-system-calls/
Где можно прочитать перечень Ф_() pb linux?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 30, 2010 9:09 am 
Не в сети
профессор

Зарегистрирован: Вт янв 27, 2009 3:09 pm
Сообщений: 295
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
http://www.gnugeneration.com/books/linu ... ernel-api/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 08, 2011 6:46 pm 
Не в сети
профессор
Аватар пользователя

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

Добавить функционала панельгаджету можно так:
Код:
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
 If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      PanelGadget     (0, 8, 8, 306, 203)
      gtk_notebook_set_tab_pos_(GadgetID(0),#GTK_POS_BOTTOM);вкладки снизу
      AddGadgetItem (0, -1, "Panel                            ")
      PanelGadget (1, 5, 5, 290, 166)
      gtk_notebook_set_tab_pos_(GadgetID(1),#GTK_POS_RIGHT);вкладки справа
      gtk_notebook_set_scrollable_(GadgetID(1),#True);добавляет стрелки перемещения по вкладкам
      gtk_notebook_popup_enable_(GadgetID(1));при нажатии правой кнопки мыши появляется меню выбора вкладок
          AddGadgetItem(1, -1, "Sub-Panel 1")
          AddGadgetItem(1, -1, "Sub-Panel 2")
          AddGadgetItem(1, -1, "Sub-Panel 3")
          AddGadgetItem(1, -1, "Sub-Panel 4")
          AddGadgetItem(1, -1, "Sub-Panel 5")
          AddGadgetItem(1, -1, "Sub-Panel 6")
          AddGadgetItem(1, -1, "Sub-Panel 7")
          AddGadgetItem(1, -1, "Sub-Panel 8")
          AddGadgetItem(1, -1, "Sub-Panel 9")
          AddGadgetItem(1, -1, "Sub-Panel 10")
        CloseGadgetList()
      AddGadgetItem (0, -1,"Panel 2")
        ButtonGadget(2, 10, 15, 80, 24,"Button 1")
        ButtonGadget(3, 95, 15, 80, 24,"Button 2")
    CloseGadgetList()
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf


_________________
.


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

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Отслеживаем какой кнопкой мыши(правой, левой, средней или даблклик этими кнопками), нажали на ButtonGadget()
Код:
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
ImportC "-gtk"
     g_signal_connect(instance,signal.p-ascii,*fn,*vdata,destroy=0,flags=0) As "g_signal_connect_data"
EndImport
 
ProcedureC button_clicked(*widget, *signal, *user_data)
     
     Protected *eb.GdkEventButton = *signal
     
     Select  *eb\button
          Case 1
               Debug "left mousebutton-----up"
               Debug PeekS(*user_data)
               If *eb\type = #GDK_2BUTTON_PRESS
                    Debug "----  doubleclick -----"
               EndIf
          Case 2
               Debug "middle mousebutton-----up"
          Case 3
               Debug "right mousebutton-----up"
     EndSelect
     
EndProcedure
 
userdata$ = "hello"
 
OpenWindow(1,0,0,200,100,"g_signalConnect")
ButtonGadget(3,5,30,60,20,"OK")
g_signal_connect(GadgetID(3), "button_press_event", @button_clicked(), @userdata$)
 
Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow


_________________
.


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

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
У буржуев стырил, как в линухе наносекунды засекать
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#CLOCK_MONOTONIC = 1
 
ImportC "-lrt"
  clock_gettime(clk_id, *tp)
EndImport
 
Structure timespec
  tv_sec.i;          /* seconds */
  tv_nsec.l;         /* nanoseconds [0 .. 999999999] */
EndStructure
 
 
clock_gettime(#CLOCK_MONOTONIC, @start_time.timespec)
 
Delay(75)
 
clock_gettime(#CLOCK_MONOTONIC, @end_time.timespec)
 
delta.q = (end_time\tv_sec - start_time\tv_sec) * 1e9 + end_time\tv_nsec - start_time\tv_nsec
 
Debug delta



P.S. Оригинал здесь

_________________
.


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

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Скриншот экрана
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ExamineDesktops()
x = 0
y = 0
w = DesktopWidth(0)
h = DesktopHeight(0)
If OpenWindow(0, x, y, w, h, "2D Drawing Test", #PB_Window_Invisible)
     *src.GdkDrawable = gdk_window_lookup_(gdk_x11_get_default_root_xwindow_())  
     *pixbuf = gdk_pixbuf_get_from_drawable_(#Null, *src, #Null, #Null, #Null, x, y, w, h)
     ImageGadget(0, x, y, w, h, *pixbuf)
     HideWindow(0, 0)
     
     Repeat
          EventID = WaitWindowEvent()
     Until EventID = #PB_Event_CloseWindow
     
EndIf


_________________
.


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

Зарегистрирован: Вт ноя 08, 2011 10:17 am
Сообщений: 578
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
lakomet писал(а):
Скриншот экрана


интересно, а определенной области или определенного окна
наверное
lakomet писал(а):
gdk_x11_get_default_root_xwindow_()

надо заменить на другую функцию


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 21, 2013 6:05 pm 
Не в сети
ассистент

Зарегистрирован: Пт фев 22, 2013 3:29 pm
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Подскажите, пожалуйста, как получить язык на машине (русский, английский итд).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 21, 2013 6:20 pm 
Не в сети
профессор
Аватар пользователя

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

Код:
1
Debug GetEnvironmentVariable("LANG")


_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 21, 2013 6:27 pm 
Не в сети
ассистент

Зарегистрирован: Пт фев 22, 2013 3:29 pm
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Спасибо!


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

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


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

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


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

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