Читать «Виртуальная библиотека Delphi» онлайн - страница 107
Unknown
begin
Result := 0;
Result := CallWindowProc(OldWndProc, hWndAppl, Msg, wParam, lParam);
end;
begin
Application.CreateForm(TForm1, Form1);
OldWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc));
end.
10. Проблема с DragDrop для внешних программ.
Я пишу небольшую программку — "мусорную корзину". В
Это можно сделать так:
type
TMainForm = class(TForm)
...
procedure FormCreate(Sender: TObject);
private
procedure DropFiles(var Msg : TWMDropFiles); message WM_DROPFILES;
end;
procedure TMainForm.DropFiles(var Msg : TWMDropFiles);
begin
DragQueryPoint(Msg.Drop, Point);
NrOfFiles := DragQueryFile(Msg.Drop, Word(-1), FileName, BufSize);
DragQueryFile(Msg.Drop, 0, FileName, BufSize);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
Подробнее о перехвате событий Windows см. Главу 7 руководства Component Writers Guide.
11. Как обрабатывать WM_DROPFILES (Drag/Drop)?
Следующий код показывает как обрабатывать это событие. Обрабатываются имена всех "брошенных" файлов. Для загрузки каждого файла вызывается
type
TFrameForm = class(TForm)
...
protected
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
end;
procedure TFrameForm.WMDropFiles(var Msg : TMessage);
var
I, N, Size: Word;
FName: string;
HDrop: Word;
begin
HDrop := Msg.WParam;
N := DragQueryFile(HDrop, $FFFF, nil, 0);
for I := 0 to (N-1) do
begin
Size := DragQueryFile(HDrop, I, nil, 0);
if Size < 255 then
begin
FName[0] := Chr(Size);
DragQueryFile(HDrop, I, @FName[1], Size+1);
CreateChild(FName);
end;