Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.23;
Скачать: CL | DM;

Вниз

Drag блин and Drop   Найти похожие ветки 

 
Viktor Kushnir   (2002-09-08 13:08) [0]

Пытаюсь сделать перетаскивание одного или нескольки item"oв из ListView. Все перетаскивается и ловится все ок.
НО!

Все ок когда перетаскиваю >=2х item"ов, а вот когда только один, то курсор ДИКО тормозит. Наблидается только на TListView. На TListBox - никаких проблем.

при этом когда я тащу несколько элементов, то курсор мыши простой: стрелочка с приямоугольниками, а когода только один элемент к курсору добавляется еще и строчка Caption элемента со всем содержимым.

Как от этого избавится.

З.Ы, никакой разницы нет как управлять перетаскиванием, через своиства DragMode ли, или в ручную через BeginDrag...


 
Viktor Kushnir   (2002-09-08 15:33) [1]

Ну если никто не сталкивался с подобной ситуацией, расскажите хотя бы как контроллировать изображение при перетаскивании.
Я имею ввиду не только курсор, но и надпись под курсором.


 
MBo   (2002-09-09 09:54) [2]

type
TLVDragObject = class(TDragControlObject)
private
FDragImages: TDragImageList;
protected
function GetDragImages: TDragImageList; override;
function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override;
public
Str: String;
destructor Destroy; override;
end;

TForm1 = class(TForm)
LV1: TListView;
Memo1: TMemo;
TreeView1: TTreeView;
procedure Memo1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure FormCreate(Sender: TObject);
procedure LV1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure LV1StartDrag(Sender: TObject; var DragObject: TDragObject);
procedure Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ADragObject: TLVDragObject;

implementation

{$R *.DFM}

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

destructor TLVDragObject.Destroy;
begin
FDragImages.Free;
inherited;
end;

function TLVDragObject.GetDragCursor(Accepted: Boolean; X,
Y: Integer): TCursor;
begin
if Accepted then Result := crNone
else Result := crNo
end;

function TLVDragObject.GetDragImages: TDragImageList;
var
B: TBitmap;
s:string;
i: Integer;
begin
if not Assigned(FDragImages) then
FDragImages := TDragImageList.Create(nil);
Result := FDragImages;
Result.Clear;
s:=ADragObject.Str;
B := TBitmap.Create;
try
B.Height :=B.Canvas.TextHeight(s);
B.Width := B.Canvas.TextWidth(s);
B.Canvas.Brush.Color := clLime;
B.Canvas.FillRect(B.Canvas.ClipRect);
B.Canvas.TextOut(0, 0,s);
Result.Width := B.Width;
Result.Height := B.Height;
i:= Result.AddMasked(B, clLime);
Result.SetDragImage(i, 0, 0);
finally
B.Free;
end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.ControlStyle := Memo1.ControlStyle + [csDisplayDragImage];
end;

procedure TForm1.LV1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if LV1.GetItemAt(x,y)<>nil then
LV1.BeginDrag(False);
end;

procedure TForm1.LV1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
ADragObject := TLVDragObject.Create(LV1);
if Sender=LV1 then
ADragObject.Str := LV1.Selected.Caption+" "+LV1.Selected.SubItems[0]
else
ADragObject.Str := TreeView1.Selected.Text;
DragObject := ADragObject;
end;

procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Memo1.Lines.Text:=ADragObject.Str;
end;


 
Viktor Kushnir   (2002-09-13 09:42) [3]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2002.09.23;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.007 c
1-73744
Jony
2002-09-11 13:15
2002.09.23
Сообщение при форматировании области в Excel


3-73520
RangerBetta
2002-09-02 13:22
2002.09.23
Денежные поля, предсаивелние в InterBase


1-73645
Anar
2002-09-12 18:31
2002.09.23
Работа с системным меню


14-73883
DiamondShark
2002-08-29 12:14
2002.09.23
Приколись, народ!


1-73601
maxim2
2002-09-12 09:45
2002.09.23
Как сделать такое?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский