Jak załadować plik tekstowy do edita, przeciągając plik na edita?
Tworzysz Form1, Edit1 i dajesz taki kod:
W ramach Form1:
public
OldWndProc:TWndMethod;
procedure AcceptFiles( var msg : TMessage );
A potem implementujesz:
procedure TForm1.AcceptFiles( var msg : TMessage );
const
MAX_NAME = 255;
var
i, n: integer;
FileName: array [0..MAX_NAME] of char;
begin
if (msg.Msg=WM_DROPFILES) then
begin
n:= DragQueryFile( msg.WParam, $FFFFFFFF, FileName, MAX_NAME );
for i := 0 to n-1 do
begin
DragQueryFile( msg.WParam, i, FileName, MAX_NAME );
//Tu w FileName masz nazwę pliku, więc możesz go sobie wczytać otwierając plik..
//Ja dla przykładu w Edit1 pokażę tylko jego nazwę.
Edit1.Text:=FileName;
end;
DragFinish( msg.WParam );
end
else
OldWndProc(msg);
end;
A na stworzenie Form1 dajesz taką akcję:
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles( Edit1.Handle, True );
OldWndProc:=Edit1.WindowProc;
Edit1.WindowProc:=AcceptFiles;
end;
To by było tyle. Włączasz Editowi akceptowanie plików i nadpisujesz jego obsługe komunikatów. Jeśli przyszedł WM_DROPFILES, upuszczono plik i należy to obsłużyć, w przeciwnym wypadku komunikaty należy obsłużyć po staremu. Stąd zapamiętanie w OldWndProc dawnej obsługi komunikatów.
W sumie nie wiem czemu chciało mi się to napisać.. bo po użyci wyszukiwarki na forum pewnie nie raz byś to znalazła.. ale nich będzie..
Dzięki Szczawik, działa.
A tak na marginesie odnośnie tego:
"[...]W sumie nie wiem czemu chciało mi się to napisać.. bo po użyci wyszukiwarki na forum pewnie nie raz byś to znalazła.. ale nich będzie..[...]"
Mam na imię Tomek i rozumiem że moja ksywka może być myląca, tak więc wybaczam :-) jednak na przyszłość proszę pamiętaj i pamiętajcie.
Dzięki. Nerka.