drag and drop

Odpowiedz Nowy wątek
rem
2008-06-11 17:27
rem
0

Witam, jak zrobić DragAndDrop w delphi? Konkretnie chodzi mi o to by przeciagnac z pulpitu jakis plik np tekstowy i zeby mi sie otworzyl w delphi - pobral program jego sciezke czy cokolwiek, po prostu zrobic ten draganddrop z pulpitu do aplikacji
pozdrawiam
Remek

Pozostało 580 znaków

2008-06-11 17:40

Rejestracja: 14 lat temu

Ostatnio: 8 miesięcy temu

0

np. połóż sobie na formie panel (na niego będziesz przeciągał pliki) i memo (będziesz wypisywał, jakie pliki przeciągnąłeś do aplikacji)

  1. w sekcji public formy deklarujesz dwie funkcje

    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
    procedure WMDropFiles (hDrop : THandle; hWindow : HWnd);
  2. poniżej masz ich definicje:

    
    procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
    begin
    case Msg.Message of
        WM_DROPFILES :  WMDropFiles(Msg.wParam, Msg.hWnd);
    end;
    end;

procedure TForm1.WMDropFiles(hDrop: THandle; hWindow: HWnd);
var
TotalNumberOfFiles, nFileLength : Integer;
pszFileName : PChar;
i : Integer;
begin
TotalNumberOfFiles := DragQueryFile(hDrop, $FFFFFFFF, Nil, 0);

for i := 0 to TotalNumberOfFiles - 1 do
    begin
    nFileLength := DragQueryFile(hDrop, i, Nil, 0) + 1;
    GetMem(pszFileName, nFileLength);
    DragQueryFile(hDrop , i, pszFileName, nFileLength);
    Memo1.Lines.Add(pszFileName);
    FreeMem(pszFileName, nFileLength);
    end;

DragFinish (hDrop);

end;


3. W zdarzeniu onCreate formy umieszczasz:

```delphi
DragAcceptFiles(Panel1.Handle, True);
Application.OnMessage := AppMessage;
  1. Przeciągając plik na panel1 w memo wypisuje ci jego ścieśkę

  2. w zdarzeniu onClose formy umieszczasz:

    DragAcceptFiles (Panel1.Handle, False);

Pozostało 580 znaków

2008-06-12 00:45
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 tygodnie temu

Lokalizacja: Szczecin

0

Podłącze się pod ten wątek. Ciekawy kod, musze przyznać, ale żeby się
skompilował do uses należy dodać ShellApi, uprzedzam kolejne pytanie.


Pozostało 580 znaków

Odpowiedz

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