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.

Comments
Post a Comment