purebasic.info

PureBasic forum
Текущее время: Пт дек 14, 2018 8:39 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос связанный с NewList
СообщениеДобавлено: Чт мар 23, 2017 12:28 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
После заполнения листа, добавляю например новый элемент в начало а оно отображается в конце знаю что из-за параметра (\Y+20) ,но если я сделаю так (\Y=ListIndex(this())*20) будет работать как надо. Не знаю поняли ли вы что нибудь :)
В общем мне нужно что бы можно было добавить новый элемент в любой позиции между списками и чтобы он отображался на том где я укажу как это можно сделать?

Код:
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
Structure test_struct
  el.i
  Y.i
  text$
EndStructure
 
Global NewMap h.i()
Global NewList this.test_struct()
 
Procedure add_el(el, text$)
  Static Y
     
  If el = #PB_Any
    LastElement(this())
    elID = AddElement(this())
    el = ListIndex(this()) + 1 ; @this()
  Else
    If (el > (ListSize(this()) - 1))
      LastElement(this())
      elID = AddElement(this())
    Else
      SelectElement(this(), el)
      elID = InsertElement(this())
    EndIf
  EndIf
 
 
  If elID
    With this()
      \y = Y
      \el = el
      h(Str(el)) = elID
      \text$ = text$
     
      Debug "in "+ListIndex(this())+" e "+Str(el)+" h "+Str(@this())+ " y "+Str(\y)
   EndWith
  EndIf
 
   Y + 20
EndProcedure
 
 
 
For i=1 To 5
  add_el(-1,"text_"+Str(i))
Next
 
 add_el(0,"text_"+Str(0))
 
 
If OpenWindow(0, 0, 0, 220, 220, "Canvas container example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
    CanvasGadget(0, 10, 10, 200, 200, #PB_Canvas_Container)
    ;ButtonGadget(1, 10, 10, 80, 30, "Clean up")
    CloseGadgetList()
   
   
    If StartDrawing(CanvasOutput(0))
      With this()
        ForEach this()
          Box(0, \y, 200, 19, $B5B5B5)
          DrawText(0,\y,\text$)
        Next
      EndWith
      StopDrawing()
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
   
    Until Event = #PB_Event_CloseWindow
  EndIf
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос связанный с NewList
СообщениеДобавлено: Чт мар 23, 2017 12:41 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
По моему вопрос не связан с NewList, потому что данные добавляются в список как надо. Дело в некорректном вычислении позиции. Т. к. написано сейчас, будет нормально работать только при добавлении в конец списка, а при добавлении в выборочную позицию, в статическую переменную Y записывается не то что нужно.
Нужно сохранять не абсолютную позицию, а относительно предыдущего элемента.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос связанный с NewList
СообщениеДобавлено: Чт мар 23, 2017 1:10 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Цитата:
Нужно сохранять не абсолютную позицию, а относительно предыдущего элемента.

Как это? Например добавил я первый элемент у него должен быть y=0 затем захотел добавить перед ним и что получится возьму его координаты то есть 0 и что они будут лежать друг на друге? :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос связанный с NewList
СообщениеДобавлено: Чт мар 23, 2017 1:27 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
mestnyi писал(а):
Как это?
Код:
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
Structure test_struct
  el.i
  ;Y.i
  Width.i
  text$
EndStructure
 
Global NewMap h.i()
Global NewList this.test_struct()
 
Procedure add_el(el, text$)
  ;Static Y
     
  If el = #PB_Any
    LastElement(this())
    elID = AddElement(this())
    el = ListIndex(this()) + 1 ; @this()
  Else
    If (el > (ListSize(this()) - 1))
      LastElement(this())
      elID = AddElement(this())
    Else
      SelectElement(this(), el)
      elID = InsertElement(this())
    EndIf
  EndIf
 
 
  If elID
    With this()
      \Width = 20
      \el = el
      h(Str(el)) = elID
      \text$ = text$
     
      Debug "in "+ListIndex(this())+" e "+Str(el)+" h "+Str(@this());+ " y "+Str(\y)
   EndWith
  EndIf
 
   ;Y + 20
EndProcedure
 
 
 
For i=1 To 5
  add_el(-1,"text_"+Str(i))
Next
 
 add_el(0,"text_"+Str(0))
 
 
If OpenWindow(0, 0, 0, 220, 220, "Canvas container example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
    CanvasGadget(0, 10, 10, 200, 200, #PB_Canvas_Container)
    ;ButtonGadget(1, 10, 10, 80, 30, "Clean up")
    CloseGadgetList()
   
   
    If StartDrawing(CanvasOutput(0))
      With this()
        Y=0
        ForEach this()
          Box(0, Y, 200, 19, $B5B5B5)
          DrawText(0,Y,\text$)
          Y+\Width
        Next
      EndWith
      StopDrawing()
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
   
    Until Event = #PB_Event_CloseWindow
  EndIf


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос связанный с NewList
СообщениеДобавлено: Чт мар 23, 2017 9:37 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Получается что заранее нельзя задать координаты? Но вроде здесь работает, спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Вопрос связанный с NewList
СообщениеДобавлено: Чт мар 23, 2017 10:01 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
mestnyi писал(а):
Получается что заранее нельзя задать координаты?
Можно, но тогда при добавлении не в конец списка придется корректировать координаты в других элементах.

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


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

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


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

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


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

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