📄 bsmessages.pas
字号:
AlphaBlendAnimation := AAlphaBlendAnimation;
AlphaBlendValue := AAlphaBlendValue;
end;
ButtonWidth := 70;
//
if (ACtrlSkinData <> nil) and (not ACtrlSkinData.Empty)
then
begin
BI := ACtrlSkinData.GetControlIndex(AButtonSkinDataName);
if (BI <> -1) and
(TbsDataSkinControl(ACtrlSkinData.CtrlList.Items[BI]) is TbsDataSkinButtonControl)
then
begin
with TbsDataSkinButtonControl(ACtrlSkinData.CtrlList.Items[BI]) do
ButtonHeight := SkinRect.Bottom - SkinRect.Top;
end
else
ButtonHeight := 25;
end
else
ButtonHeight := 25;
//
ButtonSpacing := 10;
ButtonCount := 0;
for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
if B in Buttons then Inc(ButtonCount);
ButtonGroupWidth := 0;
if ButtonCount <> 0 then
ButtonGroupWidth := ButtonWidth * ButtonCount +
ButtonSpacing * (ButtonCount - 1);
Caption := ACaption;
// add label
Result.Message := TbsSkinStdLabel.Create(Result);
with Result.Message do
begin
Font := ADefaultFont;
DefaultFont := ADefaultFont;
UseSkinFont := AUseSkinFont;
SkinDataName := AMessageLabelSkinDataName;
SkinData := ACtrlSkinData;
Name := 'Message';
Parent := Result;
AutoSize := True;
Caption := Msg;
Left := 50;
Top := 15;
X := Left + Width;
end;
IconID := IconIDs[DlgType];
with TImage.Create(Result) do
begin
Name := 'Image';
Parent := Result;
Picture.Icon.Handle := LoadIcon(0, IconID);
Y := Result.Message.Top + Result.Message.Height div 2 - 16;
if Y < 10 then Y := 10;
SetBounds(5, Y, 32, 32);
end;
ClientHeight := 50 + ButtonHeight + Result.Message.Height;
if ButtonGroupWidth < X
then
ClientWidth := X + 40
else
ClientWidth := ButtonGroupWidth + 40;
// "Do not display this message again" flag
if AShowAgainFlag
then
begin
ClientHeight := ClientHeight + 40;
Result.DisplayCheckBox := TbsSkinCheckRadioBox.Create(Result);
with Result.DisplayCheckBox do
begin
Name := 'checkbox';
DefaultHeight := 30;
Checked := not AShowAgainFlagValue;
Parent := Result;
DefaultFont := ADefaultFont;
UseSkinFont := AUseSKinFont;
SkinData := ACtrlSkinData;
Y := Result.ClientHeight - ButtonHeight - 50;
if (ACtrlSkinData <> nil) and (ACtrlSkinData.ResourceStrData <> nil)
then
begin
Caption := ACtrlSkinData.ResourceStrData.GetResStr('MSG_CAP_SHOWFLAG');
if Caption = '' then Caption := BS_MSG_CAP_SHOWFLAG;
end
else
Caption := BS_MSG_CAP_SHOWFLAG;
if (FIndex <> -1) and UseSkinFont
then
begin
Result.Canvas.Font.Name := FontName;
Result.Canvas.Font.Height := FontHeight;
end
else
Result.Canvas.Font.Assign(ADefaultFont);
W := Result.Canvas.TextWidth(Caption);
W := W + 30;
if Result.ClientWidth < W + 30 then Result.ClientWidth := W + 30;
SetBounds(5, Y, W + 25, DefaultHeight);
end;
end;
if Width > Result.BSF.GetMaxWidth
then
Width := Result.BSF.GetMaxWidth
else
if Width < Result.BSF.GetMinWidth
then
Width := Result.BSF.GetMinWidth;
// add buttons
if mbOk in Buttons then DefaultButton := mbOk else
if mbYes in Buttons then DefaultButton := mbYes else
DefaultButton := mbRetry;
if mbCancel in Buttons then CancelButton := mbCancel else
if mbNo in Buttons then CancelButton := mbNo else
CancelButton := mbOk;
X := (ClientWidth - ButtonGroupWidth) div 2;
for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
if B in Buttons then
with TbsSkinButton.Create(Result) do
begin
Parent := Result;
Name := ButtonNames[B];
CanFocused := True;
Caption := GetButtonCaption(B, ACtrlSkinData);
ModalResult := ModalResults[B];
if B = DefaultButton then Default := True;
if B = CancelButton then Cancel := True;
DefaultHeight := ButtonHeight;
SetBounds(X, Result.ClientHeight - ButtonHeight - 10,
ButtonWidth, ButtonHeight);
DefaultFont := ADefaultButtonFont;
UseSkinFont := AUseSkinFont;
Inc(X, ButtonWidth + ButtonSpacing);
if B = mbHelp then
OnClick := Result.HelpButtonClick;
SkinDataName := AButtonSkinDataName;
SkinData := ACtrlSkinData;
end;
end;
end;
function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; ASkinData, ACtrlSkinData: TbsSkinData;
AButtonSkinDataName: String; AMessageLabelSkinDataName: String;
ADefaultFont: TFont; ADefaultButtonFont: TFont; AUseSkinFont: Boolean;
AAlphaBlend, AAlphaBlendAnimation: Boolean; AAlphaBlendValue: Byte;
AShowAgainFlag, AShowAgainFlagValue: Boolean; MX, MY: Integer): TbsMessageForm;
var
BI, ButtonWidth,
ButtonHeight, ButtonSpacing, ButtonCount, ButtonGroupWidth, X, Y: Integer;
B, DefaultButton, CancelButton: TMsgDlgBtn;
IconID: PChar;
W: Integer;
begin
Result := TbsMessageForm.CreateEx(Application, MX, MY);
with Result do
begin
with BSF do
begin
SkinData := ASkinData;
MenusSkinData := ACtrlSkinData;
AlphaBlend := AAlphaBlend;
AlphaBlendAnimation := AAlphaBlendAnimation;
AlphaBlendValue := AAlphaBlendValue;
end;
ButtonWidth := 70;
//
if (ACtrlSkinData <> nil) and (not ACtrlSkinData.Empty)
then
begin
BI := ACtrlSkinData.GetControlIndex(AButtonSkinDataName);
if (BI <> -1) and
(TbsDataSkinControl(ACtrlSkinData.CtrlList.Items[BI]) is TbsDataSkinButtonControl)
then
begin
with TbsDataSkinButtonControl(ACtrlSkinData.CtrlList.Items[BI]) do
ButtonHeight := SkinRect.Bottom - SkinRect.Top;
end
else
ButtonHeight := 25;
end
else
ButtonHeight := 25;
//
ButtonSpacing := 10;
ButtonCount := 0;
for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
if B in Buttons then Inc(ButtonCount);
ButtonGroupWidth := 0;
if ButtonCount <> 0 then
ButtonGroupWidth := ButtonWidth * ButtonCount +
ButtonSpacing * (ButtonCount - 1);
if DlgType <> mtCustom
then Caption := GetMsgCaption(DlgType, ACtrlSkinData)
else Caption := Application.Title;
// add label
Result.Message := TbsSkinStdLabel.Create(Result);
with Result.Message do
begin
Font := ADefaultFont;
DefaultFont := ADefaultFont;
UseSkinFont := AUseSkinFont;
SkinDataName := AMessageLabelSkinDataName;
SkinData := ACtrlSkinData;
Name := 'Message';
Parent := Result;
AutoSize := True;
Caption := Msg;
Left := 50;
Top := 15;
X := Left + Width;
end;
IconID := IconIDs[DlgType];
with TImage.Create(Result) do
begin
Name := 'Image';
Parent := Result;
Picture.Icon.Handle := LoadIcon(0, IconID);
Y := Result.Message.Top + Result.Message.Height div 2 - 16;
if Y < 10 then Y := 10;
SetBounds(5, Y, 32, 32);
end;
ClientHeight := 50 + ButtonHeight + Result.Message.Height;
if ButtonGroupWidth < X
then
ClientWidth := X + 40
else
ClientWidth := ButtonGroupWidth + 40;
// "Do not display this message again" flag
if AShowAgainFlag
then
begin
ClientHeight := ClientHeight + 40;
Result.DisplayCheckBox := TbsSkinCheckRadioBox.Create(Result);
with Result.DisplayCheckBox do
begin
Name := 'checkbox';
DefaultHeight := 30;
Checked := not AShowAgainFlagValue;
Parent := Result;
DefaultFont := ADefaultFont;
UseSkinFont := AUseSKinFont;
SkinData := ACtrlSkinData;
Y := Result.ClientHeight - ButtonHeight - 50;
if (ACtrlSkinData <> nil) and (ACtrlSkinData.ResourceStrData <> nil)
then
begin
Caption := ACtrlSkinData.ResourceStrData.GetResStr('MSG_CAP_SHOWFLAG');
if Caption = '' then Caption := BS_MSG_CAP_SHOWFLAG;
end
else
Caption := BS_MSG_CAP_SHOWFLAG;
if (FIndex <> -1) and UseSkinFont
then
begin
Result.Canvas.Font.Name := FontName;
Result.Canvas.Font.Height := FontHeight;
end
else
Result.Canvas.Font.Assign(ADefaultFont);
W := Result.Canvas.TextWidth(Caption);
W := W + 30;
if Result.ClientWidth < W + 30 then Result.ClientWidth := W + 30;
SetBounds(5, Y, W + 25, DefaultHeight);
end;
end;
if Width > Result.BSF.GetMaxWidth
then
Width := Result.BSF.GetMaxWidth
else
if Width < Result.BSF.GetMinWidth
then
Width := Result.BSF.GetMinWidth;
// add buttons
if mbOk in Buttons then DefaultButton := mbOk else
if mbYes in Buttons then DefaultButton := mbYes else
DefaultButton := mbRetry;
if mbCancel in Buttons then CancelButton := mbCancel else
if mbNo in Buttons then CancelButton := mbNo else
CancelButton := mbOk;
X := (ClientWidth - ButtonGroupWidth) div 2;
for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
if B in Buttons then
with TbsSkinButton.Create(Result) do
begin
Parent := Result;
Name := ButtonNames[B];
CanFocused := True;
Caption := GetButtonCaption(B, ACtrlSkinData);
ModalResult := ModalResults[B];
if B = DefaultButton then Default := True;
if B = CancelButton then Cancel := True;
DefaultHeight := ButtonHeight;
SetBounds(X, Result.ClientHeight - ButtonHeight - 10,
ButtonWidth, ButtonHeight);
DefaultFont := ADefaultButtonFont;
UseSkinFont := AUseSkinFont;
Inc(X, ButtonWidth + ButtonSpacing);
if B = mbHelp then
OnClick := Result.HelpButtonClick;
SkinDataName := AButtonSkinDataName;
SkinData := ACtrlSkinData;
end;
end;
end;
function CreateWideMessageDialog(const Msg: WideString; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; ASkinData, ACtrlSkinData: TbsSkinData;
AButtonSkinDataName: String; AMessageLabelSkinDataName: String;
ADefaultFont: TFont; ADefaultButtonFont: TFont; AUseSkinFont: Boolean;
AAlphaBlend, AAlphaBlendAnimation: Boolean; AAlphaBlendValue: Byte;
MX, MY: Integer): TbsMessageForm;
var
BI, ButtonWidth,
ButtonHeight, ButtonSpacing, ButtonCount, ButtonGroupWidth, X, Y: Integer;
B, DefaultButton, CancelButton: TMsgDlgBtn;
IconID: PChar;
W: Integer;
begin
Result := TbsMessageForm.CreateEx(Application, MX, MY);
with Result do
begin
with BSF do
begin
SkinData := ASkinData;
MenusSkinData := ACtrlSkinData;
AlphaBlend := AAlphaBlend;
AlphaBlendAnimation := AAlphaBlendAnimation;
AlphaBlendValue := AAlphaBlendValue;
end;
ButtonWidth := 70;
//
if (ACtrlSkinData <> nil) and (not ACtrlSkinData.Empty)
then
begin
BI := ACtrlSkinData.GetControlIndex(AButtonSkinDataName);
if (BI <> -1) and
(TbsDataSkinControl(ACtrlSkinData.CtrlList.Items[BI]) is TbsDataSkinButtonControl)
then
begin
with TbsDataSkinButtonControl(ACtrlSkinData.CtrlList.Items[BI]) do
ButtonHeight := SkinRect.Bottom - SkinRect.Top;
end
else
ButtonHeight := 25;
end
else
ButtonHeight := 25;
//
ButtonSpacing := 10;
ButtonCount := 0;
for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
if B in Buttons then Inc(ButtonCount);
ButtonGroupWidth := 0;
if ButtonCount <> 0 then
ButtonGroupWidth := ButtonWidth * ButtonCount +
ButtonSpacing * (ButtonCount - 1);
if DlgType <> mtCustom
then Caption := GetMsgCaption(DlgType, ACtrlSkinData)
else Caption := Application.Title;
// message text
{$IFDEF TNTUNICODE}
Result.WideMessage := TTNTLabel.Create(Result);
with Result.WideMessage do
begin
Transparent := True;
Font := ADefaultFont;
if (ACtrlSkinData <> nil) and not ACtrlSkinData.Empty
then
Font.Color := ACtrlSkinData.SkinColors.cBtnText;
Name := 'Message';
Parent := Result;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -