![]() |
|
#1
|
||||
|
||||
![]() Как управлять элементами листбокс с помощью кнопок расположенных на форме? Например передвинуть один или несколько выделенных элементов кнопками "вверх" или "вниз", переместить элементы сразу вверх или вниз списка или удалить из списка.
|
#2
|
|||
|
|||
![]() Код:
ListBox1.ItemIndex:=ListBox1.ItemIndex+1; |
#3
|
||||
|
||||
![]() Переместить выделенный в конец
Код:
if ListBox1.ItemIndex>0 then ListBox1.Items.Move(ListBox1.ItemIndex, ListBox1.Count-1); в начало Код:
if ListBox1.ItemIndex>0 then ListBox1.Items.Move(ListBox1.ItemIndex, 0); удалить Код:
if ListBox1.ItemIndex>0 then ListBox1.Items.Delete(ListBox1.ItemIndex); вверх Код:
if ListBox1.ItemIndex>0 then ListBox1.Items.Move(ListBox1.ItemIndex, ListBox1.ItemIndex-1); вниз Код:
if ListBox1.ItemIndex>0 then ListBox1.Items.Move(ListBox1.ItemIndex, ListBox1.ItemIndex+1); это если фокус сохранять нужно (сдвиг вниз) Код:
var i:Word; begin if ListBox1.ItemIndex>0 then begin i:=ListBox1.ItemIndex; ListBox1.Items.Move(i, i-1); ListBox1.Selected[i-1]:=true; end; end; Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#4
|
||||
|
||||
![]() Цитата:
это сдвиг фокуса, но не Item-a ![]() Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#5
|
|||
|
|||
![]() Цитата:
Вопрос не внимательно прочитал |
#6
|
||||
|
||||
![]() Спасибо! Все работает.
Как быть, если надо передвинуть несколько строк сразу? |
#7
|
||||
|
||||
![]() Еще вопросик. Как переименовать файл на диске, используя значение из элемента листбокса, в котором содержится полный адрес включая расширение.
Последний раз редактировалось timeless, 28.06.2008 в 03:39. |
#8
|
|||
|
|||
![]() Вообще, переименовать файл можно командой Rename. Одно из имен у тебя уже готовое лежит в листбоксе. Второе надо сконструировать.
Код:
var OldName, NewName : String; begin OldName := ListBox1.Items[ListBox1.ItemIndex]; // Get current name If InputQuery('Rename','New name:',NewName) Then // Ask user for new name Begin NewName := ExtractFilePath(OldName) + // path ChangeFileExt(NewName,ExtractFileExt(OldName)); // New file name and save orig. extention If Rename(OldName,NewName) Then ListBox1.Items[ListBox1.ItemIndex] := NewName // Update current name Else ShowMessage('Error renaming file.'); End; end; Сорри, коменты по английски. Идея такая. В листбоксе лежит полное имя файла (с путем). Переименовываем выбранный файл. Спрашиваем новое имя у пользователя. Если получилось переименовать, то обновляем инфу в листбоксе, иначе - сообщение об ошибке. |
#9
|
||||
|
||||
![]() что значит несколько строк? несколько выделенных? начиная с какой-то позиции или что?
Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#10
|
||||
|
||||
![]() lmikle,
Спасибо, сделал по вашему примеру. Ferra, Угу, нескольких выделенных. Пользователь выделяет несколько строк, и, при нажатии кнопки "вверх", они все перемещаются вверх на одну позицию. Аналогично с кнопками "в начало" и "удалить" и т.д. Подозреваю будут проблемы, если строки выделены через одну. Алгоритм в голове есть, но он слишком громоздкий, и я не знаю как обработать множественное выделение. |
#11
|
|||
|
|||
![]() Если передвижка идет на 1 позицию, то особых проблем нет.
Если двигаем вверх, то циклом от 0 до Count-1 двигаем поочереди все строки на единичку вверх (используя метод Exchange и контролируя, что строка и так не является первой). Если двигаем вниз, то циклом от Count-1 до 0 двигаем поочереди все строки на единичку вниз (используя метод Exchange и контролируя, что строка и так не является последней). Пример нужен или сам справишся? |
#12
|
||||
|
||||
![]() Пожалуй, нужен пример.
|
#13
|
|||
|
|||
![]() О, господи!!!
Код:
procedure MoveItemsUp(AListBox : TListBox); var I : Integer; begin If AListBox.Items.Count > 1 Then For I := 1 To AListBox.Items.Count-1 Do If Not AListBox.Selected[I-1] Then AListBox.Exchange(I,I-1); end; Вниз аналогично, только цикл в обратном напрмвлении и проверяешь I+1. Вроде должно работать. |
#14
|
||||
|
||||
![]() Цитата:
Последний раз редактировалось timeless, 01.07.2008 в 13:39. |
#15
|
||||
|
||||
![]() И еще вопрос, если я не совсем надоел
![]() |