Консультация № 117370
07.01.2008, 17:54
0.00 руб.
0 1 1
Доброго времени суток, коллеги!

Скажите пожалуйста как на Дельфи сделать окно программы намертво прилепленым к верху экрана, чтобы его нижняя граница была верхним краем для всех остальных приложений. Так например сделана программа CashFiesta. Посмотреть что я имею ввиду можно здесь
http://rsfgroup.net/1.JPG

Обсуждение

Неизвестный
08.01.2008, 09:51
общий
это ответ
Здравствуйте, Remnew Anatoliy!

Попробуйте развить такой код: на форме 2 кнопки: BTop и BClose остальное в приложении


Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) BTop: TButton; BClose: TButton; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure BCloseClick(Sender: TObject); procedure BTopClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; r: TRect; procedure ToolBar(); procedure ButPosition();implementation{$R *.dfm}procedure ToolBar();begin with Form1 do begin Height := (2 * GetSystemMetrics(SM_CYCAPTION));; FormStyle := fsStayOnTop; BorderStyle := bsNone; SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0); r.Top := Form1.Height; SystemParametersInfo(SPI_SETWORKAREA, 0, @r, SPIF_SENDWININICHANGE); Left := r.Left; Top := 0; Width := r.Right; end; // with Form1end;procedure TForm1.BTopClick(Sender: TObject);begin Perform(WM_SETREDRAW, 0, 0); ToolBar(); ButPosition(); Perform(WM_SETREDRAW, 1, 0);end;procedure TForm1.BCloseClick(Sender: TObject);begin Close;end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0); r.Top := 0; SystemParametersInfo(SPI_SETWORKAREA, 0, @r, SPIF_SENDWININICHANGE);end;procedure TForm1.FormCreate(Sender: TObject);begin BTop.Caption := ‘Нaверх‘; BClose.Caption := ‘Закрыть‘; ButPosition();end;procedure ButPosition();begin with Form1 do begin if r.Top = 0 then BTop.Top := Round(( Form1.Height / 2) - GetSystemMetrics(SM_CYCAPTION) - (BTop.Height / 2)) else BTop.Top := Round(( Form1.Height / 2) - ( BTop.Height / 2)); BClose.Top := BTop.Top; BTop.Left := Round(( Form1.Width / 2) - BTop.Width - (BTop.Height / 2)); BClose.Left := BTop.Left + BTop.Width + BTop.Height; end;end;end.
Форма ответа