Dimming the screen with Delphi -


i looking create effect similar lightbox effect seen on many website background of screen fades out , content want emphasize not. best way go creating such effect in delphi ?

the content want emphasize in case movable panel located on form , want fade out area of screen not directly under panel.

thanks. oscar

create new form , add code formcreate method. change properties using properties inspector, i'm choosing show relevant properties using code:

unit unit1; // 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. 

here's second form has no border, showing on top. not have alpha blending turned on, , form style should fsstayontop, or else should use parentwindow property (on versions of delphi support that).

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 , fautodeactivate   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. 

that addresses how make whole screen "go dim", , show on top of "dimmed area", describe "showing panel in main form" require move content out of main form, or else clip region out of form1, or use combination of alpha blend plus transparency, don't have code show you.

if doing it, float thing want not dimmed, above full screen borderless 50% alpha form, shown below.

but see, screen isn't dimmed (screen brightness not reduced), it's merely we've done 50% transparent layer of black has blended in , darkened overall screen appearance.

enter image description here


Comments

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -