Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 32

Как расположить несколько элементов в одном окне?

27.10.2013, 00:27. Показов 2233. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть окно, открывающееся на весь экран. На нем должны быть расположены четыре таблицы, как показано на рисунке. Но сейчас там только одна таблица, и она занимает весь экран. Как сделать так, чтобы она уменьшилась, стала по размеру (по размеру черной рамки на рисунке, а не на весь экран), и подвинулась вбок? И как добавить потом в это окно еще три таблицы?
Миниатюры
Как расположить несколько элементов в одном окне?  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2013, 00:27
Ответы с готовыми решениями:

Несколько графиков в одном окне. Как?
Исходные данные: таблица - аналог массива 96*i, i= 1 - ~. В моем случае массив . 83-й элемент - годы расчета. Задача: построение графиков...

Как реализовать несколько форм в одном окне
Здравствуйте! Я создаю приложение на C# и в силу того, что новичок не могу реализовать призложение, в котором вместо открытия...

Как открыть несколько файлов в одном процессе (окне)
Пишу приложение, которое открывает бинарный файл, читает его и строит диаграммы на основе прочитанной информации. Необходимо запускать...

7
Эксперт по электронике
6575 / 3202 / 335
Регистрация: 28.10.2011
Сообщений: 12,486
Записей в блоге: 7
27.10.2013, 00:48
PureBasic
1
Result = ListIconGadget(#Gadget, x, y, Width, Height, Title$, TitleWidth [, Flags])
x и y - координаты в окне.
Width и Height - ширина и высота.

Пример из справки.
PureBasic
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
  ; Shows possible flags of ListIconGadget in action...
  If OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ; left column
    TextGadget(6,  10,  10, 300, 20, "ListIcon Standard", #PB_Text_Center)
    ListIconGadget(0,  10,  25, 300, 70, "Column 1", 100)
    TextGadget(7,  10, 105, 300, 20, "ListIcon with Checkbox", #PB_Text_Center)
    ListIconGadget(1,  10, 120, 300, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes)  ; ListIcon with checkbox
    TextGadget(8,  10, 200, 300, 20, "ListIcon with Multi-Selection", #PB_Text_Center)
    ListIconGadget(2,  10, 215, 300, 70, "Column 1", 100, #PB_ListIcon_MultiSelect) ; ListIcon with multi-selection
    ; right column
    TextGadget(9, 330,  10, 300, 20, "ListIcon with separator lines",#PB_Text_Center)
    ListIconGadget(3, 330,  25, 300, 70, "Column 1", 100, #PB_ListIcon_GridLines)
    TextGadget(10, 330, 105, 300, 20, "ListIcon with FullRowSelect and AlwaysShowSelection",#PB_Text_Center)
    ListIconGadget(4, 330, 120, 300, 70, "Column 1", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    TextGadget(11, 330, 200, 300, 20, "ListIcon Standard with large icons",#PB_Text_Center)
    ListIconGadget(5, 330, 220, 300, 65, "", 200,#PB_ListIcon_GridLines)
    For a = 0 To 4            ; add columns to each of the first 5 listicons
      For b = 2 To 4          ; add 3 more columns to each listicon
        AddGadgetColumn(a, b, "Column " + Str(b), 65)
      Next
      For b = 0 To 2          ; add 4 items to each line of the listicons
        AddGadgetItem(a, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
      Next
    Next
    ; Here we change the ListIcon display to large icons and show an image
    If LoadImage(0, "map2.bmp")     ; change path/filename to your own 32x32 pixel image
      SetGadgetAttribute(5, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
      AddGadgetItem(5, 1, "Picture 1", ImageID(0))
      AddGadgetItem(5, 2, "Picture 2", ImageID(0))
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
1
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 32
27.10.2013, 02:22  [ТС]
У меня не получается.
Подскажите, что можно дописать к этому коду
PureBasic
1
2
3
4
5
6
7
ExamineDesktops()
If OpenWindow(0,0,0,DesktopWidth(0), DesktopHeight(0),"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered);
 
ListIcon = ListIconGadget(0,10,10,420,100,"Клетка",70,#PB_ListIcon_GridLines |#PB_ListIcon_CheckBoxes)
AddGadgetColumn(0,2,"Вопрос",200)
AddGadgetColumn(0,3,"Ответ",200)
EndIf
Чтобы таблица не была на все окно.
Я не могу использовать больше лист-айкон-гаджетов, чем один, т.к. ListIcon всего один, а если прописать текст-гаджеты, то исчезнет возможность редактировать ячейки таблицы.
В общем, я уже не знаю, что делать. Помогите пожалуйста
0
Эксперт по электронике
6575 / 3202 / 335
Регистрация: 28.10.2011
Сообщений: 12,486
Записей в блоге: 7
27.10.2013, 11:57
Цитата Сообщение от NuclearRed Посмотреть сообщение
Чтобы таблица не была на все окно.
Она и так не на все окно. Ее размеры 420 на 100, а размер окна равен разрешению экрана.

Цитата Сообщение от NuclearRed Посмотреть сообщение
Я не могу использовать больше лист-айкон-гаджетов, чем один, т.к. ListIcon всего один
Что мешает добавить еще один?
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
ExamineDesktops()
OpenWindow(0,0,0,DesktopWidth(0), DesktopHeight(0),"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered);
 
ListIcon = ListIconGadget(0,10,10,420,100,"Клетка",70,#PB_ListIcon_GridLines |#PB_ListIcon_CheckBoxes)
AddGadgetColumn(0,2,"Вопрос",200)
AddGadgetColumn(0,3,"Ответ",200)
 
ListIcon = ListIconGadget(1,10,130,420,100,"Клетка 2",70,#PB_ListIcon_GridLines |#PB_ListIcon_CheckBoxes)
AddGadgetColumn(1,2,"Вопрос",200)
AddGadgetColumn(1,3,"Ответ",200)
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Цитата Сообщение от NuclearRed Посмотреть сообщение
если прописать текст-гаджеты, то исчезнет возможность редактировать ячейки таблицы
Скорее всего что-то не так сделано в коде. Возможно дело в идентификаторах гаджетов.

Окно с четырьмя таблицами.
PureBasic
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
Enumeration
  #Window_0
EndEnumeration
 
Enumeration
  #ListIcon_0
  #ListIcon_1
  #ListIcon_2
  #ListIcon_3
EndEnumeration
 
 
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 376)
  OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(#ListIcon_0, 8, 16, 208, 144, "Column 1", 100)
  ListIconGadget(#ListIcon_1, 344, 16, 248, 144, "Column 1", 100)
  ListIconGadget(#ListIcon_2, 8, 192, 208, 176, "Column 1", 100)
  ListIconGadget(#ListIcon_3, 344, 192, 248, 176, "Column 1", 100)
EndProcedure
 
Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
 
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
 
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
 
OpenWindow_0()
 
Repeat 
Until Window_0_Events(WaitWindowEvent()) = #False
1
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 32
27.10.2013, 16:10  [ТС]
PureBasic
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
Global oldCallback,ListIcon, LIColor,Oldr,Oldc,editflag
 
Procedure LIcallback(hwnd, msg, wparam, lparam)
  result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
  Select msg
    Case #WM_NOTIFY
       *NMHDR.NMHDR = lParam
       If *nmhdr\code = #HDN_ITEMCHANGING And *NMHDR\code = #HDN_FIRST
          *phdn.NMHEADER = lParam
          If  *phdn\iItem = 0
                ProcedureReturn 1
          EndIf                 
          r.RECT\top = Oldc
          r.RECT\left = #LVIR_BOUNDS
          SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
          If editflag = 1
              MoveWindow_(GadgetID(2),r\left,r\top,r\right-r\left,r\bottom-r\top,1) 
              SetFocus_(GadgetID(2))
          ElseIf Oldc = 4 And Run =0
              Run = 1
              MoveWindow_(GadgetID(5),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
          EndIf   
       EndIf
                   
    Case #WM_LBUTTONDOWN
          SetGadgetState(0,-1)
          MoveWindow_(GadgetID(2),0,0,0,0,1)
          If editflag = 1 And GetGadgetText(2) <> ""
              SetGadgetItemText(0, Oldr,GetGadgetText(2),Oldc)
          EndIf
          pInfo.LVHITTESTINFO
          pInfo\pt\x = (lParam & $FFFF)
          pInfo\pt\y = (lParam>> 16 & $FFFF)                   
          SendMessage_(ListIcon,#LVM_SUBITEMHITTEST,0,@pInfo)
          If  pInfo\iSubItem = 4 And Run =0
              Run = 1
              r.RECT
              r\top  = pInfo\iSubItem
              r\left = #LVIR_BOUNDS
              SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, pInfo\iItem, r)
              MoveWindow_(GadgetID(5),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
          Else
              Run =0 
              MoveWindow_(GadgetID(5),0,0,0,0,1)
              SetGadgetItemColor(0,OLdr,#PB_Gadget_FrontColor,#Black ,Oldc)
              SetGadgetItemColor(0,Oldr, #PB_Gadget_BackColor, LIColor,Oldc)
              SetGadgetItemColor(0,pInfo\iItem,#PB_Gadget_FrontColor,#White ,pInfo\iSubItem)
              SetGadgetItemColor(0,pInfo\iItem, #PB_Gadget_BackColor,GetSysColor_(#COLOR_HIGHLIGHT),pInfo\iSubItem)
          EndIf         
          editflag = 0
          Oldr = pInfo\iItem
          Oldc = pInfo\iSubItem
       
   
    Case #WM_LBUTTONDBLCLK
          editflag = 1
          r.RECT\top = Oldc
          r.RECT\left = #LVIR_BOUNDS
          SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
          SetGadgetText(2,"")
          MoveWindow_(GadgetID(2),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
          SetFocus_(GadgetID(2))
         
    Case #WM_VSCROLL,#WM_HSCROLL
          r.RECT\top = Oldc
          r.RECT\left = #LVIR_BOUNDS
          SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
          If editflag = 1
              MoveWindow_(GadgetID(2),r\left,r\top,r\right-r\left,r\bottom-r\top,1) 
              SetFocus_(GadgetID(2))
          ElseIf Oldc = 4 And Run =0
              Run = 1
              MoveWindow_(GadgetID(5),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
          EndIf
          InvalidateRect_(GadgetID(2),0,1)   
 
  EndSelect
  ProcedureReturn result
EndProcedure
 
LoadFont(0,"Tahoma",10)
 ExamineDesktops()
If OpenWindow(0,0,0,DesktopWidth(0), DesktopHeight(0),"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered);
 
ListIcon = ListIconGadget(0,10,10,220,100,"Column 0",0,#PB_ListIcon_GridLines)
ListIcon = ListIconGadget(0,10,10,220,100,"Column 1",70,#PB_ListIcon_GridLines |#PB_ListIcon_CheckBoxes)
 
 
 
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
 
AddGadgetColumn(0,2,"Вопрос",200)
AddGadgetColumn(0,3,"Ответ",200)
EndIf
 
 
For i = 0 To 16
  linestr.s = LSet(Str(i),3," ")
  AddGadgetItem(0, -1, Chr(10)+"Text on Line in Column 1"+Chr(10)+"Введите  вопрос" + Chr(10)+"Введите  ответ" )
Next
SetGadgetColor(0, #PB_Gadget_BackColor,$DFFEFD)
StringGadget(2,0,0,0,0,"",#ES_MULTILINE)
SendMessage_(GadgetID(2), #EM_SETMARGINS, #EC_LEFTMARGIN, 3)
SetParent_(GadgetID(2),GadgetID(0))
oldCallback = SetWindowLongPtr_(ListIcon, #GWL_WNDPROC, @LIcallback())
 
SetGadgetFont(0,FontID(0))
SetGadgetFont(2,FontID(0))
If GetGadgetColor(0, #PB_Gadget_BackColor) < 0
   LIColor = #White
Else
   LIColor =  GetGadgetColor(0, #PB_Gadget_BackColor)
EndIf
 
ComboBoxGadget(5,0,0,0,0)
For a = 1 To 5
  AddGadgetItem(5, -1,"ComboBox item " + Str(a))
Next
SetParent_(GadgetID(5),GadgetID(0))
 
Repeat
  Select WaitWindowEvent()
     
      Case #PB_Event_CloseWindow
            Quit = 1
           
      Case #WM_KEYDOWN
           If GetActiveGadget() = 2 And  EventwParam() = 27
               MoveWindow_(GadgetID(2),0,0,0,0,1)
               editflag = 0
           ElseIf GetActiveGadget() = 2 And  EventwParam() = 13
               SetGadgetItemText(0, Oldr,GetGadgetText(2),Oldc)
               MoveWindow_(GadgetID(2),0,0,0,0,1)
               editflag = 0
           EndIf
     
      Case #PB_Event_Menu
          Select EventMenu()
           Case 1           
          EndSelect
     
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 5
               MoveWindow_(GadgetID(5),0,0,0,0,1)
               SetGadgetItemText(0, Oldr,GetGadgetText(5),Oldc)             
          EndSelect
         
           
      Case #WM_SIZE
            ResizeGadget(0,10,10,WindowWidth(0)-20,WindowHeight(0)-60)
           
  EndSelect
 
Until Quit = 1
 
 
End
ну вот у меня код... вообще какой-то бред получается. чуть только что-то меняешь, и оно перестает работать.
0
Эксперт по электронике
6575 / 3202 / 335
Регистрация: 28.10.2011
Сообщений: 12,486
Записей в блоге: 7
27.10.2013, 17:29
Извините конечно, но этот код - помесь "чего-то с чем-то". Так оно правильно работать не будет.
Какова цель программы? Нужно 4 таблицы, с редактируемым содержимым или что?
0
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 32
27.10.2013, 19:06  [ТС]
да, нужно четыре редактируемых таблицы, две больших в три колонки,и две маленьких, по типу таблиц для морского боя
0
Эксперт по электронике
6575 / 3202 / 335
Регистрация: 28.10.2011
Сообщений: 12,486
Записей в блоге: 7
27.10.2013, 23:59
Четыре редактируемые таблицы в окне.
PureBasic
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
#HDI_ORDER = $80
 
CompilerIf Defined(HDITEM, #PB_Structure) = 0 
  Structure HDITEM 
    mask.l 
    cxy.l 
    pszText.l 
    hbm.l 
    cchTextMax.l 
    fmt.l 
    lParam.l 
    iImage.l 
    iOrder.l 
  EndStructure 
CompilerEndIf 
 
Structure _LIEdit 
  listOldProc.l 
  editHwnd.l 
  item.l 
  subitem.l 
  x.l 
  y.l 
  cx.l 
  cy.l 
  osVersion.b 
  blnIsXPThemes.b 
EndStructure 
 
Structure _LIEditGlobals 
  osVersion.b 
  blnIsXPThemes.b 
EndStructure 
 
Declare.l SetListIconEditable(listID) 
Declare _LIEEditCell(*liedit._LIEdit, hWnd) 
Declare.l _LIEwinProc(hWnd, uMsg, wParam, lParam) 
Declare.l _LIEListProc(hWnd, uMsg, wParam, lParam) 
Declare.l _LIEeditProc(hWnd, uMsg, wParam, lParam) 
 
Global _LIEditGlobals._LIEditGlobals 
 
;Returns zero if an error. 
Procedure.l SetListIconEditable(listID) 
  Protected result, parenthWnd, *mem._LIEdit, hWnd, dlv.DLLVERSIONINFO, func, lib 
  ;Set globals if appropriate. 
    If _LIEditGlobals\osVersion = 0 
      _LIEditGlobals\osVersion = OSVersion() 
      dlv\cbSize=SizeOf(DLLVERSIONINFO) 
      lib=OpenLibrary(#PB_Any,"comctl32.dll") 
      If lib 
        func=GetFunction(lib,"DllGetVersion") 
        If func 
          CallFunctionFast(func, dlv) 
          If dlv\dwMajorVersion >=6 
            _LIEditGlobals\blnIsXPThemes = #True 
          EndIf            
        EndIf 
        CloseLibrary(lib) 
      EndIf 
    EndIf 
  ;Check that listID references a valid listicon. 
    If IsGadget(listID) And GadgetType(listID)=#PB_GadgetType_ListIcon 
      hWnd = GadgetID(listID) 
      ;Is the listicon already registered? 
      If GetProp_(hWnd, "_LIEdit")=0 ;No! 
        ;Allocate enough memory for a _LIEdit structure. 
          *mem=AllocateMemory(SizeOf(_LIEdit)) 
        If *mem 
          SetWindowLong_(hWnd, #GWL_STYLE, GetWindowLong_(hWnd, #GWL_STYLE)&~#LVS_EDITLABELS) 
          ;Set the fields of the _LIEedit structure. 
            *mem\listOldProc = SetWindowLong_(hWnd, #GWL_WNDPROC, @_LIEListProc()) 
          ;Store a pointer to this structure in a window property ofthe listicon.          
            SetProp_(hWnd, "_LIEdit", *mem) 
          ;Subclass the parent window if not already through another listicon. 
            parenthWnd=GetParent_(hWnd) 
            If GetProp_(parenthWnd, "_LIEditOldProc")=0 ;No! 
              SetProp_(parenthWnd, "_LIEditOldProc", SetWindowLong_(parenthWnd, #GWL_WNDPROC, @_LIEwinProc())) 
            EndIf 
          result=1 
        EndIf 
      EndIf 
    EndIf 
  ProcedureReturn result 
EndProcedure 
 
 
;Sets the specified cell to be edited. 
Procedure EditCell(listID, item, subitem) 
  Protected hWnd, *liedit._LIEdit, numrows, numcols 
  ;Check that listID references a valid listicon. 
    If IsGadget(listID) And GadgetType(listID)=#PB_GadgetType_ListIcon 
      ;Check that the listicon is registered as editable. 
        hWnd = GadgetID(listID) 
        *liedit = GetProp_(hWnd, "_LIEdit") 
        If *liedit 
          ;Check parameters are in range. 
            numrows = CountGadgetItems(listID) 
            numcols = SendMessage_(SendMessage_(hWnd,#LVM_GETHEADER,0,0), #HDM_GETITEMCOUNT,0,0) 
            If item>=0 And item < numrows And subitem>0 And subitem < numcols 
              *liedit\item = item 
              *liedit\subitem = subitem 
              SetActiveGadget(listID) 
              _LIEEditCell(*liedit, hWnd) 
            EndIf 
        EndIf 
    EndIf 
EndProcedure 
 
 
Procedure _LIEEditCell(*liedit._LIEdit, hWnd) 
  Protected rc.RECT, clientrc.RECT, numCols, headerWnd 
  Protected Dim cols(0), i, blnFoundZeroColumn 
  Protected hdi.HDITEM 
  ;Vista themes requires a cheat because it automatically scrolls the listicon to bring the item being edited 
  ;into view. 
    If _LIEditGlobals\osVersion >= #PB_OS_Windows_Vista And _LIEditGlobals\blnIsXPThemes 
      headerWnd = SendMessage_(hWnd,#LVM_GETHEADER,0,0) 
      numCols = SendMessage_(headerWnd, #HDM_GETITEMCOUNT,0,0) 
      Dim cols(numCols-1) 
      SendMessage_(hWnd, #LVM_GETCOLUMNORDERARRAY, numCols, @cols()) 
      For i = 0 To numcols-1 
        If cols(i) 
          If cols(i) = *liedit\subItem 
            Break 
          EndIf 
        Else 
          blnFoundZeroColumn = 1      
        EndIf 
      Next 
      i-blnFoundZeroColumn 
      Dim cols(0) 
      With hdi 
        \mask = #HDI_ORDER 
        \iOrder = i 
      EndWith      
      SendMessage_(headerWnd, #HDM_SETITEM, 0, hdi) 
    EndIf 
  ;Scroll the listicon if the clicked cell is not entirely visible 
  ;*****IF YOU WISH TO RESTRICT WHICH CELLS CAN BE EDITED, THEN PERFORM THE NECESSARY CHECKS HERE 
  ;*****ON THE VALUES OF *liedit\item and *liedit\subitem (WHICH INDICATE WHICH CELL IS ABOUT 
  ;*****TO BE EDITED) AND RUN THE FOLLOWING LINES FOR THOSE CELLS WHICH ARE TO BE EDITED. 
  rc\top = *liedit\subitem 
   rc\left = #LVIR_BOUNDS 
   SendMessage_(hWnd, #LVM_GETSUBITEMRECT, *liedit\item, rc) 
   GetClientRect_(hWnd, clientrc) 
  If rc\left < 0 Or (rc\right-rc\left)>=clientrc\right 
    SendMessage_(hWnd, #LVM_SCROLL,rc\left,0) 
  Else 
     If rc\right > clientrc\right 
      SendMessage_(hWnd, #LVM_SCROLL,rc\right-clientrc\right,0) 
     EndIf 
   EndIf 
  SetWindowLong_(hWnd, #GWL_STYLE, GetWindowLong_(hWnd, #GWL_STYLE)|#LVS_EDITLABELS) 
  SendMessage_(hWnd, #LVM_EDITLABEL, *liedit\item, 0) 
EndProcedure 
 
 
;Window proc of the ListIcon parent window. 
Procedure.l _LIEwinProc(hWnd, uMsg, wParam, lParam) 
  Protected result, oldwinproc, *nmh. NMHDR, listhWnd, edithWnd, *liedit._LIEdit, *lvd.LV_DISPINFO, rc.RECT 
  Protected hdi.HDITEM, headerWnd 
  Static celltext$ 
  ;Retrieve the address of the old proc. 
    oldwinproc = GetProp_(hWnd, "_LIEditOldProc") 
  Select uMsg 
    Case #WM_NOTIFY 
      *nmh=lParam 
      Select *nmh\code 
        Case #LVN_BEGINLABELEDIT 
          listhWnd = *nmh\hwndFrom 
          ;Retrieve the address of the LIEdit structure. 
            *liedit = GetProp_(listhWnd, "_LIEdit") 
            If *liedit ;Good to go! 
              *liedit\editHwnd=0 
              ;Get the handle of the edit control used to edit the label. 
                edithWnd = SendMessage_(listhWnd, #LVM_GETEDITCONTROL,0,0) 
               ;Subclass the edit control. 
                SetProp_(edithWnd, "_LIEditOldProc", SetWindowLong_(edithWnd, #GWL_WNDPROC, @_LIEeditProc())) 
              ;Set text. 
                celltext$=GetGadgetItemText(*nmh\idFrom, *liedit\item, *liedit\subitem) 
                SendMessage_(edithWnd, #WM_SETTEXT, 0, celltext$) 
                SetGadgetItemText(*nmh\idFrom, *liedit\item, "",*liedit\subitem) 
               ;Get bounding rectangle. 
                rc\top = *liedit\subitem 
                rc\left = #LVIR_BOUNDS 
                SendMessage_(listhWnd, #LVM_GETSUBITEMRECT, *liedit\item, rc) 
                *liedit\x=rc\left 
                *liedit\y=rc\top 
                *liedit\cx=SendMessage_(listhWnd, #LVM_GETCOLUMNWIDTH, *liedit\subitem,0) 
                *liedit\cy=rc\bottom-rc\top 
            EndIf 
 
        Case #LVN_ENDLABELEDIT 
          listhWnd = *nmh\hwndFrom 
          ;Retrieve the address of the LIEdit structure. 
            *liedit = GetProp_(listhWnd, "_LIEdit") 
            If *liedit ;Good to go! 
              *lvd = lParam 
              If *lvd\item\pszText 
                SetGadgetItemText(*nmh\idFrom, *liedit\item, PeekS(*lvd\item\pszText), *liedit\subitem) 
              Else              
                SetGadgetItemText(*nmh\idFrom, *liedit\item, celltext$, *liedit\subitem) 
              EndIf 
              SetWindowLong_(listhWnd, #GWL_STYLE, GetWindowLong_(listhWnd, #GWL_STYLE)&~#LVS_EDITLABELS) 
              If _LIEditGlobals\osVersion >= #PB_OS_Windows_Vista And _LIEditGlobals\blnIsXPThemes 
                With hdi 
                  \mask = #HDI_ORDER 
                  \iOrder = 0 
                EndWith 
                headerWnd = SendMessage_(listhWnd,#LVM_GETHEADER,0,0) 
                SendMessage_(headerWnd, #HDM_SETITEM, 0, hdi) 
              EndIf 
            EndIf 
        Default 
          result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
      EndSelect 
 
    Case #WM_NCDESTROY 
      result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
      RemoveProp_(hWnd, "_LIEditOldProc") 
    Default 
      result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
  EndSelect 
  ProcedureReturn result 
EndProcedure 
 
 
;Window proc of the ListIcon. 
Procedure.l _LIEListProc(hWnd, uMsg, wParam, lParam) 
  Protected result, *liedit._LIEdit, PInfo.LVHITTESTINFO, *nmHEADER.HD_NOTIFY 
  ;Retrieve the address of the LIEdit structure. 
    *liedit = GetProp_(hWnd, "_LIEdit") 
  Select uMsg 
    Case #WM_NOTIFY 
      *nmHEADER = lParam 
      Select *nmHEADER\hdr\code 
        Case #HDN_BEGINTRACK, #HDN_BEGINTRACKW ;Prevent column 0 from being resized. 
          If *nmHEADER\iItem=0 
            result=1 
          EndIf 
        Case #HDN_ENDTRACK, #HDN_ENDTRACKW 
          InvalidateRect_(hWnd,0,1) 
        Default 
          result=CallWindowProc_(*liedit\listOldProc, hWnd, uMsg, wParam, lParam) 
      EndSelect 
    Case #WM_LBUTTONDBLCLK 
      ;Identify the clicked item 
        PInfo\pt\x = lParam&$ffff 
        PInfo\pt\y = (lParam>>16)&$ffff 
        SendMessage_(hwnd, #LVM_SUBITEMHITTEST, 0, PInfo) 
      If PInfo\iItem <> -1 ;A valid cell was clicked. 
        *liedit\item = PInfo\iItem 
        *liedit\subitem = PInfo\iSubItem 
        _LIEEditCell(*liedit, hWnd) 
      EndIf 
    Case #WM_NCDESTROY 
      result=CallWindowProc_(*liedit\listOldProc, hWnd, uMsg, wParam, lParam) 
      RemoveProp_(hWnd, "_LIEdit") 
      FreeMemory(*liedit) 
    Default 
      result=CallWindowProc_(*liedit\listOldProc, hWnd, uMsg, wParam, lParam) 
  EndSelect 
  ProcedureReturn result 
EndProcedure 
 
 
;Window proc of the edit control. 
Procedure.l _LIEeditProc(hWnd, uMsg, wParam, lParam) 
  Protected result, oldwinproc, *liedit._LIEdit, *wpos.WINDOWPOS 
  ;Retrieve the address of the old proc. 
    oldwinproc = GetProp_(hWnd, "_LIEditOldProc") 
  ;Retrieve the address of the LIEdit structure. 
    *liedit = GetProp_(GetParent_(hWnd), "_LIEdit") 
  Select uMsg 
    Case #WM_ERASEBKGND 
      ;A hack in order to clear the default selection of characters. 
      result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
      If *liedit\editHwnd=0 
        *liedit\editHwnd = hWnd 
        ;Set margins. 
        SendMessage_(hWnd, #EM_SETMARGINS, #EC_LEFTMARGIN|#EC_RIGHTMARGIN, 4) 
        SendMessage_(hWnd, #EM_SETSEL, -1,0) 
      EndIf 
    Case #WM_WINDOWPOSCHANGING 
      *wpos=lParam 
      *wpos\cx=*liedit\cx ;Comment this line to get an edit control which grows with the text. 
      *wpos\x=*liedit\x 
      If _LIEditGlobals\osVersion >= #PB_OS_Windows_Vista And _LIEditGlobals\blnIsXPThemes 
        *wpos\cy=*liedit\cy 
        *wpos\y=*liedit\y 
      Else 
        *wpos\cy=*liedit\cy+3 
        *wpos\y=*liedit\y-2 
      EndIf 
      result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
    Case #WM_NCDESTROY 
      result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
      RemoveProp_(hWnd, "_LIEditOldProc")
    Default 
      result=CallWindowProc_(oldwinproc, hWnd, uMsg, wParam, lParam) 
  EndSelect 
  ProcedureReturn result 
EndProcedure 
 
 
 
 
Enumeration
  #Window_0
EndEnumeration
 
Enumeration 2
  #ListIcon_0
  #ListIcon_1
  #ListIcon_2
  #ListIcon_3
EndEnumeration
 
 
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 376)
  OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(#ListIcon_0, 8, 16, 218, 144, "Column 1", 70, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
  ListIconGadget(#ListIcon_1, 374, 16, 218, 144, "Column 1", 70, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
  ListIconGadget(#ListIcon_2, 8, 192, 218, 176, "Column 1", 70, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
  ListIconGadget(#ListIcon_3, 374, 192, 218, 176, "Column 1", 70, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
EndProcedure
 
OpenWindow_0()
 
For i=1 To 2
  AddGadgetColumn(#ListIcon_0, i, "Column "+Str(i+1), 70)
  AddGadgetColumn(#ListIcon_1, i, "Column "+Str(i+1), 70)
  AddGadgetColumn(#ListIcon_2, i, "Column "+Str(i+1), 70)
  AddGadgetColumn(#ListIcon_3, i, "Column "+Str(i+1), 70)
Next i
 
For i=0 To 2
  For x=#ListIcon_0 To #ListIcon_3
    AddGadgetItem(x, -1, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3")
  Next x
Next i
 
 
SetListIconEditable(#ListIcon_0)
SetListIconEditable(#ListIcon_1)
SetListIconEditable(#ListIcon_2)
SetListIconEditable(#ListIcon_3)
 
Repeat 
  Event = WaitWindowEvent()
    
Until Event = #PB_Event_CloseWindow
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2013, 23:59
Помогаю со студенческими работами здесь

Как в одном окне сделать несколько разметок (layout)?
Доброго времени суток! Подскажите или покажите где можно найти информацию о том как можно в одно окне сделать несколько разметок?

Как открыть несколько форм и отчётов в одном окне?
Всем привет. Проблема состоит в том, что бы на панели задач было открыто одно окно, а в самом окне можно было открывать несколько форм и...

Как считать данные из файла и построить на их основе несколько графиков в одном окне?
Всем привет! Имеется файл, содержащий выборки значений сигнала. Значения потенциалов выражены в мкВ. Частота дискретизации (Гц):...

Несколько гистограмм в одном окне
Подскажите, пожалуйста, как правильно построить несколько гистограмм в одном окне Мне нужно построить 3 гистограммы. Я строю таким...

Несколько графиков в одном окне
Здравствуйте! Мне нужно нарисовать графики y2,y4 при одних константах fi,rs,cps,ks,bs потом поменять эти константы снова запустить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru