Читаем Виртуальная библиотека Delphi полностью

  inherited

{ ... ваша реакция на событие ... } 

end;

Вызов inherited метода очень важен. Обратите внимание также на то, что для функций, объявленных с директивой message (обработчиков событий Windows) после inherited нет имени наследуемой процедуры, потому что она может быть неизвестна или вообще отсутствовать (в этом случае вы в действительности вызываете процедуру DefaultHandler).

8. Как обработать события от других приложений?

Попробуйте сделать это следующим образом:

type 

  TForm1 = class(TForm) 

  ... 

  private 

    procedure WMNCActivate(var Msg: TMessage); message WM_NCACTIVATE; 

  end

procedure TForm1.WMNCActivate(var Msg: TMessage); 

begin 

{ здесь обработка принятых событий } 

end

9. Как перехватить сообщения Windows и обработать их перед тем, как выполнится строка Application.Run?

Пример проекта показывает, как получить сообщения Windows в данном случае. Это редкий случай, в большинстве случаев переопределение процедуры Application.OnMessage будет делать то же самое.

program Project1; 

uses 

  Forms, 

  Unit1 in 'UNIT1.PAS' { Form1 }

  Messages, WinTypes, WinProcs, 

{$R *.RES} 

var 

  OldWndProc: TFarProc; 

function NewWndProc(hWndAppl: HWnd; Msg, wParam: Word; lParam: Longint): Longint; export

begin 

{ default WndProc return value } 

  Result := 0; 

{ handle messages here; the message number is in Msg } 

  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)); 

  Application.Run; 

end

10. Проблема с DragDrop для внешних программ.

Я пишу небольшую программку — "мусорную корзину". В FormCreate вызывается DragAcceptFiles(HANDLE, True). Проблема в том, что когда размер окна восстанавливается и затем минимизируется Drag and Drop перестает работать. Я безуспешно пробовал помещать DragAcceptFiles в разные методы формы. Однако если сделать вызов DragAcceptFiles(Application.Handle, True) в MainForm.Create, то все работает. Как перехватить событие WM_DROPFILES?

Это можно сделать так:

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)?

Следующий код показывает как обрабатывать это событие. Обрабатываются имена всех "брошенных" файлов. Для загрузки каждого файла вызывается CreateChild(FName). В обработчике OnCreate данной формы вы должны вызвать DragAcceptFiles.

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; 

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных