Форум: "Основная";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];
ВнизDrag&Drop в ListBoxe Найти похожие ветки
← →
Славик (2002-07-07 23:28) [0]Доброго времени суток, мастера! Требуется помощь: как можно менять местами строки в ListBoxe. Знаю, что надо при помощи Drag&Drop, но не получается. Когда тяну строку на новое положение, она просто копируется и переносится вниз списка.
Заранее благодарю за помощь!
← →
MBo (2002-07-08 06:09) [1]Раздел Статьи
← →
Славик (2002-07-08 10:29) [2]Можно по подробней, о какой статье речь?
← →
Andrey007 (2002-07-08 11:23) [3]http://delphi.mastak.ru/articles/dragndrop/index.html
← →
Славик (2002-07-08 12:55) [4]Всё равно не получается: по прежнему при переносе строчка ставится на последнее место. За линк спасибо, всё сделал как там указано, но в принципе ничего не изменилось. Может кто ещё подскажет, в чём дело?
← →
Skier (2002-07-08 12:58) [5]>Славик
Покажи-ка свой код.
← →
Славик (2002-07-08 13:05) [6]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Panel1: TPanel;
Element: TListBox;
Memo1: TMemo;
GroupBox3: TGroupBox;
Layouts: TListBox;
Speichern: TButton;
Loeschen: TButton;
Beenden: TButton;
CheckBox1: TCheckBox;
FontDialog1: TFontDialog;
procedure FormCreate(Sender: TObject);
procedure BeendenClick(Sender: TObject);
procedure ElementClick(Sender: TObject);
procedure LayoutsClick(Sender: TObject);
procedure LoeschenClick(Sender: TObject);
procedure LayoutsDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure LayoutsDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
procedure eigenschaften(Sender: String);
end;
var
Form1: TForm1;
ElemName: String;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;
//////////////////////////////////////////////////////
procedure TForm1.BeendenClick(Sender: TObject);
begin
Form2.Show;
end;
//////////////////////////////////////////////////////
procedure TForm1.ElementClick(Sender: TObject);
begin
Memo1.Clear;
Layouts.Selected[Layouts.ItemIndex]:= false; //Markierung l
← →
Славик (2002-07-08 13:11) [7]Забыл прокоментировать: Еlement(это ListBox1), а Layouts(это ListBox2)
← →
Eugene Lachinov (2002-07-08 13:28) [8]Нужно строчки местами менять в ListBoxе или перемещать из одного в другой ?
← →
Skier (2002-07-08 13:31) [9]>Славик
procedure TForm1.LayoutsDragDrop(Sender, Source: TObject; X, Y: Integer);
var
s: string;
begin
if Source = Layouts then //в if и в else одно и тоже !
begin
//Layouts.Items.Add(Layouts.Items[Layouts.ItemIndex]);
s := Layouts.Items[Layouts.ItemIndex];
Layouts.Items.Delete(Layouts.ItemIndex);
Layouts.Items.Insert(Layouts.ItemAtPos(Point(X, Y), False),
s);
end
else
begin
s := Layouts.Items[Layouts.ItemIndex];
Layouts.Items.Delete(Layouts.ItemIndex);
Layouts.Items.Insert(Layouts.ItemAtPos(Point(X, Y), False),
s);
end;
end;
← →
Славик (2002-07-08 13:33) [10]Мне надо, чтобы строчки менялись местами.
← →
Славик (2002-07-08 13:40) [11]Ребята, спасибочки за помощь, теперь всё работает!!!
← →
Skier (2002-07-08 13:45) [12]>Славик
А где был баг ?
← →
Славик (2002-07-08 14:31) [13]>Skier
Ты ведь сам натолкнул меня на мою ошибку! Проверки у меня не првильно стояли. Мне надо было просто поменять местами if и else проверки. А так как Source у меня может быть только один (Layouts), правильный ответ получился такой:
procedure TForm1.LayoutsDragDrop(Sender, Source: TObject; X, Y: Integer);
var
s: string;
begin
s := Layouts.Items[Layouts.ItemIndex];
Layouts.Items.Delete(Layouts.ItemIndex);
Layouts.Items.Insert(Layouts.ItemAtPos(Point(X, Y), False), s);
end;
← →
Skier (2002-07-08 14:34) [14]>Славик
Рад что помог !
Просто хотел уточнить помогло, то что я накрапал или нет...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c