![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Drag and Drop [D7, XP]
GeLLeR © (2007-03-25 10:58:00)Привет всем!
Я хочу сделать перетаскивание например с рабочего стола в 2 листбокса. Раньше я писал прогу
и там добавлял всё в 1 листбокс, вот код:
procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
procedure TMainForm.DropFiles(var Mes: TWmDropFiles);
var
N, i: Integer;
FlNm: String;
begin
N := DragQueryFile(Mes.Drop, $FFFFFFFF, nil, 0) - 1;
TRY
for i := 0 to N do
begin
SetLength(FlNm, 100000);
DragQueryFile(Mes.Drop, i, PChar(FlNm), 100000);
FlNm := PChar(FlNm);
ListBox1.Items.Add(FlNm);
end;
FINALLY
DragFinish(Mes.Drop);
END;
end;
Собственно вопрос- как сделать чтобы если я перетаскиваю в 1 листбокс, добавлялось в 1, а
если во 2, то во 2???
Спасибо.
RASkov (2007-03-25 12:28:00) [1]В [2] еще есть места где можно подправить, думаю сам разберешься....
GeLLeR (2007-03-25 12:07:00) [2]Спасибо
RASkov (2007-03-25 11:51:00) [3]Т.е лучше вот так:
procedure AddFile(const FL: String; Lst: TWinControl);
begin
if Assigned(Lst) and (Lst is TListBox) then (Lst as TListBox).Items.Add(FL) else
MainForm.ListBox1.Items.Add(FL);
end;
procedure TMainForm.DropFiles(var Mes: TWmDropFiles);
var N, I: Integer;
FlNm: String;
L: TWinControl;
P: TPoint;
begin
N:=DragQueryFile(Mes.Drop, $FFFFFFFF, nil, 0)-1;
I:=0;
GetCursorPos(P);
L:=FindControl(WindowFromPoint(P));
try
for I:=0 to N do begin
SetLength(FlNm, MAX_PATH);
DragQueryFile(Mes.Drop, I, PChar(FlNm), Length(FlNm));
FlNm:=PChar(FlNm);
AddFile(FlNm, L);
end;
if N>=0 then AddFile('<<***Добавлено '+IntToStr(N+1)+' файл(а,ов)***>>', L);
finally DragFinish(Mes.Drop); end;
end;
В предыдущем примере будет ошибка если бросить не на листбокс...
RASkov (2007-03-25 11:37:00) [4]
procedure AddFile(const FL: String; Lst: TListBox);
begin
if Assigned(Lst) then Lst.Items.Add(FL) else
Form1.ListBox1.Items.Add(FL);
end;
procedure TMainForm.DropFiles(var Mes: TWmDropFiles);
var N, i: Integer;
FlNm: String;
L: TListBox;
P: TPoint;
begin
N:=DragQueryFile(Mes.Drop, $FFFFFFFF, nil, 0)-1;
I:=0;
GetCursorPos(P);
L:=TListBox(FindControl(WindowFromPoint(P)));
try
for I:=0 to N do begin
SetLength(FlNm, MAX_PATH);
DragQueryFile(Mes.Drop, I, PChar(FlNm), MAX_PATH);
FlNm:=PChar(FlNm);
AddFile(FlNm, L);
end;
if N>=0 then AddFile('<<***Добавлено '+IntToStr(N+1)+' файл(а,ов)***>>', L);
finally DragFinish(Mes.Drop); end;
end;
Еще так же посмотри DragQueryPoint.