Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 8
1

Торможение в ListIconGadget

15.06.2021, 18:57. Показов 1465. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всех приветствую.
Потребовалось написать табличный редактор, поддерживающий любое число одновременно открытых таблиц. Примерно так:
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
Structure Cell
  CellContent$
  ColorCellBack.l
  ColorCellFront.l
EndStructure
 
Structure Column
  Array Row.Cell(0)
  Map MapCellSelect$()                                      ; Карта выбранных ячеек в столбце (ключ = № ряда)
  ColumnName.s                                              ; Текст заголовка
EndStructure
 
Structure PARAM Extends LVHITTESTINFO
  Array Column.Column(0)
  ColumnCount.l
  ContainerID.l
  TableID.l
  SeparationID.l
  ScrollPos.l
  RowCount.l
  RowHeight.l
  WindowID.l
EndStructure
 
Global WidthScroll=GetSystemMetrics_(#SM_CXVSCROLL)
Global ColorCellFrontSelect=GetSysColor_(#COLOR_WINDOW)     ; Белый цвет текста выбранной ячейки
Global ColorCellBackSelect=GetSysColor_(#COLOR_HIGHLIGHT)   ; Синий цвет фона выбранной ячейки
Global ColorCellBackDefault=-1
Global ColorCellFrontDefault=RGB(1,1,1)
Global ColorBackSeparationDefault=RGB(225,235,242)
Global ColorBackSeparationSelect=RGB(175,175,175)
Global NewMap MapGadgets.PARAM()
Global AmountWindow                                         ; Число открытых окон
 
Procedure IsMouseOver(hWnd)
  GetWindowRect_(hWnd,r.RECT)
  GetCursorPos_(p.POINT)
  Result = PtInRect_(r,p\y << 32 + p\x)
  ProcedureReturn Result
EndProcedure
Procedure SelectRow(Row,FlagRowSelect)                      ; Процедура выбора/сброса ряда
  Table=MapGadgets()\TableID
  Separation=MapGadgets()\SeparationID
  
  If FlagRowSelect                                          ; Выделить ряд
    SetGadgetItemColor(Separation,Row-1,#PB_Gadget_BackColor,ColorBackSeparationSelect,1)
    SetGadgetItemColor(Separation,Row-1,#PB_Gadget_FrontColor,ColorCellFrontSelect,1)
    
    PushMapPosition(MapGadgets())
    SetGadgetItemColor(Table,Row-1,#PB_Gadget_BackColor,ColorCellBackSelect,#PB_All)
    SetGadgetItemColor(Table,Row-1,#PB_Gadget_FrontColor,ColorCellFrontSelect,#PB_All)
    For j=1 To ArraySize(MapGadgets(Str(Table))\Column())
      AddMapElement(MapGadgets()\Column(j)\MapCellSelect$(),Str(Row))
    Next
    PopMapPosition(MapGadgets())
    AddMapElement(MapGadgets(Str(Separation))\Column(1)\MapCellSelect$(),Str(Row))
    ProcedureReturn Row
    
  Else                                                      ; Сбросить ряд
    
    SetGadgetItemColor(Separation,Row-1,#PB_Gadget_BackColor,ColorBackSeparationDefault,1)
    SetGadgetItemColor(Separation,Row-1,#PB_Gadget_FrontColor,ColorCellFrontDefault,1)
    
    PushMapPosition(MapGadgets())
    For j=1 To ArraySize(MapGadgets(Str(Table))\Column())
      SetGadgetItemColor(Table,Row-1,#PB_Gadget_BackColor,MapGadgets()\Column(j)\Row(Row)\ColorCellBack,j)
      SetGadgetItemColor(Table,Row-1,#PB_Gadget_FrontColor,MapGadgets()\Column(j)\Row(Row)\ColorCellFront,j)
      DeleteMapElement(MapGadgets()\Column(j)\MapCellSelect$(),Str(Row))
    Next
    PopMapPosition(MapGadgets())
    DeleteMapElement(MapGadgets(Str(Separation))\Column(1)\MapCellSelect$(),Str(Row))
    ProcedureReturn Row
  EndIf
EndProcedure
Procedure OpenTable(Array TableArray$(2),X, Y, WidthWindow, HeightWindow, NameTable$)
  Window=OpenWindow(#PB_Any, X, Y, WidthWindow, HeightWindow, NameTable$, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
  Table=ListIconGadget(#PB_Any,  40,  0, WindowWidth(Window)-40, WindowHeight(Window), "Column 0", 120,#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop)
  Container=ContainerGadget(#PB_Any, 0, GadgetY(Table), GadgetX(Table), GadgetHeight(Table))
  Separation=ListIconGadget(#PB_Any, 0,0,GadgetX(Table)+WidthScroll+FrameWindow,GadgetHeight(Container),"", GadgetWidth(Container),#PB_ListIcon_GridLines)
  
  MapGadgets(Str(Window))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets(Str(Separation))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets()\RowHeight = SendMessage_(GadgetID(Table), #LVM_GETITEMSPACING, 1, 0) >> 16; Высота строки
  MapGadgets(Str(Table))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets()\RowHeight = SendMessage_(GadgetID(Table), #LVM_GETITEMSPACING, 1, 0) >> 16
  
  CloseGadgetList()
  AddGadgetColumn(Separation,1,"",GetGadgetItemAttribute(Separation,0,#PB_ListIcon_ColumnWidth)); Добавить первую колонку к Separation шириной как нулевая
  
  SetGadgetItemAttribute(Table,0,#PB_ListIcon_ColumnWidth,0,0); Скрыть нулевую колонку Table
  SetGadgetItemAttribute(Separation,0,#PB_ListIcon_ColumnWidth,0,0)
  
  ReDim MapGadgets()\Column(ArraySize(TableArray$(),1))
  
  For j = 0 To ArraySize(TableArray$(),1)
    For i = 0 To ArraySize(TableArray$(),2)
      With MapGadgets()\Column(j)
        If i=0                                              ; Заполнение заголовка
          If j
            \ColumnName=TableArray$(j,i)
            
            ReDim MapGadgets()\Column(j)\Row(ArraySize(TableArray$(),2))
            
            AddGadgetColumn(Table, j, Str(j), 60)
            
            SetGadgetItemText(Table,i-1,TableArray$(j,i),j)
          EndIf
          
        Else                                                ; Заполнение остальных ячеек
          
          If j=0
            AddGadgetItem(Table, -1,TableArray$(j,i))
          Else
            If i<=ArraySize(MapGadgets()\Column(j)\Row())
              MapGadgets()\Column(j)\Row(i)\CellContent$=TableArray$(j,i)
              MapGadgets()\Column(j)\Row(i)\ColorCellFront=#Black
              MapGadgets()\Column(j)\Row(i)\ColorCellBack=-1
            EndIf
            SetGadgetItemText(Table,i-1,TableArray$(j,i),j)
          EndIf
        EndIf
        
        If j=ArraySize(TableArray$(),1)
          AddGadgetItem(Separation, -1,Str(i+1))
          SetGadgetItemText(Separation,i,GetGadgetItemText(Separation,i,0),1); Переписать содержимое 0-го столбца в 1 для Separation
          PushMapPosition(MapGadgets())
          ReDim MapGadgets(Str(Separation))\Column(1):ReDim MapGadgets()\Column(1)\Row(i)
          PopMapPosition(MapGadgets())
        EndIf
      EndWith
    Next
  Next
  
  ResizeGadget(Table,#PB_Ignore,#PB_Ignore,#PB_Ignore,ArraySize(TableArray$(),2)*|!REG3XP3!>MapGadgets(Str(Table))\RowHeight-50)
  ResizeWindow(Window,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table))
  ResizeGadget(Container,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table))
  ResizeGadget(Separation,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table)+WidthScroll)
  ProcedureReturn Window
EndProcedure
 
Dim TableArray$(10,40)                                      ; Содержимое таблицы (10 столбцов, 40 строк)
 
For j=0 To ArraySize(TableArray$(),1)
  For i=0 To ArraySize(TableArray$(),2)
    If i=0
      TableArray$(j,i)=Trim("Column "+Str(j))
    Else
      TableArray$(j,i)=Str(j)+Str(i)
    EndIf
  Next
Next
AmountWindow+1
Window=OpenTable(TableArray$(),0, 0, 640, 10, "Table "+Str(AmountWindow))
 
Dim TableArray$(10,60)
 
For j=0 To ArraySize(TableArray$(),1)
 For i=0 To ArraySize(TableArray$(),2)
   If i=0
     TableArray$(j,i)=Trim("Column "+Str(j))
   Else
     TableArray$(j,i)=Str(j)+Str(i)
   EndIf
 Next
Next
AmountWindow+1
Window=OpenTable(TableArray$(),100, 30, 800, 400, "Table "+Str(AmountWindow))
; 
; Dim TableArray$(10,80)
; For j=0 To ArraySize(TableArray$(),1)
;  For i=0 To ArraySize(TableArray$(),2)
;    If i=0
;      TableArray$(j,i)=Trim("Column "+Str(j))
;    Else
;      TableArray$(j,i)=Str(j)+Str(i)
;    EndIf
;  Next
; Next
; AmountWindow+1
; Window=OpenTable(TableArray$(),1500, 30, 800, 400, "Table "+Str(AmountWindow))
 
 
If SetCursorPos_(WindowX(Window)+50,WindowY(Window)+10)     ; Все окна приклеиваются к курсору для удобства позиционирования
  mouse_event_(#MOUSEEVENTF_LEFTDOWN, WindowX(Window),WindowY(Window),0,0)
EndIf
 
Repeat
  Event=WaitWindowEvent()
  
  Select Event
    Case #PB_Event_CloseWindow
      If AmountWindow>1                                   ; Число открытых окон
        Window=EventWindow()
        DeleteMapElement(MapGadgets(),Str(Window))
        CloseWindow(Window)
        AmountWindow-1
      Else                                                ; Последнее окно закрывается после цикла
        Break
      EndIf
      
    Case #WM_VSCROLL,#WM_MOUSEWHEEL                       ; Событие вертикальной прокрутки
      
      SelItem = GetScrollPos_(GadgetID(Table),#SB_VERT) - GetScrollPos_(GadgetID(Separation),#SB_VERT)
      SendMessage_(GadgetID(Separation), #LVM_SCROLL, 0, SelItem * MapGadgets()\RowHeight)
      
    Case #WM_MOUSEMOVE
      Window=EventWindow():Separation=0:Table=0
      
      If FindMapElement(MapGadgets(),Str(Window))
        Separation=MapGadgets()\SeparationID
        Table=MapGadgets()\TableID
        
        If Separation And Table
          
          Select #True
            Case IsMouseOver(GadgetID(Table))
              GadgetID=Table
              
            Case IsMouseOver(GadgetID(Separation))
              GadgetID=Separation
          EndSelect
          
          If FindMapElement(MapGadgets(),Str(GadgetID))
            GetCursorPos_(p.POINT)
            ScreenToClient_ (GadgetID(Table), @p)           
            MapGadgets()\pt\x = p\x : MapGadgets()\pt\y = p\y
            SendMessage_(GadgetID(Table),#LVM_SUBITEMHITTEST ,0,@MapGadgets())
            r.RECT
            r\top = MapGadgets()\iSubItem
            r\left = #LVIR_BOUNDS
            SendMessage_(GadgetID(Table), #LVM_GETSUBITEMRECT, MapGadgets()\iItem, r)
            If MapGadgets()\iSubItem = 0
              r\right = SendMessage_(GadgetID(Table), #LVM_GETCOLUMNWIDTH, 0, 0)
            EndIf
            If p\y < 20                                       ; Коррекция № ряда
              MapGadgets()\iItem=-1
            Else
              MapGadgets()\iItem+1
            EndIf
            
            If GadgetID=Separation
              If GetAsyncKeyState_(#VK_LBUTTON)=32768         ; ЛКМ долго нажата
                SelectRow(MapGadgets()\iItem,1)
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf
  EndSelect
ForEver
 
CloseWindow(EventWindow())
ClearMap(MapGadgets())
Слева вставляется сепарированная полоса (тоже ListIconGadget), в которой пишутся номера строк. Для удобства хендлы окон и гаджетов хранятся в карте MapGadgets(), откуда легко получить все параметры для конкретного окна.
Всё бы хорошо, но напрягают 2 момента.
1) Если провести по полосе курсором с нажатой ЛКМ, ячейки в таблице подсвечиваются. В полосе также, но с большим опозданием. Ощущение такое, что всё кладётся в стек и затем через изрядное время извлекается. А ведь используется для окраски та же функция SetGadgetItemColor(), а идентификаторы гаджетов к ней извлекаются мгновенно из MapGadgets(). Должно же быть всё без конфликтов, быстро!
2) Почему не приходит событие #WM_VSCROLL? Из-за этого синхронизация строк осуществляется колесом мыши, но не линейкой.
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2021, 18:57
Ответы с готовыми решениями:

StringGadget, ListIcongadget
Подскажите кто может Недавно начал пробовать программирование вообще и на Purebasic в частности...

Обновление ListIconGadget
Всем привет, столкнулся с проблемой которую долго не могу решить, не могу придумать саму стратегию...

Один чекбокс в ListIconGadget
Доброго времени суток, имеется код который позволяет выбрать только один чекбокс в ListIconGadget,...

Listicongadget + графика или еще как-то
Здравствуйте! Нужен совет, как можно изобразить что-то подобное на вложенной картинке. Задача...

5
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 8
19.06.2021, 19:26  [ТС] 2
Пишу тем, кому интересно решение
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
Structure Cell
  CellContent$
  ColorCellBack.l
  ColorCellFront.l
EndStructure
 
Structure Column
  Array Row.Cell(0)
  Map MapCellSelect$()                                      ; Карта выбранных ячеек в столбце (ключ = № ряда)
  ColumnName.s                                              ; Текст заголовка
EndStructure
 
Structure PARAM Extends LVHITTESTINFO
  Array Column.Column(0)
  ColumnCount.l
  ContainerID.l
  CurrentGadgetID.l
  TableID.l
  SeparationID.l
  ScrollPos.l
  RowCount.l
  RowHeight.l
  WindowID.l
EndStructure
 
Global WidthScroll=GetSystemMetrics_(#SM_CXVSCROLL)
Global ColorCellFrontSelect=GetSysColor_(#COLOR_WINDOW)     ; Белый цвет текста выбранной ячейки
Global ColorCellBackSelect=GetSysColor_(#COLOR_HIGHLIGHT)   ; Синий цвет фона выбранной ячейки
Global ColorCellBackDefault=-1
Global ColorCellFrontDefault=RGB(1,1,1)
Global ColorBackSeparationDefault=RGB(225,235,242)
Global ColorBackSeparationSelect=RGB(175,175,175)
Global NewMap MapGadgets.PARAM()
Global AmountWindow                                         ; Число открытых окон
Global FlagRowSelect
 
Procedure MyThread(Row)
  If FlagRowSelect                                          ; Выделить ряд
    If MapGadgets()\SeparationID
      SetGadgetItemColor(MapGadgets()\SeparationID,Row-1,#PB_Gadget_BackColor,ColorBackSeparationSelect,1)
      SetGadgetItemColor(MapGadgets()\SeparationID,Row-1,#PB_Gadget_FrontColor,ColorCellFrontSelect,1)
    EndIf
    
    If MapGadgets()\TableID
      SetGadgetItemColor(MapGadgets()\TableID,Row-1,#PB_Gadget_BackColor,ColorCellBackSelect,#PB_All)
      SetGadgetItemColor(MapGadgets()\TableID,Row-1,#PB_Gadget_FrontColor,ColorCellFrontSelect,#PB_All)
    EndIf
    
  Else                                                      ; Сбросить ряд
    
    If MapGadgets()\SeparationID
      SetGadgetItemColor(MapGadgets()\SeparationID,Row-1,#PB_Gadget_BackColor,ColorBackSeparationDefault,1)
      SetGadgetItemColor(MapGadgets()\SeparationID,Row-1,#PB_Gadget_FrontColor,ColorCellFrontDefault,1)
    EndIf
    
    If MapGadgets()\TableID
      For j=1 To ArraySize(MapGadgets(Str(MapGadgets()\TableID))\Column())
        SetGadgetItemColor(MapGadgets()\TableID,Row-1,#PB_Gadget_BackColor,ColorCellBackDefault,j)
        SetGadgetItemColor(MapGadgets()\TableID,Row-1,#PB_Gadget_FrontColor,ColorCellFrontDefault,j)
      Next
    EndIf
  EndIf
EndProcedure
Procedure IsMouseOver(hWnd)
  GetWindowRect_(hWnd,r.RECT)
  GetCursorPos_(p.POINT)
  Result = PtInRect_(r,p\y << 32 + p\x)
  ProcedureReturn Result
EndProcedure
Procedure SelectRow(Row)                                    ; Процедура выбора/сброса ряда
  Table=MapGadgets()\TableID
  Separation=MapGadgets()\SeparationID
  Static OldRow
  
  If FlagRowSelect                                          ; Выделить ряд
    
    PushMapPosition(MapGadgets())
    For j=1 To ArraySize(MapGadgets(Str(Table))\Column())
      AddMapElement(MapGadgets()\Column(j)\MapCellSelect$(),Str(Row))
    Next
    PopMapPosition(MapGadgets())
    AddMapElement(MapGadgets(Str(Separation))\Column(1)\MapCellSelect$(),Str(Row))
  Else                                                      ; Сбросить ряд
    
    PushMapPosition(MapGadgets())
    For j=1 To ArraySize(MapGadgets(Str(Table))\Column())
      DeleteMapElement(MapGadgets()\Column(j)\MapCellSelect$(),Str(Row))
    Next
    PopMapPosition(MapGadgets())
  EndIf
  
  If OldRow<>Row
    OldRow=Row
    ProcedureReturn Row
  EndIf
EndProcedure
Procedure OpenTable(Array TableArray$(2),X, Y, WidthWindow, HeightWindow, NameTable$)
  Window=OpenWindow(#PB_Any, X, Y, WidthWindow, HeightWindow, NameTable$, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
  Table=ListIconGadget(#PB_Any,  40,  0, WindowWidth(Window)-40, WindowHeight(Window), "Column 0", 120,#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop)
  Container=ContainerGadget(#PB_Any, 0, GadgetY(Table), GadgetX(Table), GadgetHeight(Table))
  Separation=ListIconGadget(#PB_Any, 0,0,GadgetX(Table)+WidthScroll+FrameWindow+1,GadgetHeight(Container),"", GadgetWidth(Container),#PB_ListIcon_GridLines)
  
  MapGadgets(Str(Window))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets(Str(Separation))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets()\RowHeight = SendMessage_(GadgetID(Separation), #LVM_GETITEMSPACING, 1, 0) >> 16; Высота строки Separation
  MapGadgets(Str(Table))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets()\RowHeight = SendMessage_(GadgetID(Table), #LVM_GETITEMSPACING, 1, 0) >> 16; Высота строки Table
  
  CloseGadgetList()
  AddGadgetColumn(Separation,1,"",GetGadgetItemAttribute(Separation,0,#PB_ListIcon_ColumnWidth)); Добавить первую колонку к Separation шириной как нулевая
  
  SetGadgetItemAttribute(Table,0,#PB_ListIcon_ColumnWidth,0,0); Скрыть нулевую колонку Table
  SetGadgetItemAttribute(Separation,0,#PB_ListIcon_ColumnWidth,0,0)
  
  ReDim MapGadgets(Str(Table))\Column(ArraySize(TableArray$(),1))
  
  For j = 0 To ArraySize(TableArray$(),1)
    For i = 0 To ArraySize(TableArray$(),2)
      With MapGadgets()\Column(j)
        If i=0                                              ; Заполнение заголовка
          If j
            \ColumnName=TableArray$(j,i)
            
            ReDim MapGadgets()\Column(j)\Row(ArraySize(TableArray$(),2))
            
            AddGadgetColumn(Table, j, Str(j), 60)
            
            SetGadgetItemText(Table,i-1,TableArray$(j,i),j)
          EndIf
          
        Else                                                ; Заполнение остальных ячеек
          
          If j=0
            AddGadgetItem(Table, -1,TableArray$(j,i))
          Else
            If i<=ArraySize(MapGadgets()\Column(j)\Row())
              MapGadgets()\Column(j)\Row(i)\CellContent$=TableArray$(j,i)
              MapGadgets()\Column(j)\Row(i)\ColorCellFront=#Black
              MapGadgets()\Column(j)\Row(i)\ColorCellBack=-1
            EndIf
            SetGadgetItemText(Table,i-1,TableArray$(j,i),j)
          EndIf
        EndIf
        
        If j=ArraySize(TableArray$(),1)
          AddGadgetItem(Separation, -1,Str(i+1))
          SetGadgetItemText(Separation,i,GetGadgetItemText(Separation,i,0),1); Переписать содержимое 0-го столбца в 1 для Separation
          SetGadgetItemColor(MapGadgets()\SeparationID,i-1,#PB_Gadget_BackColor,ColorBackSeparationDefault,1)
          SetGadgetItemColor(MapGadgets()\SeparationID,i-1,#PB_Gadget_FrontColor,ColorCellFrontDefault,1)
          PushMapPosition(MapGadgets())
          ReDim MapGadgets(Str(Separation))\Column(1):ReDim MapGadgets()\Column(1)\Row(i)
          PopMapPosition(MapGadgets())
        EndIf
      EndWith
    Next
  Next
  
  ResizeGadget(Table,#PB_Ignore,#PB_Ignore,#PB_Ignore,ArraySize(TableArray$(),2)*|!REG3XP3!>MapGadgets(Str(Table))\RowHeight-50)
  ResizeWindow(Window,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table))
  ResizeGadget(Container,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table))
  ResizeGadget(Separation,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table)+WidthScroll)
  ProcedureReturn Window
EndProcedure
 
Dim TableArray$(10,40)                                      ; Содержимое таблицы (10 столбцов, 40 строк)
 
For j=0 To ArraySize(TableArray$(),1)
  For i=0 To ArraySize(TableArray$(),2)
    If i=0
      TableArray$(j,i)=Trim("Column "+Str(j))
    Else
      TableArray$(j,i)=Str(j)+Str(i)
    EndIf
  Next
Next
AmountWindow+1
Window=OpenTable(TableArray$(),0, 0, 640, 10, "Table "+Str(AmountWindow))
 
Dim TableArray$(10,60)
 
For j=0 To ArraySize(TableArray$(),1)
 For i=0 To ArraySize(TableArray$(),2)
   If i=0
     TableArray$(j,i)=Trim("Column "+Str(j))
   Else
     TableArray$(j,i)=Str(j)+Str(i)
   EndIf
 Next
Next
AmountWindow+1
Window=OpenTable(TableArray$(),100, 30, 800, 400, "Table "+Str(AmountWindow))
; 
; Dim TableArray$(10,80)
; For j=0 To ArraySize(TableArray$(),1)
;  For i=0 To ArraySize(TableArray$(),2)
;    If i=0
;      TableArray$(j,i)=Trim("Column "+Str(j))
;    Else
;      TableArray$(j,i)=Str(j)+Str(i)
;    EndIf
;  Next
; Next
; AmountWindow+1
; Window=OpenTable(TableArray$(),1500, 30, 800, 400, "Table "+Str(AmountWindow))
 
If SetCursorPos_(WindowX(Window)+50,WindowY(Window)+10)     ; Все окна приклеиваются к курсору для удобства позиционирования
  mouse_event_(#MOUSEEVENTF_LEFTDOWN, WindowX(Window),WindowY(Window),0,0)
EndIf
 
Repeat
  Event=WaitWindowEvent()
  
  If Event
    Window=EventWindow()
    
    If FindMapElement(MapGadgets(),Str(Window))
      Select #True
        Case IsMouseOver(GadgetID(MapGadgets()\SeparationID))
          Separation=MapGadgets()\SeparationID
          Table=MapGadgets()\TableID
          MapGadgets()\CurrentGadgetID=Separation
          
        Case IsMouseOver(GadgetID(MapGadgets()\TableID))
          Separation=MapGadgets()\SeparationID
          Table=MapGadgets()\TableID
          MapGadgets()\CurrentGadgetID=Table
      EndSelect
      
      Select Event
        Case #PB_Event_CloseWindow
          If AmountWindow>1                                 ; Число открытых окон
            DeleteMapElement(MapGadgets(),Str(Window))
            CloseWindow(Window)
            AmountWindow-1
          Else                                              ; Последнее окно закрывается после цикла
            Break
          EndIf
          
        Case #WM_VSCROLL,#WM_MOUSEWHEEL                     ; Событие вертикальной прокрутки
          Select MapGadgets()\CurrentGadgetID
            Case Separation
              SelItem = GetScrollPos_(GadgetID(Separation),#SB_VERT) - GetScrollPos_(GadgetID(Table),#SB_VERT)
              SendMessage_(GadgetID(Table), #LVM_SCROLL, 0, SelItem * MapGadgets(Str(Table))\RowHeight)              
              
            Case Table
              SelItem = GetScrollPos_(GadgetID(Table),#SB_VERT) - GetScrollPos_(GadgetID(Separation),#SB_VERT)
              SendMessage_(GadgetID(Separation), #LVM_SCROLL, 0, SelItem * MapGadgets(Str(Table))\RowHeight)
          EndSelect
          
        Case #WM_MOUSEMOVE
          If MapGadgets()\CurrentGadgetID
            GetCursorPos_(p.POINT)
            ScreenToClient_ (GadgetID(MapGadgets()\CurrentGadgetID), @p)           
            MapGadgets()\pt\x = p\x : MapGadgets()\pt\y = p\y
            SendMessage_(GadgetID(MapGadgets()\CurrentGadgetID),#LVM_SUBITEMHITTEST ,0,@MapGadgets())
            r.RECT
            r\top = MapGadgets()\iSubItem
            r\left = #LVIR_BOUNDS
            SendMessage_(GadgetID(MapGadgets()\CurrentGadgetID), #LVM_GETSUBITEMRECT, MapGadgets()\iItem, r)
            
            If MapGadgets()\iSubItem = 0
              r\right = SendMessage_(GadgetID(MapGadgets()\CurrentGadgetID), #LVM_GETCOLUMNWIDTH, 0, 0)
            EndIf
            
            If p\y < 20                                       ; Коррекция № ряда
              MapGadgets()\iItem=-1
            Else
              MapGadgets()\iItem+1
            EndIf
            
            Row=MapGadgets()\iItem
            
            If MapGadgets()\CurrentGadgetID=Separation
              If GetAsyncKeyState_(#VK_LBUTTON)=32768         ; ЛКМ долго нажата
                If GetGadgetItemColor(Separation,Row-1,#PB_Gadget_FrontColor,1)=ColorCellFrontDefault
                  FlagRowSelect=1
                Else
                  FlagRowSelect=0
                EndIf
                
                Row=SelectRow(Row)  
                If Row
                  If Thread=CreateThread(@MyThread(), Row)
                    WaitThread(Thread)
                  EndIf
                EndIf
              EndIf
            EndIf
          EndIf
      EndSelect
    EndIf
  EndIf
ForEver
 
CloseWindow(EventWindow())
ClearMap(MapGadgets())
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 8
23.06.2021, 15:08  [ТС] 3
Похоже, это следствие побочного эффекта. Добавьте эти строки в мой первый пример и раскомментируйте их:
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
          If FindMapElement(MapGadgets(),Str(GadgetID))
            GetCursorPos_(p.POINT)
            ScreenToClient_ (GadgetID(Table), @p)           
            MapGadgets()\pt\x = p\x : MapGadgets()\pt\y = p\y
            SendMessage_(GadgetID(Table),#LVM_SUBITEMHITTEST ,0,@MapGadgets())
            r.RECT
            r\top = MapGadgets()\iSubItem
            r\left = #LVIR_BOUNDS
            SendMessage_(GadgetID(Table), #LVM_GETSUBITEMRECT, MapGadgets()\iItem, r)
            If MapGadgets()\iSubItem = 0
              r\right = SendMessage_(GadgetID(Table), #LVM_GETCOLUMNWIDTH, 0, 0)
            EndIf
            If p\y < 20                                       ; Коррекция № ряда
              MapGadgets()\iItem=-1
            Else
              MapGadgets()\iItem+1
            EndIf
            
            If GadgetID=Separation
              If GetAsyncKeyState_(#VK_LBUTTON)=32768         ; ЛКМ долго нажата
                ;keybd_event_(#VK_CONTROL,1,0,0)               ; Эмуляция нажатия клавиши Ctrl
                ;keybd_event_(#VK_CONTROL,1,#KEYEVENTF_KEYUP,0); Эмуляция отпускания
                ; ОСТОРОЖНО!!! Без неё может отрубить клавиатуру!
                SelectRow(MapGadgets()\iItem,1)
              EndIf
            EndIf
          EndIf
А теперь скажите, при чём здесь клавиша Ctrl ?
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 8
23.06.2021, 23:29  [ТС] 4
Вот это прикол!!!!!!!!!!!!!!!!
; Включите отладчик.
; Поводите курсором по крайнему левому столбцу с номерами строк. При нажатой ЛКМ будет выделяться вся строка вслед за курсором, и выводиться № её в окне отладчика. Всё как надо.
; А теперь выключите отладчик и повторите
; Можно просто убрать Debug
PureBasic 5.31
Кликните здесь для просмотра всего текста

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
Structure Cell
  CellContent$
  ColorCellBack.l
  ColorCellFront.l
EndStructure
 
Structure Column
  Array Row.Cell(0)
  Map MapCellSelect$()                                      ; Карта выбранных ячеек в столбце (ключ = № ряда)
  ColumnName.s                                              ; Текст заголовка
EndStructure
 
Structure PARAM Extends LVHITTESTINFO
  Array Column.Column(0)
  ColumnCount.l
  ContainerID.l
  TableID.l
  SeparationID.l
  ScrollPos.l
  RowCount.l
  RowHeight.l
  WindowID.l
EndStructure
 
Global WidthScroll=GetSystemMetrics_(#SM_CXVSCROLL)
Global ColorCellFrontSelect=GetSysColor_(#COLOR_WINDOW)     ; Белый цвет текста выбранной ячейки
Global ColorCellBackSelect=GetSysColor_(#COLOR_HIGHLIGHT)   ; Синий цвет фона выбранной ячейки
Global ColorCellBackDefault=-1
Global ColorCellFrontDefault=RGB(1,1,1)
Global ColorBackSeparationDefault=RGB(225,235,242)
Global ColorBackSeparationSelect=RGB(175,175,175)
Global NewMap MapGadgets.PARAM()
Global AmountWindow                                         ; Число открытых окон
 
Procedure IsMouseOver(hWnd)
  GetWindowRect_(hWnd,r.RECT)
  GetCursorPos_(p.POINT)
  Result = PtInRect_(r,p\y << 32 + p\x)
  ProcedureReturn Result
EndProcedure
Procedure SelectRow(Row,FlagRowSelect)                      ; Процедура выбора/сброса ряда
  Table=MapGadgets()\TableID
  Separation=MapGadgets()\SeparationID
  Static OldRow
  
  If OldRow<>Row
    keybd_event_(#VK_CONTROL,1,0,0)               ; Эмуляция нажатия клавиши Ctrl
    keybd_event_(#VK_CONTROL,1,#KEYEVENTF_KEYUP,0); Эмуляция отпускания
    
    If FlagRowSelect                              ; Выделить ряд
      SetGadgetItemColor(Separation,Row-1,#PB_Gadget_BackColor,ColorBackSeparationSelect,1)
      SetGadgetItemColor(Separation,Row-1,#PB_Gadget_FrontColor,ColorCellFrontSelect,1)
      
      PushMapPosition(MapGadgets())
      SetGadgetItemColor(Table,Row-1,#PB_Gadget_BackColor,ColorCellBackSelect,#PB_All)
      SetGadgetItemColor(Table,Row-1,#PB_Gadget_FrontColor,ColorCellFrontSelect,#PB_All)
      For j=1 To ArraySize(MapGadgets(Str(Table))\Column())
        AddMapElement(MapGadgets()\Column(j)\MapCellSelect$(),Str(Row))
      Next
      PopMapPosition(MapGadgets())
      AddMapElement(MapGadgets(Str(Separation))\Column(1)\MapCellSelect$(),Str(Row))
      
    Else                                         ; Сбросить ряд
      
      SetGadgetItemColor(Separation,Row-1,#PB_Gadget_BackColor,ColorBackSeparationDefault,1)
      SetGadgetItemColor(Separation,Row-1,#PB_Gadget_FrontColor,ColorCellFrontDefault,1)
      
      PushMapPosition(MapGadgets())
      For j=1 To ArraySize(MapGadgets(Str(Table))\Column())
        SetGadgetItemColor(Table,Row-1,#PB_Gadget_BackColor,MapGadgets()\Column(j)\Row(Row)\ColorCellBack,j)
        SetGadgetItemColor(Table,Row-1,#PB_Gadget_FrontColor,MapGadgets()\Column(j)\Row(Row)\ColorCellFront,j)
        DeleteMapElement(MapGadgets()\Column(j)\MapCellSelect$(),Str(Row))
      Next
      PopMapPosition(MapGadgets())
      DeleteMapElement(MapGadgets(Str(Separation))\Column(1)\MapCellSelect$(),Str(Row))
      
    EndIf
    OldRow=Row
    ProcedureReturn Row
  EndIf
EndProcedure
Procedure OpenTable(Array TableArray$(2),X, Y, WidthWindow, HeightWindow, NameTable$)
  Window=OpenWindow(#PB_Any, X, Y, WidthWindow, HeightWindow, NameTable$, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
  Table=ListIconGadget(#PB_Any,  40,  0, WindowWidth(Window)-40, WindowHeight(Window), "Column 0", 120,#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop)
  Container=ContainerGadget(#PB_Any, 0, GadgetY(Table), GadgetX(Table), GadgetHeight(Table))
  Separation=ListIconGadget(#PB_Any, 0,0,GadgetX(Table)+WidthScroll+FrameWindow,GadgetHeight(Container),"", GadgetWidth(Container),#PB_ListIcon_GridLines)
  
  MapGadgets(Str(Window))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets(Str(Separation))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets()\RowHeight = SendMessage_(GadgetID(Table), #LVM_GETITEMSPACING, 1, 0) >> 16; Высота строки
  MapGadgets(Str(Table))\TableID=Table
  MapGadgets()\SeparationID=Separation
  MapGadgets()\WindowID=Window
  MapGadgets()\RowHeight = SendMessage_(GadgetID(Table), #LVM_GETITEMSPACING, 1, 0) >> 16
  
  CloseGadgetList()
  AddGadgetColumn(Separation,1,"",GetGadgetItemAttribute(Separation,0,#PB_ListIcon_ColumnWidth)); Добавить первую колонку к Separation шириной как нулевая
  
  SetGadgetItemAttribute(Table,0,#PB_ListIcon_ColumnWidth,0,0); Скрыть нулевую колонку Table
  SetGadgetItemAttribute(Separation,0,#PB_ListIcon_ColumnWidth,0,0)
  
  ReDim MapGadgets()\Column(ArraySize(TableArray$(),1))
  
  For j = 0 To ArraySize(TableArray$(),1)
    For i = 0 To ArraySize(TableArray$(),2)
      With MapGadgets()\Column(j)
        If i=0                                              ; Заполнение заголовка
          If j
            \ColumnName=TableArray$(j,i)
            
            ReDim MapGadgets()\Column(j)\Row(ArraySize(TableArray$(),2))
            
            AddGadgetColumn(Table, j, Str(j), 60)
            
            SetGadgetItemText(Table,i-1,TableArray$(j,i),j)
          EndIf
          
        Else                                                ; Заполнение остальных ячеек
          
          If j=0
            AddGadgetItem(Table, -1,TableArray$(j,i))
          Else
            If i<=ArraySize(MapGadgets()\Column(j)\Row())
              MapGadgets()\Column(j)\Row(i)\CellContent$=TableArray$(j,i)
              MapGadgets()\Column(j)\Row(i)\ColorCellFront=#Black
              MapGadgets()\Column(j)\Row(i)\ColorCellBack=-1
            EndIf
            SetGadgetItemText(Table,i-1,TableArray$(j,i),j)
          EndIf
        EndIf
        
        If j=ArraySize(TableArray$(),1)
          AddGadgetItem(Separation, -1,Str(i+1))
          SetGadgetItemText(Separation,i,GetGadgetItemText(Separation,i,0),1); Переписать содержимое 0-го столбца в 1 для Separation
          SetGadgetItemColor(Separation,Row-1,#PB_Gadget_BackColor,ColorBackSeparationDefault,1)
          SetGadgetItemColor(Separation,Row-1,#PB_Gadget_FrontColor,ColorCellFrontDefault,1)
          PushMapPosition(MapGadgets())
          ReDim MapGadgets(Str(Separation))\Column(1):ReDim MapGadgets()\Column(1)\Row(i)
          PopMapPosition(MapGadgets())
        EndIf
      EndWith
    Next
  Next
  
  ResizeGadget(Table,#PB_Ignore,#PB_Ignore,#PB_Ignore,ArraySize(TableArray$(),2)*|!REG3XP3!>MapGadgets(Str(Table))\RowHeight-50)
  ResizeWindow(Window,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table))
  ResizeGadget(Container,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table))
  ResizeGadget(Separation,#PB_Ignore,#PB_Ignore,#PB_Ignore,GadgetHeight(Table)+WidthScroll)
  ProcedureReturn Window
EndProcedure
 
Dim TableArray$(10,40)                                      ; Содержимое таблицы (10 столбцов, 40 строк)
 
For j=0 To ArraySize(TableArray$(),1)
  For i=0 To ArraySize(TableArray$(),2)
    If i=0
      TableArray$(j,i)=Trim("Column "+Str(j))
    Else
      TableArray$(j,i)=Str(j)+Str(i)
    EndIf
  Next
Next
AmountWindow+1
Window=OpenTable(TableArray$(),0, 0, 640, 10, "Table "+Str(AmountWindow))
 
;Dim TableArray$(10,60)
 
;For j=0 To ArraySize(TableArray$(),1)
 ;For i=0 To ArraySize(TableArray$(),2)
   ;If i=0
     ;TableArray$(j,i)=Trim("Column "+Str(j))
   ;Else
     ;TableArray$(j,i)=Str(j)+Str(i)
   ;EndIf
 ;Next
;Next
;AmountWindow+1
;Window=OpenTable(TableArray$(),100, 30, 800, 400, "Table "+Str(AmountWindow))
; 
; Dim TableArray$(10,80)
; For j=0 To ArraySize(TableArray$(),1)
;  For i=0 To ArraySize(TableArray$(),2)
;    If i=0
;      TableArray$(j,i)=Trim("Column "+Str(j))
;    Else
;      TableArray$(j,i)=Str(j)+Str(i)
;    EndIf
;  Next
; Next
; AmountWindow+1
; Window=OpenTable(TableArray$(),1500, 30, 800, 400, "Table "+Str(AmountWindow))
 
 
If SetCursorPos_(WindowX(Window)+50,WindowY(Window)+10)     ; Все окна приклеиваются к курсору для удобства позиционирования
  mouse_event_(#MOUSEEVENTF_LEFTDOWN, WindowX(Window),WindowY(Window),0,0)
EndIf
 
Repeat
  Event=WaitWindowEvent()
  
  Select Event
    Case #PB_Event_CloseWindow
      If AmountWindow>1                                   ; Число открытых окон
        Window=EventWindow()
        DeleteMapElement(MapGadgets(),Str(Window))
        CloseWindow(Window)
        AmountWindow-1
      Else                                                ; Последнее окно закрывается после цикла
        Break
      EndIf
      
    Case #WM_VSCROLL,#WM_MOUSEWHEEL                       ; Событие вертикальной прокрутки
      
      SelItem = GetScrollPos_(GadgetID(Table),#SB_VERT) - GetScrollPos_(GadgetID(Separation),#SB_VERT)
      SendMessage_(GadgetID(Separation), #LVM_SCROLL, 0, SelItem * MapGadgets()\RowHeight)
      
    Case #WM_MOUSEMOVE
      Window=EventWindow():Separation=0:Table=0
      
      If FindMapElement(MapGadgets(),Str(Window))
        Separation=MapGadgets()\SeparationID
        Table=MapGadgets()\TableID
        
        If Separation And Table
          
          Select #True
            Case IsMouseOver(GadgetID(Table))
              GadgetID=Table
              
            Case IsMouseOver(GadgetID(Separation))
              GadgetID=Separation
          EndSelect
          
          If FindMapElement(MapGadgets(),Str(GadgetID))
            GetCursorPos_(p.POINT)
            ScreenToClient_ (GadgetID(Table), @p)           
            MapGadgets()\pt\x = p\x : MapGadgets()\pt\y = p\y
            SendMessage_(GadgetID(Table),#LVM_SUBITEMHITTEST ,0,@MapGadgets())
            r.RECT
            r\top = MapGadgets()\iSubItem
            r\left = #LVIR_BOUNDS
            SendMessage_(GadgetID(Table), #LVM_GETSUBITEMRECT, MapGadgets()\iItem, r)
            If MapGadgets()\iSubItem = 0
              r\right = SendMessage_(GadgetID(Table), #LVM_GETCOLUMNWIDTH, 0, 0)
            EndIf
            If p\y < 20                                       ; Коррекция № ряда
              MapGadgets()\iItem=-1
            Else
              MapGadgets()\iItem+1
            EndIf
            
            If GadgetID=Separation
              If GetAsyncKeyState_(#VK_LBUTTON)=32768         ; ЛКМ долго нажата
                If SelectRow(MapGadgets()\iItem,1)
                  While MapSize(MapGadgets()\Column(1)\MapCellSelect$())>1
                    ResetMap(MapGadgets()\Column(1)\MapCellSelect$())
                    While NextMapElement(MapGadgets()\Column(1)\MapCellSelect$())
                      i=Val(MapKey(MapGadgets()\Column(1)\MapCellSelect$()))
                      If i<>MapGadgets()\iItem
                        Debug Chr($9)+SelectRow(i,0)
                      EndIf
                    Wend
                  Wend
                EndIf
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf
  EndSelect
ForEver
 
CloseWindow(EventWindow())
ClearMap(MapGadgets())

Ладно, тема эта, вижу, интересна лишь случайным прохожим, которые роются в Инете. Никто ни черта не знает. Ни даже робкой догадки...
Эх, мне бы зарегиться на аглицком форуме, там бы уж точно знатоки нашлись.
Не буду больше беспокоить.
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.06.2021, 08:28 5
Цитата Сообщение от Process Посмотреть сообщение
Вот это прикол!
Ни какого прикола не увидел.
Обычная ошибка новичка, который написал Debug перед вызовом процедуры.
Когда отладчик включен, то эта строка исполняется
Debug Chr($9)+SelectRow(i,0)
Если нет, то все, что стоит за Debug не исполняется.
Значит не вызывается SelectRow(i,0)
Eсли нужен контроль, то вынесите его в отдельную переменную:
PureBasic
1
2
3
4
5
 If i<>MapGadgets()\iItem
                        ;Debug Chr($9)+SelectRow(i,0)
                        aaa.s=Chr($9)+SelectRow(i,0)
                        Debug aaa
                      EndIf
Если не нужен, то сделайте проще:
PureBasic
1
2
3
If i<>MapGadgets()\iItem
    SelectRow(i,0)
EndIf
0
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 8
24.06.2021, 09:36  [ТС] 6
Спасибо. Я не знал.
0
24.06.2021, 09:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2021, 09:36
Помогаю со студенческими работами здесь

Ускорить заполнение ListIconGadget
Небольшой совет, пригодится тем, кому нужно записать большое количество строк в ListIconGadget. Для...

ListIconGadget закраска ячек
Доброго время суток форумчане, появился вопрос: можно ли закрасить ListIconGadget любым цветом? ...

Торможение HP 4545s
Доброго времени суток. Столкнулся с проблемой неопределенного характера, начну сразу с...

Торможение Windows 7
Pentium D 2,8 гц 2Гб ОЗУ DDR2 На последнем этапе установки-сильно начинает тормозить и когда...

Торможение системы!
Помогите пожалуйста! Нужно написать программу, которая затормаживает работу системы, то есть...

Торможение базы
Привет. Имеется база (1.5 Гб, ДБФ, в день забивают около 1200 документов), находится на сервере...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru