Читать «Виртуальная библиотека Delphi» онлайн - страница 37

Unknown

Ну вот и все.

Перетаскивание файла

{ На эту форму можно бросить файл (например из проводника)

и он будет открыт }

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics,

  Controls, Forms, Dialogs,StdCtrls,

  ShellAPI {обязательно!};

type

  TForm1 = class(TForm)

    Memo1: TMemo;

    FileNameLabel: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

  protected

   {Это и есть самая главная процедура}

    procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;

end;

var

  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMDropFiles(var Msg: TMessage);

var

   Filename: array[0 .. 256] of Char;

   Count   : integer;

begin

  { Получаем количество файлов (просто пример) }

   nCount := DragQueryFile( msg.WParam, $FFFFFFFF,

     acFileName, cnMaxFileNameLen);

{ Получаем имя первого файла }

  DragQueryFile( THandle(Msg.WParam),

     0, { это номер файла }

     Filename,SizeOf(Filename) ) ;

  { Открываем его }

  with FileNameLabel do begin

   Caption := LowerCase(StrPas(FileName));

   Memo1.Lines.LoadfromFile(Caption);

  end;

{ Отдаем сообщение о завершении процесса }

  DragFinish(THandle(Msg.WParam));

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

{ Говорим Windows, что на нас можно бросать файлы }

DragAcceptFiles(Handle, True);

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

{ Закрываем за собой дверь золотым ключиком}

DragAcceptFiles(Handle, False);

end;

end.

Привлечение внимания к окну

Часто возникает проблема — в многооконном приложении необходимо обратить внимание пользователя на то, что какое-то из окон требует внимания (например, к нему пришло сообщение по DDE, в нем завершился какой-либо процесс, произошла ошибка...). Это легко сделать, используя команду API FlashWindow:

procedure TForm1.Timer1Timer(Sender: TObject);

 begin FlashWindow(Handle,true);

end;

В данном примере FlashWindow вызывается по таймеру ежесекундно, что приводит к миганию заголовка окна.

Заставка для программы

Сведения о программе, авторские права и т.д., лучше оформить в виде отдельной формы и показывать ее при запуске программы (как это сделано в Word).

Сделать это не сложно:

1. Создаете форму (например SplashForm).

2. Объявляете ее свободной (availableForms).

3. В Progect Source вставляете следующее (например):

program Splashin;

uses Forms, Main in 'MAIN.PAS', Splash in 'SPLASH.PAS'

{$R *.RES}

begin

 try

  SplashForm := TSplashForm.Create(Application);

  SplashForm.Show;