![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение в ListBox [D7, WinXP]
kodov © (2007-03-26 15:45:00)Здравствуйте!
Такой вопрос.
Как организовать перемещение элементов ListBox? У меня стоят рядом с ListBox две кнопки - Вниз и Вверх.
С перемещением вверх я уже разобрался, теперь надо вниз. При чем, когда строка доходит до последнего элемента, то выходит сообщение "Хотите переместить элемент на первую строку?". Если да, то переместить.
Я тут набросал примерный код, но он не работает.
procedure TMainForm.SpeedButton2Click(Sender: TObject);
var otv:word;
begin
if personslist.Itemindex=-1 then showmessage ('Выберите элемент');
if personslist.ItemIndex=personslist.Items.Count-1 then
begin
otv := MessageBox(handle,PChar('Этот элемент стоит последним в списке. Хотите переместить его на первое место?'), PChar('Вопрос'), 52);
if otv=IDYES
then
begin
edit3.Text:=inttostr(personslist.Items.Count);
edit4.text:=FloatToStr((StrToFloat(edit3.text)-1));
edit2.Text:=inttostr(personslist.ItemIndex);
personslist.Items.Move(personslist.ItemIndex,personslist.Itemindex-strtoint(edit4.text));
end;
if otv=IDNO
then personslist.ItemIndex:=0;
end ;
if personslist.ItemIndex>0 then
edit2.Text:=inttostr(personslist.ItemIndex);
personslist.Items.Move(personslist.ItemIndex,personslist.ItemIndex+1);
personslist.ItemIndex:=strtoint(edit2.Text)+1;
end;
Помогите, пожалуйста разобраться.
RASkov (2007-03-26 22:26:00) [1]> [4] Loginov Dmitry © (26.03.07 22:17)
:)
Я над этим тоже поугорал, но после прикрутки ричидита для поиска по листбоксу... "Это нормально" © Пираньи
Loginov Dmitry (2007-03-26 22:17:00) [2]Ты ж самую фичу забыл:
StrToFloat(FloatToStr(StrToFloat(FloatToStr(..(..(...)..)..))))
RASkov (2007-03-26 22:10:00) [3]> [1] kodov (26.03.07 16:07)
Как-то у тебя все осложнено на мой взгляд, хотя я могу ошибиться....
Две SpeedButton с одним общим обработчиком OnClick. У одной Tag=-1(перемещение вверх) у второй Tag=1(соответственно перемещение вниз)
Один обработчик для обеих кнопок:
procedure TForm1.SpeedButton1Click(Sender: TObject);
const Str: array [Boolean] of String = ('Переместить в конец?', 'Переместить в начало?');
var N: Integer; F: Boolean;
begin
if personslist.ItemIndex < 0 then Exit;
N:=personslist.ItemIndex+(Sender as TControl).Tag;
if N = personslist.Count then begin N:=0; F:=True; end
else if N < 0 then begin N:=personslist.Count-1; F:=True; end else F:=False;
if F and (MessageDlg(PChar(Str[N=0]), mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then Exit;
personslist.Items.Move(personslist.ItemIndex, N);
personslist.ItemIndex:=N;
end;
_Knight_ (2007-03-26 16:18:00) [4]Тогда один совет... заметь, что FloatToStr читается гораздо легче чем inttostr... ;)
kodov (2007-03-26 16:07:00) [5]Уже разобрался.