DragDrop - wczytywanie zawartości pliku po upuszczeniu

0

Wie może ktoś jaki kod trzeba dodać żeby po upuszczenie na memo1 pliku (gdy program jest uruchomiony)
jego zawartość została w czytana, bo jak paczyłem na Demo komponentów DragDrop nie mogę znaleźć tego.

0

To mi nie działa [!!!] [!!!] [!!!] [!!!] [!!!]

0

A próbowałeś w ogóle? Bo ja przed chwilą zrobiłem według tego artykułu (moja pierwsza aplikacja, w
której użyłem metody drag and drop dla plików) i wszystko działa. Tylko, że zmieniłem że zamiast do
Memo ładować zawartość pliku mam ładowanie listy nazw plików. Lecz najpierw wklejałem oryginalny
kod z artykułu i wszystko działało. Chyba że Ty w OnCreate formatki dałeś na przykład taki oto kod:

  DragAcceptFiles(Memo1.Handle, True);

Wtedy faktycznie nie zadziała. Kursor do przeciągania pojawi się nad Memo, ale sam komponent nie
będzie reagował. Najprawdopodobniej kiedy chcemy użyć innego komponentu niż Formatka należy w
osobnym module stworzyć sobie Memo (lub inny komponent), który dziedzieczy z oryginału oraz do
jego metod dodać taki kod jak dla Formatki. Czy to zadziała - nie wiem, właśnie będę kombinował :)

EDIT: i jest dokładnie tak jak napisałem - poniżej masz kod modułu dragmemo, który dodajesz do uses, a
następnie w metodzie onCreate Formatki głownej wpisujesz na przykład taki kod jak teraz tutaj podam:

var
  DgMemo : TDragMemo;
begin
  DgMemo := TDragMemo.Create(Self);
  with DgMemo do
    begin
    Left := 8;
    Top := 8;
    Width := 553;
    Height := 306;
    ScrollBars := ssVertical;
    TabOrder := 0;
    end;
  DgMemo.Parent := MainForm;
  DragAcceptFiles(DgMemo.Handle, True);
end;

W uses musi byc ShellApi oraz dragmemo. A poniżej kod modułu dragmemo, jeżeli chcesz aby po tym,
jak przeciągniesz na Memo plik - Memo robiło co innego na przykład ładowało plik tak jak w Artykule, to
musisz zmienić kod w procedurze TDragMemo.WMDropFiles(var Msg: TWMDropFiles); na swoj i jeśli w
operacjach mają być jakieś komunikaty ShowMessage to w sekcji uses modułu dragmemo - musisz też
dodać moduł Dialogs. A plik załadujez piszać samo Lines.LoadFromFile(FileName); bez nazwy Memo :)

unit dragmemo;

interface

uses
  Windows, StdCtrls, ShellApi, Messages;

type
  TDragMemo = class(TMemo)
  protected
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
  end;

implementation

procedure TDragMemo.WMDropFiles(var Msg: TWMDropFiles);
var
  hDrop : THandle;
  I, FileCount, FileNameLength : integer;
  FileName : string;
begin
  hDrop := Msg.Drop;
  try
    FileCount := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
    for I := 0 to FileCOunt - 1 do
      begin
      FileNameLength := DragQueryFile(hDrop, I, nil, 0);
      SetLength(FileName, FileNameLength);
      DragQueryFile(hDrop, I, PChar(FileName), FileNameLength + 1);
      Lines.Add(FileName);
      end;
  finally
    DragFinish(hDrop);
  end;
end;

end.

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