imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 30.03.2007, 18:46     # 1
ekodov
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;
 
Старый 31.03.2007, 09:08     # 2
nsm97
Newbie
 
Аватар для nsm97
 
Регистрация: 16.11.2002
Адрес: планета Земля
Сообщения: 23

nsm97 Путь к славе только начался
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;
Перемещение стрелками вверх/низ (перемещ. данных не разумно)
Перемещение данных клавишами +/-
nsm97 вне форума  
Старый 31.03.2007, 11:44     # 3
ekodov
Guest
 
Сообщения: n/a

Спасибо за ответ. Уже разобрался.
 


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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.