Главная страница
    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.45 MB
Время: 0.043 c
2-1174633027
Ega23
2007-03-23 09:57
2007.04.15
Наследование фреймов


15-1174380182
ANB
2007-03-20 11:43
2007.04.15
Инсталляшка для БД на оракле


2-1173550329
Washington
2007-03-10 21:12
2007.04.15
CheckBox


2-1174843433
Washington
2007-03-25 21:23
2007.04.15
ListBox


9-1146341758
Pa5ha
2006-04-30 00:15
2007.04.15
Солнце на OpenGL





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