Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.051 c
15-1174410324
@!!ex
2007-03-20 20:05
2007.04.15
Препод сказал: Возражаю.


15-1174245266
wl
2007-03-18 22:14
2007.04.15
а где?


15-1174302787
Клара
2007-03-19 14:13
2007.04.15
Обращение к записям


15-1173783456
Костя
2007-03-13 13:57
2007.04.15
Вузы


15-1174297229
WG
2007-03-19 12:40
2007.04.15
После переустановки офиса глючит OLE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский