IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Перемещение элементов в ListBox (Delphi) (http://www.imho.ws/showthread.php?t=117418)

ekodov 30.03.2007 18:46

Перемещение элементов в 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;

nsm97 31.03.2007 09:08

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;
Перемещение стрелками вверх/низ (перемещ. данных не разумно)
Перемещение данных клавишами +/-

ekodov 31.03.2007 11:44

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


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

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