Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Drag and Drop


Автор: Racer 20.7.2009, 17:29
Я хочу реализовать Drag and Drop в своем плеере. Уже сделал на главной форме, но хочу тоже и в плейлист(он отдельным окном).
Я копирую свой код реализации Drag and Drop`а во 2 форму но там компил не хочет компилить. Реализую так:

Код

  private
    { Private declarations }
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;

. . .

procedure TForm1.FormCreate(Sender: TObject);
  DragAcceptFiles(Handle, true);
end;

. . .

procedure TForm1.FormDestroy(Sender: TObject);
  DragAcceptFiles(Handle, true);
end;

. . .
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
const
  maxlen = 254;
var
  h: THandle;
  i, num:integer;
  pchr: array[0..maxlen] of char;
  fname: string;
begin
  h := Msg.Drop;
  Form2.ListBox1.Clear;
  Form2.ListBox2.Clear;

  num:=DragQueryFile(h,Dword(-1),nil,0);
  for i:=0 to num-1 do begin
    DragQueryFile(h,i,pchr,maxlen);
    fname := string(pchr);
    if ((LowerCase(ExtractFileExt(fname)) = ('.wma'))
     or (LowerCase(ExtractFileExt(fname)) = ('.wav'))
     or (LowerCase(ExtractFileExt(fname)) = ('.mp3'))
     or (LowerCase(ExtractFileExt(fname)) = ('.aiff'))
     or (LowerCase(ExtractFileExt(fname)) = ('.mp2'))
     or (LowerCase(ExtractFileExt(fname)) = ('.mp1'))
     or (LowerCase(ExtractFileExt(fname)) = ('.ogg'))
     or (LowerCase(ExtractFileExt(fname)) = ('.midi'))
     or (LowerCase(ExtractFileExt(fname)) = ('.wv'))) then
   begin
    Form2.ListBox2.Items.Add(fname);
    Form2.ListBox1.Items.Add(ExtractFileName(fname));
    Form2.ListBox1.ItemIndex:= 0;
   end;
  end;
  DragFinish(h);

  BASS_ChannelStop(stream);
  stream := BASS_StreamCreateFile(False,
  Pchar(Form2.ListBox2.Items.Strings[0]), 0, 0, 0);
  BASS_ChannelPlay(stream, True);
  sSpeedButton2.ImageIndex:= 1;
  percent:= (BASS_ChannelGetLength(stream, BASS_POS_BYTE)/ 100000);
  was_playing:= True;
  Form1.Caption:= ('Walkman- '+ExtractFileName(Form2.ListBox1.Items.Strings[0]));
  length:= BASS_ChannelGetLength(stream, BASS_POS_BYTE);
  sSpeedButton2.Enabled:= True;
  sSpeedButton3.Enabled:= True;
  sSpeedButton4.Enabled:= True;
  sSpeedButton5.Enabled:= True;
  PositionBar.Enabled:= True;
  sSpeedButton2.Hint:= 'Pause';
  sSpeedButton2.ShowHint:= True;
  sSpeedButton3.ShowHint:= True;
  sSpeedButton4.ShowHint:= True;
  sSpeedButton5.ShowHint:= True;
  stoped_by_user:= False;
  track:= 0;
  Timer3.Enabled:=True;

  Form1.AdvAlertWindow1.Hide;
  AdvAlertWindow1.AlertMessages.Clear;
  AdvAlertWindow1.AlertMessages.Add.Text.Text := ('Now playing:<br>'+'<b>'+
  Form2.ListBox1.Items.Strings[0]+'</b>'+'<hr><br><b>Walkman</b>');
  Form1.AdvAlertWindow1.Show;
end;



А еще у формы DragMode:= dmAutomatic.
Так все работает, но если кидаю код (все 1 в1) во 2 форму то не хрена не компилится

Автор: Nofate 21.7.2009, 12:58
А из кода второй формы первая видна? И с  какой ошибкой хотя бы не компилится?

Автор: Racer 21.7.2009, 17:19
Ругается так(см. рисунки):
http://radikal.ru/F/i042.radikal.ru/0907/78/cf4dfc864730.jpg.html
http://radikal.ru/F/s11.radikal.ru/i184/0907/34/ce3831ebefc8.jpg.html

Цитата

А из кода второй формы первая видна?

Да, без этого никак- плейлист юзает меинформ и наоборот

Автор: Racer 21.7.2009, 19:12
Все, разобрался, забыл подключить ShellApi.
Тема закрыта 

Автор: Racer 22.7.2009, 21:08
Тема не закрыта. Я забыл ранее сделать чтоб если юзверь дрегит всю папку а не группу, что оно тоже работало. Как реализовать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)