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;
موفق باشید
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.