Главная страница
    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.039 c
1-1171990047
webpauk
2007-02-20 19:47
2007.04.15
Правильность уничтожения


15-1174423436
koha
2007-03-20 23:43
2007.04.15
Подскажите программу которая может показать статус драверов


2-1174912697
Mechanikus
2007-03-26 16:38
2007.04.15
minimize - maximize


2-1174742156
MASTAFA
2007-03-24 16:15
2007.04.15
Помогите с Паскалем. Нужно построить правильный 5-угольник.


15-1174466350
Курдль
2007-03-21 11:39
2007.04.15
КПК - совсем не похож на ПК.





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