Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение в 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]

Уже разобрался.


Наверх

Титульная страница Поиск, карта сайта Написать письмо