Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2007, 18:40   #1
kodov
 
Регистрация: 19.03.2007
Сообщений: 8
По умолчанию Перемещение элементов в ListBox

Здравствуйте!
Такой вопрос. Есть код для перемещения элементов в ListBox. Я хочу перемещать элементы клавишами вверз и вниз, а также кнопками speedbutton1 и speedbutton2 (вверх и вниз соответственно). Также мне нужно, чтобы когда элемент доходит ко конца, то выдавалось сообщение, типа, Хотите переместить на первую или на последнюю строку.
Но мой код немного глюкавит. Помогите, пожалуйста разобраться.
Вот сам код:

private
procedure DoMoveListItem(AKind: Boolean);
-------------------------------------------------
procedure TMainForm.DoMoveListItem(AKind: Boolean);
var lIndex, NewIndex: Integer;
begin lIndex := personslist.ItemIndex;
try if (lIndex >= 0) and (lIndex < personslist.Count) then
begin case AKind of True:
begin NewIndex := lIndex + 1;
personslist.Items.Exchange(lIndex,N ewIndex);
end;
False:
begin
NewIndex := lIndex - 1;
personslist.Items.Exchange(lIndex,N ewIndex);
end;
end;
personslist.ItemIndex:= lIndex;
end;
except
end;
end;
procedure TMainForm.personslistKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = vk_up then DoMoveListItem(True);
if key = vk_down then DoMoveListItem(False);
end;
procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin personslist.ItemIndex := personslist.ItemIndex -1;
DoMoveListItem(True);
end;
procedure TMainForm.SpeedButton2Click(Sender: TObject);
begin personslist.ItemIndex := personslist.ItemIndex + 1;
DoMoveListItem(false);
end;
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if key = vk_up then
DoMoveListItem(True);
if key = vk_down
then DoMoveListItem(False);
end;

Последний раз редактировалось kodov; 30.03.2007 в 18:43.
kodov вне форума Ответить с цитированием
Старый 30.03.2007, 21:26   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
try if (lIndex >= 0) and (lIndex < personslist.Count) then
begin case AKind of True:
begin NewIndex := lIndex + 1;
А что будет, если lIndex - последний? Ведь последний индекс равен personslist.Count-1...
Цитата:
False:
begin
NewIndex := lIndex - 1;
А что будет, если lIndex - первый? Ведь первый индекс равен 0...
mihali4 вне форума Ответить с цитированием
Старый 30.03.2007, 23:24   #3
RSLoader
_________
Пользователь
 
Аватар для RSLoader
 
Регистрация: 27.03.2007
Сообщений: 69
По умолчанию

Неохота разбираться с твоим кодом, посмотри, может, поймёшь свою ошибку. здесь стрелками вверх-вниз меняется значение элемента соответственно на верхнее и нижнее. Если элемент первый, то меняет на последний, и наоборот.
Код:
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ListBox1.ItemIndex=-1 then ListBox1.ItemIndex:=0;
  case Key of
       VK_UP:if ListBox1.ItemIndex=0 then
             begin
               ListBox1.Items.Exchange(0,ListBox1.Count-1);
               ListBox1.ItemIndex:=ListBox1.Count-1;
             end
             else ListBox1.Items.Exchange(ListBox1.ItemIndex,ListBox1.ItemIndex-1);
       VK_DOWN:if ListBox1.ItemIndex=ListBox1.Count-1 then
               begin
                 ListBox1.Items.Exchange(ListBox1.ItemIndex,0);
                 ListBox1.ItemIndex:=0;
               end
               else ListBox1.Items.Exchange(ListBox1.ItemIndex,ListBox1.ItemIndex+1);
  end;
  Key:=0;
end;

Последний раз редактировалось RSLoader; 30.03.2007 в 23:28.
RSLoader вне форума Ответить с цитированием
Старый 31.03.2007, 11:44   #4
kodov
 
Регистрация: 19.03.2007
Сообщений: 8
По умолчанию

Спасибо за ответ. Уже разобрался.
kodov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
перемещение формы Черничный Общие вопросы Delphi 11 10.12.2009 11:06
Непрерывное перемещение элементов по ListBox kodov Общие вопросы Delphi 2 12.08.2008 20:07
количество элементов матрицы, больших среднего арифмитического всех её элементов finch Помощь студентам 3 27.08.2007 15:48
Перемещение элементов в TreeView ????? Demien Компоненты Delphi 3 17.08.2007 15:45