Witajcie,
Utknąłem i mam nadzieje, że mi coś podpowiecie. Napisałem sobie w domu kawałek skryptu, który umożliwia Drag&Drop pliku do aplikacji. Apka działa na vcl pod windws w oparciu o DragQueryFile na Windows7 bez problem. Niestety na kompie z windows7 ale z kontem domenowym funkcja DragQueryFile zawsze zwraca 0 nawet jeśli przeciągam kilka plików. Sprawdziłem nawet debuggując na tym docelowym kompie. Używam czegoś takiego:
procedure TfmMain.SetDragAndDropOnSystemsWIthUAC(Wnd : HWND; IsEnabled : boolean);
type
TChangeWindowMessageFilter = function(Msg : Cardinal; Action : Word) : Bool; stdcall;
const
Msg_Add = 1;
WM_COPYGLOBALDATA = $49;
var
DllHandle : THandle;
ChangeWindowMessageFilter : TChangeWindowMessageFilter;
begin
DragAcceptFiles(Wnd, IsEnabled);
DllHandle := LoadLibrary(user32);
if DllHandle > 0 then
begin
ChangeWindowMessageFilter := GetProcAddress(DllHandle, 'ChangeWindowMessageFilter');
if Assigned(ChangeWindowMessageFilter) then
begin
ChangeWindowMessageFilter(WM_DROPFILES, Msg_Add);
ChangeWindowMessageFilter(WM_COPYGLOBALDATA, Msg_Add);
end;
end;
end;
procedure TfmMain.FormCreate(Sender: TObject);
begin
SetDragAndDropOnSystemsWIthUAC(memText.Handle, True);
FGridWNDProc := memText.WindowProc;
memText.WindowProc := grdEmissioinWND;
end;
procedure TfmMain.grdEmissioinWND(var Message: TMessage);
begin
FGridWNDProc(Message);
if Message.Msg = WM_DROPFILES then
DropFilesOnToApp(TWmDropFiles(Message));
end;
procedure TfmMain.DropFilesOnToApp(var msg: TWMDropFiles);
var
hDrop: THandle;
FileCount: Integer;
i : integer;
begin
hDrop := msg.Drop;
// Zwraca ilosc przeciaganych plikow
FileCount:= DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
for i:=0 to FileCount-1 do //FileCount zawsze jest 0
begin
//tu już nie wchodzi
end;
end;
Jakiś pomysł dlaczego na koncie domenowym to nie bangla?