purebasic.info

PureBasic forum
Текущее время: Пн дек 11, 2017 4:36 pm

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: StringGadgetAddCompletion
СообщениеДобавлено: Вт ноя 08, 2016 9:26 pm 
Не в сети
доцент

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 72
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добрый день!
имеется, мной измененный, пример:
Код:
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
EnableExplicit
 
ImportC ""
        gtk_list_store_set(*list_store.GtkListStore, *iter.GtkTreeIter, column, value.p-utf8, term= -1)
  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
#Txt1   = 3
#Strg1  = 4
 
#WinX= 300
#WinY= 200
#WinW= 300
#WinH= 120
 
#key_Tab=65289
#key_Return=65293: #key_Return_Num=65421
#key_ESC=65307
#key_Back=65288
 
 
Global.i gEvent, gQuit
 
Procedure StringGadgetRemoveCompletion(*entry.GtkWidget)
        Protected *completion.GtkEntryCompletion= gtk_entry_get_completion_(*entry)
        ;Protected *completion_model.GtkListStore= gtk_entry_completion_get_model_(*completion); #G_TYPE_STRING);
        gtk_entry_completion_set_model_(*completion, #Null)
EndProcedure
 
Procedure StringGadgetAddCompletion(*entry.GtkWidget, cList.s)
        Protected.i I
        Protected.s sEntry
        Protected   iter.GtkTreeIter
        If gtk_entry_get_completion_(*entry)
                StringGadgetRemoveCompletion(*entry)
        EndIf
        Protected   *completion.GtkEntryCompletion= gtk_entry_completion_new_();    Create the completion object
        Protected   *completion_model.GtkListStore= gtk_list_store_new_(1, 16 << 2); #G_TYPE_STRING);
       
        gtk_entry_set_completion_(*entry, *completion);                              Assign the completion To the entry
        g_object_unref_(*completion)
       
        For I= 1 To CountString(cList, "|")+ 1;                                      Create a tree model and use it as the completion model
                gtk_list_store_append_(*completion_model, @iter);
                gtk_list_store_set(*completion_model, @iter, 0, StringField(cList, I, "|")); Append one word
        Next I
       
        gtk_entry_completion_set_model_(*completion, *completion_model)
        g_object_unref_(*completion_model)
       
        gtk_entry_completion_set_text_column_(*completion, 0);                       Use model column 0 As the text column
EndProcedure
 
ProcedureC KeyPressCallback(*widget, *event.GdkEventKey, *udata)
  Protected.l KeyWord
  KeyWord = *event\keyval & $FFFF
  Select KeyWord
    Case #key_Return, #key_Return_Num, #key_Tab
      Select *widget
        Case GadgetID(#Strg1)
          ProcedureReturn
      EndSelect
      SetActiveGadget(GetActiveGadget()+1)
      *event\keyval=0
  EndSelect
EndProcedure
 
 
If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "Entry Completion", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
        TextGadget(#Txt1, 5, 89, 110, 25, "Write 'PureBasic'")
        StringGadget(#Strg1, 120, 85, 150, 25, "")
       
        g_signal_connect(GadgetID(#Strg1), "key_press_event", @KeyPressCallback(), #Null)
       
        StringGadgetAddCompletion(GadgetID(#Strg1), "PureBasic|PurePascal|PureC|PureAssembler|"); Add String-Completion
       
        Repeat
                gEvent= WaitWindowEvent()
               
                Select gEvent
                        Case #PB_Event_CloseWindow
                                gQuit= #True
                EndSelect
               
        Until gQuit
EndIf


не работает выбор элемента из списка с клавиатуры, но если убрать KeyPressCallback, то всё работает нормально
вопрос заключается в следующем:
что нужно поправить и почему так происходит?

разобрался, что подправить: заремил procedurereturn и *event\keyval=0
почему так происходит.. есть предположение, что перестает вызываться штатный обработчик


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

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


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

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


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

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