Главная страница
    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.22 c
8-1154964543
piratesoft
2006-08-07 19:29
2007.04.15
Переходы между слайдами


2-1174590591
CatRin
2007-03-22 22:09
2007.04.15
Как сделать имитация вввода чего0либо с клавиатуры?


15-1174638171
Тема
2007-03-23 11:22
2007.04.15
Как мне запихать бинарный образ в exe?


2-1174564289
tery
2007-03-22 14:51
2007.04.15
Вставка


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