Виртуальная библиотека Delphi - [19]

Шрифт
Интервал

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

>  SplashForm.Update;

>  Application.CreateForm(TMainForm, MainForm);

>  SplashForm.Hide;

> finally

>  SplashForm.Free;

> end;

> Application.Run;

>end.

И форма SplashForm держится на экране пока выполняется Create в главной форме. Но иногда она появляется и пропадает очень быстро, поэтому нужно сделать задержку:

1. Добавляете на форму таймер с событием:

>procedure TSplashForm.Timer1Timer(Sender: TObject);

>begin

> Timer1.Enabled := False;

>end;

2. Событие onCloseQuery для формы:

>procedure TSplashForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

>begin

> CanClose := Not Timer1.Enabled;

>end;

3. И перед SplashForm.Hide; ставите цикл:

>repeat

> Application.ProcessMessages;

>until SplashForm.CloseQuery;

4. Все! Осталось установить на таймере период задержки 3-4 секунды.

5. На последок, у такой формы желательно убрать Caption:

>SetWindowLong(Main.Handle,GWL_STYLE, GetWindowLong(Main.Handle, GWL_STYLE) AND NOT WS_CAPTION OR WS_SIZEBOX);

Прозрачная форма

Эта форма имет прозрачный фон!!!

>unit unit1;

>interface

>uses

>  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

>  StdCtrls;

>type

>  TForm1 = class(TForm)

>  Button1: TButton;

>  Button2: TButton;

>    // это просто кнопка на форме - для демонстрации

>  protected

>    procedure RebuildWindowRgn;

>    procedure Resize; override;

>  public

>    constructor Create(AOwner: TComponent); override;

>  end;

>var

>  Form1 : TForm1;

>implementation

>// ресурс этой формы

>{$R *.DFM}

>{ Прозрачная форма }

>constructor TForm1.Create(AOwner: TComponent);

>begin

>  inherited;

>  // убираем сколлбары, чтобы не мешались

>  // при изменении размеров формы

>  HorzScrollBar.Visible:= False;

>  VertScrollBar.Visible:= False;

>// строим новый регион

>  RebuildWindowRgn;

>end;

>procedure TForm1.Resize;

>begin

>  inherited;

>  // строим новый регион

>  RebuildWindowRgn;

>end;

>procedure TForm1.RebuildWindowRgn;

>var

>  FullRgn, Rgn: THandle;

>  ClientX, ClientY, I: Integer;

>begin

>// определяем относительные координаты клиенской части

>  ClientX:= (Width - ClientWidth) div 2;

>  ClientY:= Height - ClientHeight - ClientX;

>  // создаем регион для всей формы

>  FullRgn:= CreateRectRgn(0, 0, Width, Height);

>  // создаем регион для клиентской части формы

>  // и вычитаем его из FullRgn

>  Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +

>ClientHeight);

>  CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);

>// теперь добавляем к FullRgn регионы каждого контрольного элемента

>  for I:= 0 to ControlCount -1 do

>    with Controls[I] do begin

>      Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +

>Width, ClientY + Top + Height);

>      CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);

>    end;

>// устанавливаем новый регион окна

>  SetWindowRgn(Handle, FullRgn, True);

>end;

>end.

>А как Вам понравится эта форма ?

>unit rgnu;

>interface

>uses

>  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

>  Buttons, Menus;

>type

>  TForm1 = class(TForm)

>    procedure FormCreate(Sender: TObject);

>    procedure Button1Click(Sender: TObject);

>    procedure FormPaint(Sender: TObject);

>  private

>    { Private declarations }

>    rTitleBar : THandle;

>    Center    : TPoint;

>    CapY   : Integer;

>    Circum    : Double;

>    SB1       : TSpeedButton;

>    RL, RR    : Double;

>    procedure TitleBar(Act : Boolean);

>    procedure WMNCHITTEST(var Msg: TWMNCHitTest);

>      message WM_NCHITTEST;

>    procedure WMNCACTIVATE(var Msg: TWMNCACTIVATE);

>      message WM_NCACTIVATE;

>    procedure WMSetText(var Msg: TWMSetText);

>      message WM_SETTEXT;

>  end;

>var

>  Form1: TForm1;

>implementation

>{$R *.DFM}

>CONST

>  TitlColors : ARRAY[Boolean] OF TColor =

>    (clInactiveCaption, clActiveCaption);

>  TxtColors : ARRAY[Boolean] OF TColor =

>    (clInactiveCaptionText, clCaptionText);

>procedure TForm1.FormCreate(Sender: TObject);

>VAR

>  rTemp, rTemp2    : THandle;

>  Vertices : ARRAY[0..2] OF TPoint;

>  X, Y     : INteger;

>begin

>  Caption := 'OOOH! Doughnuts!';

>  BorderStyle := bsNone; {required}

>  IF Width > Height THEN Width := Height

>  ELSE Height := Width;  {harder to calc if width <> height}

>  Center  := Point(Width DIV 2, Height DIV 2);

>  CapY := GetSystemMetrics(SM_CYCAPTION)+8;


Еще от автора Неизвестный Автор
Галчонок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Призраки ночи

В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.


Закат  вечности

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 131, Победа

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.