Создайте новую форму и добавьте этот код в метод FormCreate
. Вы также можете изменить свойства с помощью инспектора свойств, но я хочу показать вам соответствующие свойства с помощью кода:
unit Unit1;
// This is a full screen partially transparent black form.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
Self.WindowState := wsMaximized;
AlphaBlend := true;
Alphablendvalue := 127;
Color := clBlack;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
Close;
end;
end.
Вот вторая форма, у которой нет границы, которую я показываю поверх. В нем не включено альфа-смешивание, а стиль формы должен быть fsStayOnTop
, иначе вы должны использовать свойство ParentWindow
(в версиях Delphi, которые это поддерживают).
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
procedure FormDeactivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FAutoDeactivate: Boolean;
FCounter: Integer;
procedure WMUser1(var Message:TMessage); message WM_USER+1;
public
property AutoDeactivate:Boolean read FAutoDeactivate write FAutoDeactivate;
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.FormDeactivate(Sender: TObject);
begin
if Self.Visible and FAutoDeactivate then
begin
FAutoDeactivate := false;
Form1.Close;
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;
procedure TForm2.FormActivate(Sender: TObject);
begin
PostMessage(Self.Handle, WM_USER+1, 0, 0);
end;
procedure TForm2.WMUser1(var Message: TMessage);
begin
FAutoDeactivate := true;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
Color := clWhite;
FormStyle := fsStayOnTop; // or set parent
end;
end.
Это относится к тому, как сделать весь экран «тусклым», а затем показать что-то поверх этой «затемненной области», но то, что вы описываете как «показ панели в основной форме», потребует от вас перемещения этого содержимого из вашей основной формы, или вырезать область из формы 1, или использовать комбинацию альфа-смеси плюс прозрачность, но у меня нет кода для тех, чтобы показать вам.
Если бы я делал это, я бы просто поместил объект, который я хочу, чтобы он не был затемнен, над полноэкранной 50% -ной альфа-формой, как показано ниже.
Но, как вы видите, экран не тускнеет (яркость экрана не уменьшается), просто мы сделали прозрачный слой черного цвета на 50%, который смешался и затемнил общий вид экрана.
![enter image description here](https://i.stack.imgur.com/91AWk.png)