imho.ws |
![]() |
![]() |
![]() |
# 1 |
Guest
Сообщения: n/a
|
Перемещение элементов в ListBox (Delphi)
Здравствуйте!
Такой вопрос. Есть код для перемещения элементов в 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,NewIndex); end; False: begin NewIndex := lIndex - 1; personslist.Items.Exchange(lIndex,NewIndex); 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; |
![]() |
# 2 |
Newbie
Регистрация: 16.11.2002
Адрес: планета Земля
Сообщения: 23
![]() |
procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin DoMoveListItem(TControl(Sender).Tag); end; procedure TMainForm.personslistKeyPress(Sender: TObject; var Key: Char); begin if key = '+' then DoMoveListItem(1); if key = '-' then DoMoveListItem(-1); end; procedure TMainForm.DoMoveListItem(aKind: integer); begin with personslist do begin if ((ItemIndex > 0) and (AKind = -1)) or ((ItemIndex < Pred(Count)) and (AKind= 1)) then Items.Exchange(ItemIndex,ItemIndex+AKind); end; end; SpeedButton1.Tag=-1 , SpeedButton1.Tag=1 SpeedButton1.OnClick=SpeedButton1Click; SpeedButton2.OnClick=SpeedButton1Click; Перемещение стрелками вверх/низ (перемещ. данных не разумно) Перемещение данных клавишами +/- |
![]() |