Изменение положения элементов поля

Тема в разделе "Lotus - Программирование", создана пользователем Hravn, 8 апр 2008.

  1. Hravn

    Hravn Гость

    Здравствуйте.

    Возникла следующая задача.
    Есть computed поле на форме (имена сотрудников, которые должны согласовать документ). Пользователь заполняет его, выбирая в диалоге несколько документов (PickListCollection).
    Для согласования важен порядок, в котором эти имена храняться в поле (сначала один согласует, потом другой итд.)
    Меняться этот порядок, соответственно тоже может.

    вопрос: можно ли как-нибудь сделать, чтобы пользователь мог нажимая, например, кнопки "вверх", "вниз" менять порядок в котором расположены значения в поле?

    пока единственное, что пришло в голову - это без всяких кнопок, просто сделать dialogbox, и пусть пользователь выбирает в нужном порядке, по-одному, и жмет ОК. Выбранные значения (имена) из списка в dialogbox убираются..

    p.s. про первоначальное заполнение пока можно не думать, будем говорить только для случая, когда значения в поле уже есть и надо изменить их порядок.
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Допустим, у нас есть уже аррай (возьми из айтема, работать с item.values - себя не любить)
    Вот тебе процедурина для сортиовки.

    Можешь чё-то менять, если хочешь, но, в целом, она работает как надо.
    Про параметры, если надо спрашивай.

    На каждый вызов возвращает аррай со свапнутыми элементами.

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>Const MOVE_UP = 1
    Const MOVE_DOWN= 2

    Function ToArray(Value As Variant) As Variant
    On Error Goto Errh

    If Isempty(Value) Then Exit Function

    Dim rv As Variant

    If Isarray(Value) Then
    rv = Value
    Else
    Redim TmpArray(0)
    TmpArray(0) = Value
    rv = TmpArray
    End If

    ToArray = rv

    Exit Function
    Errh:
    'Call ErrHandler
    Exit Function
    End Function

    Function ArrayMoveElement(Array As Variant, Element As Variant, Direction As Integer, Cycle As Boolean, Swap As Boolean) As Variant
    'in not swap - deplace
    On Error Goto Errh

    ArrayMoveElement = Array

    Const CompareOption = 5

    If Isempty(Array) Then Exit Function
    If Isempty(Element) Then Exit Function
    If Isarray(Element) Then Exit Function
    If Isnull(Arraygetindex(Array, Element, CompareOption)) Then Exit Function

    Dim Arr As Variant
    Arr = ToArray(Array)

    Dim Lbnd As Long
    Dim Ubnd As Long
    Lbnd = Lbound(Arr)
    Ubnd = Ubound(Arr)

    Dim Pos As Long
    Pos = Clng(Arraygetindex(Array, Element, CompareOption))

    Dim NewPos As Long

    Dim ForStart As Integer
    Dim ForEnd As Integer
    Dim ForStep As Integer

    Select Case Direction
    Case MOVE_UP:
    If Pos = Lbnd Then
    If Cycle Then NewPos = Ubnd Else NewPos = Pos
    Else
    NewPos = Pos - 1
    End If
    ForStart = Lbnd
    ForEnd = Ubnd
    ForStep = 1
    Case MOVE_DOWN:
    If Pos = Ubnd Then
    If Cycle Then NewPos = Lbnd Else NewPos = Pos
    Else
    NewPos = Pos + 1
    End If
    ForStart = Ubnd
    ForEnd = Lbnd
    ForStep = -1
    End Select

    Dim Buffer As Variant
    Dim i As Integer

    If Swap Then
    Buffer = Arr(NewPos)
    Arr(NewPos) = Arr(Pos)
    Arr(Pos) = Buffer
    Else
    Buffer = Arr(ForStart) 'only for deplace
    For i = ForStart To ForEnd Step ForStep
    If i <> ForEnd Then Arr(i) = Arr(i + ForStep) Else Arr(i) = Buffer
    Next
    End If

    ArrayMoveElement = Arr

    Exit Function
    Errh:
    'Call ErrHandler
    Exit Function
    End Function[/CODE]
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Можно использовать ListBox. Список людей — это его список выбора. Выбранный человек — значение ListBox'a. Рядом кнопки Вверх/Вниз, код тривиальный: найти в массиве индекс элемента, поменять местами два элемента массива, обновить, указан выше.
     
Загрузка...

Поделиться этой страницей