Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.04.2008, 20:57
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию ListBox

Предположим на форме ListBox и 2 Кнопки.

В листбоксе содержаться какието строки.

После выделения любой строки и нажатии на кнопку 1 к примеру, она поднимается, а на кнопку 2 - опускается.

Тоесть как можно переместить строку "вниз/вверх". И еще как можно мышкой перетаскивать. заранее спасибо!
Ответить с цитированием
  #2  
Старый 28.04.2008, 21:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Перемещение:

Код:
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  
Старый 28.04.2008, 22:01
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию ..

Спасибо, но чет както непонятн

тут 1 процедура, а нельзя на кнопки указать? Я понимаю что вопросы нубовские, но что поделать

как на кнопки поставить?
Ответить с цитированием
  #4  
Старый 29.04.2008, 07:45
Lazy_Alex Lazy_Alex вне форума
Прохожий
 
Регистрация: 29.04.2008
Сообщения: 1
Репутация: 10
По умолчанию

Вот, только вчера програмил :

Для перемещения вверх:

Код:
  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  
Старый 29.04.2008, 20:29
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию !

Спасибо тебе огромное...

всем спасибо вообще большое что помогли..
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter