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

Вниз

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

 
GeLLeR ©   (2007-03-25 10:58) [0]

Привет всем!
Я хочу сделать перетаскивание например с рабочего стола в 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 11:37) [1]

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.


 
RASkov   (2007-03-25 11:51) [2]

Т.е лучше вот так:

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;


В предыдущем примере будет ошибка если бросить не на листбокс...


 
GeLLeR ©   (2007-03-25 12:07) [3]

Спасибо


 
RASkov   (2007-03-25 12:28) [4]

В [2] еще есть места где можно подправить, думаю сам разберешься....



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

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

Наверх




Память: 0.47 MB
Время: 0.051 c
15-1174164140
Cerberus
2007-03-17 23:42
2007.04.15
Перевод справки по Win Api


15-1174296023
Чапаев
2007-03-19 12:20
2007.04.15
Как запретить...


3-1169455673
Vlad Oshin
2007-01-22 11:47
2007.04.15
Узнать логин соединения чужого приложения на этой же машине


15-1174477063
zdm
2007-03-21 14:37
2007.04.15
Создание сайта


2-1174747778
Malik
2007-03-24 17:49
2007.04.15
Вот про TStrings