WM_DROPFILES w Win7.

0

Witam,

Mam problem, który dość mnie zaskoczył. Dotychczasz, pracując na starszych systemach, wszystko działało ok, ale w win7 już nie chce.

Zwyczajnie program nie reaguje na komunikat WM_DROPFILES...

    procedure DropFiles(var msg: TMessage ); message WM_DROPFILES;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(form1.Handle, True);
end;

procedure TForm1.DropFiles(var msg: TMessage ); 
var
  i, count  : integer; 
  dropFileName : array [0..511] of Char;
  MAXFILENAME: integer; 
begin 
  MAXFILENAME := 511;

  messagebox(0,'w srodku','',0);

  count := DragQueryFile(msg.WParam, $FFFFFFFF, dropFileName, MAXFILENAME); 

  for i := 0 to count - 1 do 
  begin 
    DragQueryFile(msg.WParam, i, dropFileName, MAXFILENAME);


  end; 

  DragFinish(msg.WParam); 
end;

XP - działa idealnie. Win7 - brak reakcji (nawet ten messagebox kontrolny się nie wyświetla)...

Ktoś wie jaka może być przyczyna?

0

Mistrzostwo świata :D

To było dokładnie to czego szukałem. A wiec dla potomnych kod, który należy uruchomić pod systemem Vista / Windows 7, żeby móc używać drag&drop w stosunku do plików:

const
  WM_COPYGLOBALDATA = 73;
  MSGFLT_ADD = 1;
var
  ChangeWindowMessageFilter: function (msg: Cardinal; dwFlag : Word): BOOL; stdcall;
begin
  @ChangeWindowMessageFilter :=GetProcAddress(LoadLibrary('user32.dll'),'ChangeWindowMessageFilter');

  if @ChangeWindowMessageFilter<>nil then //jeśli mamy adres, oznacza, że program uruchomiono pod systemem Widndows 7 lub pod Vistą
  try
  ChangeWindowMessageFilter(WM_COPYGLOBALDATA , MSGFLT_ADD);
  ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
  except

  end;
0

//jeśli mamy adres, oznacza, że program uruchomiono pod systemem Widndows 7 lub pod Vistą

bzdura.
wersje systemu okreslasz GetVersionEx().

jesli GetProcAddress() zwroci 0, a GetVersionEx wskaze ze jest to vista lub wyzej to po prostu nic nie robisz, i obsluge bledu zostawiasz na potem.

0

No cóż. Ale wszelkie moje wymogi spełnia.

Natomiast chcąc trzymać się ścisłości - masz rację.

1 użytkowników online, w tym zalogowanych: 0, gości: 1