Drag & drop

0

Witajcie. Proszę o pomoc. Jak zrobić przeciągnięcie obrazka jpg na form - chciałbym docelowo zrobić prosty programik do prezentacji i nie klikać ciągle w "otwórz obrazek" tylko go porostu przeciągnąć np z pulpitu, czy folderu, następnie dodać krótki opis i zapisać jako pdf.

Jestem początkującym, więc bardzo prosiłbym o łopatologiczne wyjaśnienie :)

1

Należy odpowiednio obsłużyć komunikat WM_DROPFILES. Więcej informacji do znalezienia w google. Łopatologicznie nie ma sensu, dawanie gotowca też nie ma sensu. Należy kombinować samodzielnie. Powtórzę to - niestety po raz kolejny w krótkim okresie czasu, dawając Wam gotowce, się Was krzywdzi. Dodam tylko, że należy zrobić sprawdzanie (są do tego odpowiednie moduły na necie i przykłady do wygooglowania) czy system nie jest przypadkiem Vistą lub nowszym. Jeżeli tak, to do akceptowania drag and drop należy zastosować poniższą procedurę. Jeżeli nie to wystarczy użycie funkcji DragAcceptFiles z modułu ShellApi. Oczywiście obsługując komunikat WM_DROPFILES nalezy sprawdzać czy przeciągany element nie jest katalogiem, na przykład przy użyciu funkcji DirectoryExists. Jeżeli interesują Ciebie też pliki o konkretnym rozszerzeniu to również je sprawdzaj. Natomiast ten wątek przenoszę do działu Newbie, ponieważ dotyczy on podstaw. I tam o takowe należy pytać.

procedure 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
  DllHandle := LoadLibrary('user32.dll');
  if DllHandle > 0 then
  begin
    ChangeWindowMessageFilter := GetProcAddress(DllHandle, 'ChangeWindowMessageFilter');
    if Assigned(ChangeWindowMessageFilter) then
    begin
      DragAcceptFiles(Wnd, IsEnabled);
      ChangeWindowMessageFilter(WM_DROPFILES, Msg_Add);
      ChangeWindowMessageFilter(WM_COPYGLOBALDATA, Msg_Add);
    end;
  end;
end;
0

Nie ma co wyważać otwartych drzwi:
http://melander.dk/delphi/dragdrop/

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