www.pudn.com > AlphaBlendMenus.rar > Main.pas
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdActns, ExtActns, ActnList, ToolWin, ActnMan, ActnCtrls,
ActnMenus, StdCtrls, ComCtrls, ImgList, StdActnMenus,
XPStyleActnCtrls, XPActnCtrls;
type
TForm1 = class(TForm)
ActionManager1: TActionManager;
ActionMainMenuBar1: TActionMainMenuBar;
RichEdit1: TRichEdit;
ImageList1: TImageList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
EditSelectAll1: TEditSelectAll;
EditUndo1: TEditUndo;
EditDelete1: TEditDelete;
RichEditBold1: TRichEditBold;
RichEditItalic1: TRichEditItalic;
RichEditUnderline1: TRichEditUnderline;
RichEditStrikeOut1: TRichEditStrikeOut;
RichEditBullets1: TRichEditBullets;
RichEditAlignLeft1: TRichEditAlignLeft;
RichEditAlignRight1: TRichEditAlignRight;
RichEditAlignCenter1: TRichEditAlignCenter;
FileExit1: TFileExit;
SearchFind1: TSearchFind;
SearchFindNext1: TSearchFindNext;
SearchReplace1: TSearchReplace;
SearchFindFirst1: TSearchFindFirst;
ActionToolBar1: TActionToolBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure PopupClass(Sender: TObject; var PopupClass: TCustomPopupClass);
public
{ Public declarations }
end;
{ TCustomLayeredActionPopupEx }
TCustomLayeredActionPopupEx = class(TXPStylePopupMenu)
private
FAlphaBlend: Boolean;
FAlphaBlendValue: Byte;
FTransparentColor: Boolean;
FTransparentColorValue: TColor;
procedure SetAlphaBlend(const Value: Boolean);
procedure SetAlphaBlendValue(const Value: Byte);
procedure SetTransparentColor(const Value: Boolean);
procedure SetTransparentColorValue(const Value: TColor);
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure InitAlphaBlending(var Params: TCreateParams);
procedure SetLayeredAttribs;
property AlphaBlend: Boolean read FAlphaBlend write SetAlphaBlend;
property AlphaBlendValue: Byte read FAlphaBlendValue write SetAlphaBlendValue;
property TransparentColor: Boolean read FTransparentColor write SetTransparentColor;
property TransparentColorValue: TColor read FTransparentColorValue write SetTransparentColorValue;
public
constructor Create(AOwner: TComponent); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TCustomLayeredActionPopup }
procedure TCustomLayeredActionPopupEx.SetAlphaBlend(const Value: Boolean);
begin
if FAlphaBlend <> Value then
begin
FAlphaBlend := Value;
SetLayeredAttribs;
end;
end;
procedure TCustomLayeredActionPopupEx.SetAlphaBlendValue(const Value: Byte);
begin
if FAlphaBlendValue <> Value then
begin
FAlphaBlendValue := Value;
SetLayeredAttribs;
end;
end;
procedure TCustomLayeredActionPopupEx.SetLayeredAttribs;
const
cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA);
cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY);
var
AStyle: Integer;
begin
if not (csDesigning in ComponentState) and
(Assigned(SetLayeredWindowAttributes)) and HandleAllocated then
begin
AStyle := GetWindowLong(Handle, GWL_EXSTYLE);
if FAlphaBlend then
begin
if (AStyle and WS_EX_LAYERED) = 0 then
SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue,
cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]);
end
else
begin
SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED);
RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
end;
end;
end;
procedure TCustomLayeredActionPopupEx.SetTransparentColorValue(const Value: TColor);
begin
if FTransparentColorValue <> Value then
begin
FTransparentColorValue := Value;
SetLayeredAttribs;
end;
end;
procedure TCustomLayeredActionPopupEx.SetTransparentColor(const Value: Boolean);
begin
if FTransparentColor <> Value then
begin
FTransparentColor := Value;
SetLayeredAttribs;
end;
end;
procedure TCustomLayeredActionPopupEx.InitAlphaBlending(var Params: TCreateParams);
begin
if not (csDesigning in ComponentState) and (assigned(SetLayeredWindowAttributes)) then
if FAlphaBlend or FTransparentColor then
Params.ExStyle := Params.ExStyle or WS_EX_LAYERED;
end;
procedure TCustomLayeredActionPopupEx.CreateWindowHandle(
const Params: TCreateParams);
begin
inherited;
SetLayeredAttribs;
end;
constructor TCustomLayeredActionPopupEx.Create(AOwner: TComponent);
begin
inherited;
FAlphaBlend := True;
FAlphaBlendValue := 125;
FTransparentColorValue := clWhite;
end;
procedure TCustomLayeredActionPopupEx.CreateParams(
var Params: TCreateParams);
begin
inherited;
InitAlphaBlending(Params);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ActionMainMenuBar1.OnGetPopupClass := PopupClass;
end;
procedure TForm1.PopupClass(Sender: TObject;
var PopupClass: TCustomPopupClass);
begin
PopupClass := TCustomLayeredActionPopupEx;
end;
end.