![]() |
|
|
#1
|
|||
|
|||
|
Предположим на форме ListBox и 2 Кнопки.
В листбоксе содержаться какието строки. После выделения любой строки и нажатии на кнопку 1 к примеру, она поднимается, а на кнопку 2 - опускается. Тоесть как можно переместить строку "вниз/вверх". И еще как можно мышкой перетаскивать. заранее спасибо! |
|
#2
|
|||
|
|||
|
Перемещение:
Код:
type
TLBMove = (mUp, mDown);
procedure ListBoxMoveItem(AListBox : TListBox; ADirection : TLBMove);
var
NewIdx : Integer;
begin
If ADirection = mUp
Then NewIdx := AListBox.ItemIndex - 1
Else NewIdx := AListBox.ItemIndex + 1;
If (NewIdx >= 0) And (NewIdx < AListBox.Items.Count) Then
Begin
AListBox.Items.Exchange(AListBox.ItemIndex,NewIdx);
AListBox.ItemIndex := NewIdx;
End;
end;Перемещение мышом - используй внутренний Drag'n'drop. Соотв. надо реализовать обработчики нужных событий: OnDragDrop, DragOver. В первом, по координатам вычисляется новый индекс итема, далее вызываешь Exchange. Во втором надо вернуть True, когда итем проносится над этим лист боксом. И будет тебе счастье! |
|
#3
|
|||
|
|||
|
Спасибо, но чет както непонятн
тут 1 процедура, а нельзя на кнопки указать? Я понимаю что вопросы нубовские, но что поделать как на кнопки поставить? |
|
#4
|
|||
|
|||
|
Вот, только вчера програмил
:Для перемещения вверх: Код:
if (ListBox2.ItemIndex>0) then
ListBox2.Items.Exchange(ListBox2.ItemIndex, ListBox2.ItemIndex-1);Для перемещения вниз соответственнно: Код:
if (ListBox2.ItemIndex<(ListBox2.Items.Count-1)) and (ListBox2.ItemIndex>=0) then
// если не проверять на >=0, то при ItemIndex = -1 получится фигня. :)
ListBox2.Items.Exchange(ListBox2.ItemIndex, ListBox2.ItemIndex+1);Items.Count - количество строк в листбоксе. ItemIndex возвращает номер выделенной строчки в листбоксе. Номер первой строчки = 0. номер последней строчки = Items.Count-1. Если ни одна строчка не выделена, то = -1. if - здесь это проверка на крайние значения, без этого при слишком большом или слишком маленьком ItemIndex и нажатой кнопке выскочит ошибка index out of bound(). Одновременно проверяется, выделена ли вообще строчка. А вообще, чаще читай встроенный хелп Дельфей. Там нет именно этого кода, но догадаться, как это сделать, можно. Да и быстрее самому разобраться, чем ждать ответа от доброго дяди. ![]() |
|
#5
|
|||
|
|||
|
Спасибо тебе огромное...
всем спасибо вообще большое что помогли.. ![]() |