📄 spmessages.pas
字号:
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 := TspSkinCheckRadioBox.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 := SP_MSG_CAP_SHOWFLAG;
end
else
Caption := SP_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.DSF.GetMaxWidth
then
Width := Result.DSF.GetMaxWidth
else
if Width < Result.DSF.GetMinWidth
then
Width := Result.DSF.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 TspSkinButton.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;
constructor TspMessageForm.CreateEx(AOwner: TComponent; X, Y: Integer);
begin
inherited CreateNew(AOwner);
DisplayCheckBox := nil;
BorderStyle := bsDialog;
KeyPreview := True;
if X < -10000
then
Self.Position := poScreenCenter
else
begin
Self.Left := X;
Self.Top := Y;
end;
DSF := TspDynamicSkinForm.Create(Self);
DSF.BorderIcons := [];
DSF.SizeAble := False;
end;
procedure TspMessageForm.HelpButtonClick(Sender: TObject);
begin
Application.HelpContext(HelpContext);
end;
constructor TspSkinMessage.Create;
begin
inherited Create(AOwner);
FShowAgainFlag := False;
FShowAgainFlagValue := False;
FAlphaBlend := False;
FAlphaBlendAnimation := False;
FAlphaBlendValue := 200;
FButtonSkinDataName := 'button';
FMessageLabelSkinDataName := 'stdlabel';
FDefaultFont := TFont.Create;
FDefaultButtonFont := TFont.Create;
FUseSkinFont := True;
with FDefaultFont do
begin
Name := 'Arial';
Style := [];
Height := 14;
end;
with FDefaultButtonFont do
begin
Name := 'Arial';
Style := [];
Height := 14;
end;
end;
destructor TspSkinMessage.Destroy;
begin
FDefaultFont.Free;
FDefaultButtonFont.Free;
inherited;
end;
procedure TspSkinMessage.SetDefaultButtonFont;
begin
FDefaultButtonFont.Assign(Value);
end;
function TspSkinMessage.CustomMessageDlgHelp;
begin
with CreateCustomMessageDialog(Msg, ACaption, AImages, AImageIndex, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
-10001, -10001) do
begin
try
HelpContext := HelpCtx;
HelpFile := HelpFileName;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
end;
function TspSkinMessage.CustomMessageDlgPos(const Msg: string;
ACaption: String; AImages: TCustomImageList; AImageIndex: Integer;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;
begin
with CreateCustomMessageDialog(Msg, ACaption, AImages, AImageIndex, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
X, Y) do
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
function TspSkinMessage.CustomMessageDlg;
begin
with CreateCustomMessageDialog(Msg, ACaption, AImages, AImageIndex, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
-10001, -10001) do
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
function TspSkinMessage.MessageDlg2;
begin
with CreateMessageDialog2(Msg, ACaption, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
-10001, -10001) do
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
function TspSkinMessage.MessageDlgHelp2;
begin
with CreateMessageDialog2(Msg, ACaption, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
-10001, -10001) do
begin
try
HelpContext := HelpCtx;
HelpFile := HelpFileName;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
end;
function TspSkinMessage.MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;
begin
with CreateMessageDialog(Msg, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
X, Y) do
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
function TspSkinMessage.WideMessageDlgPos;
begin
with CreateWideMessageDialog(Msg, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue,
X, Y) do
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
Free;
end;
end;
function TspSkinMessage.WideMessageDlg;
begin
with CreateWideMessageDialog(Msg, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue,
-10001, -10001) do
begin
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
Free;
end;
end;
end;
function TspSkinMessage.MessageDlg;
begin
with CreateMessageDialog(Msg, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
-10001, -10001) do
try
HelpContext := HelpCtx;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
function TspSkinMessage.MessageDlgHelp;
begin
with CreateMessageDialog(Msg, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue, FShowAgainFlag, FShowAgainFlagValue,
-10001, -10001) do
begin
try
HelpContext := HelpCtx;
HelpFile := HelpFileName;
Result := ShowModal;
finally
if DisplayCheckBox <> nil
then
begin
Self.ShowAgainFlagValue := not DisplayCheckBox.Checked;
end;
Free;
end;
end;
end;
procedure TspSkinMessage.SetDefaultFont;
begin
FDefaultFont.Assign(Value);
end;
procedure TspSkinMessage.Notification;
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -