PDA

View Full Version : سوال: در مورد CheckListBox



سیروس مقصودی
شنبه 30 دی 1391, 08:48 صبح
با سلام
من در برنامه ام در گزارشات , انتخاب فیلدهای مورد نظر را جهت تهیه گزارش , در اختیار کاربر گذاشته ام و برای اینکار از CheckListBox استفاده میکنم و کاربر هر فیلدی را که میخواهد انتخاب کرده و گزارش مورد نظر را تهیه میکند . من کاری که میخواهم انجام دهم این است که بعد از اینکه کاربر فیلدها را انتخاب کرد بتواند ترتیب قرار گرفتن فیلدها را نیز خود تعیین کند بدین صورت که موس را روی فیلد مورد نظر برده و آن فیلد را گرفته و به هر ردیفی که خودش میخواهد بتواند ببرد (Drag & Drop)
من چگونه میتوانم اینکار را انجام دهم .

با تشکر ...

saeed6162
شنبه 30 دی 1391, 10:19 صبح
براي drag drop كردن آيتم هاي چك ليست باكس از ميشه اينطوري عمل كرد :
var
Form1: TForm1;

StartingPoint : TPoint;

implementation

{$R *.dfm}

procedure TForm1.CheckListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
DropPosition, StartPosition: Integer;
DropPoint: TPoint;
begin
DropPoint.X := X;
DropPoint.Y := Y;
with Source as TCheckListBox do
begin
StartPosition := ItemAtPos(StartingPoint,True) ;
DropPosition := ItemAtPos(DropPoint,True) ;

Items.Move(StartPosition, DropPosition) ;
end;
end;

procedure TForm1.CheckListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source = CheckListBox1;
end;

procedure TForm1.CheckListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
StartingPoint.X := X;
StartingPoint.Y := Y;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CheckListBox1.DragMode := dmAutomatic;
end;

MohsenB
شنبه 30 دی 1391, 10:25 صبح
سلام

اینم میشه :

procedure TForm1.FormCreate(Sender: TObject);
begin
lv1.DragMode := dmAutomatic;
end;

procedure TForm1.lv1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
currentItem, nextItem, dragItem, dropItem : TListItem;
begin
if Sender = Source then begin
with TListView(Sender) do begin
dropItem := GetItemAt(X, Y);
currentItem := Selected;
while currentItem <> nil do begin
nextItem := GetNextItem(currentItem, SdAll, [IsSelected]);
if Assigned(dropItem) then
dragItem := Items.Insert(dropItem.Index)
else
dragItem := Items.Add;
dragItem.Assign(currentItem);
currentItem.Free;
currentItem := nextItem;
end;
end;
end;
end;

procedure TForm1.lv1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean);
begin
Accept := (Sender = lv1);
end;

موفق باشید