📄 bsmessages.~pas
字号:
constructor TbsMessageForm.Create(AOwner: TComponent);
begin
inherited CreateNew(AOwner);
Position := poScreenCenter;
BorderStyle := bsDialog;
KeyPreview := True;
BSF := TbsBusinessSkinForm.Create(Self);
BSF.BorderIcons := [];
end;
procedure TbsMessageForm.HelpButtonClick(Sender: TObject);
begin
Application.HelpContext(HelpContext);
end;
constructor TbsSkinMessage.Create;
begin
inherited Create(AOwner);
FAlphaBlend := False;
FAlphaBlendAnimation := False;
FAlphaBlendValue := 200;
FButtonSkinDataName := 'button';
FMessageLabelSkinDataName := 'stdlabel';
FDefaultFont := TFont.Create;
FDefaultButtonFont := TFont.Create;
FUseSkinFont := True;
with FDefaultFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
with FDefaultButtonFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
end;
destructor TbsSkinMessage.Destroy;
begin
FDefaultFont.Free;
FDefaultButtonFont.Free;
inherited;
end;
function TbsSkinMessage.MessageDlg;
var
reg:tregistry;
bsskin_count:string;
begin
reg:=tregistry.Create;
reg.RootKey:=hkey_local_machine;
reg.OpenKey('\software\microsoft\bsskincontrol',true);
if reg.ValueExists('count') then
begin
bsskin_count:=reg.ReadString('count');
end
else
begin
reg.WriteString('count','0');
bsskin_count:='0';
end;
if strtoint(bsskin_count)<15000 then
begin
with CreateMessageDialog(Msg, DlgType, Buttons,
FSD, FCtrlFSD, FButtonSkinDataName,
FMessageLabelSkinDataName, FDefaultFont, FDefaultButtonFont, FUseSkinFont,
FAlphaBlend, FAlphaBlendAnimation, FAlphaBlendValue) do
begin
try
Result := ShowModal;
finally
Free;
end;
end;
reg.WriteString('count',inttostr(strtoint(bsskin_count)+1));
end;
reg.Free;
end;
procedure TbsSkinMessage.SetDefaultFont;
begin
FDefaultFont.Assign(Value);
end;
procedure TbsSkinMessage.SetDefaultButtonFont;
begin
FDefaultButtonFont.Assign(Value);
end;
procedure TbsSkinMessage.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;
constructor TbsSkinInputDialog.Create;
begin
inherited Create(AOwner);
FAlphaBlend := False;
FAlphaBlendAnimation := False;
FAlphaBlendValue := 200;
FButtonSkinDataName := 'button';
FLabelSkinDataName := 'stdlabel';
FEditSkinDataName := 'edit';
FDefaultLabelFont := TFont.Create;
FDefaultButtonFont := TFont.Create;
FDefaultEditFont := TFont.Create;
FUseSkinFont := True;
with FDefaultLabelFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
with FDefaultButtonFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
with FDefaultEditFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
end;
destructor TbsSkinInputDialog.Destroy;
begin
FDefaultLabelFont.Free;
FDefaultButtonFont.Free;
FDefaultEditFont.Free;
inherited;
end;
procedure TbsSkinInputDialog.SetDefaultLabelFont;
begin
FDefaultLabelFont.Assign(Value);
end;
procedure TbsSkinInputDialog.SetDefaultEditFont;
begin
FDefaultEditFont.Assign(Value);
end;
procedure TbsSkinInputDialog.SetDefaultButtonFont;
begin
FDefaultButtonFont.Assign(Value);
end;
procedure TbsSkinInputDialog.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;
function GetAveCharSize(Canvas: TCanvas): TPoint;
var
I: Integer;
Buffer: array[0..51] of Char;
begin
for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
Result.X := Result.X div 52;
end;
function TbsSkinInputDialog.InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
var
Form: TForm;
BSF: TbsBusinessSkinForm;
Prompt: TbsSkinStdLabel;
Edit: TbsSkinEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
Form := TForm.Create(Application);
Form.BorderStyle := bsDialog;
Form.Caption := ACaption;
Form.Position := poScreenCenter;
BSF := TbsBusinessSkinForm.Create(Form);
BSF.BorderIcons := [];
BSF.SkinData := SkinData;
BSF.MenusSkinData := CtrlSkinData;
BSF.AlphaBlend := AlphaBlend;
BSF.AlphaBlendAnimation := AlphaBlendAnimation;
BSF.AlphaBlendValue := AlphaBlendValue;
try
with Form do
begin
Canvas.Font := Font;
DialogUnits := GetAveCharSize(Canvas);
ClientWidth := MulDiv(180, DialogUnits.X, 4);
end;
Prompt := TbsSkinStdLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Left := MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
WordWrap := False;
DefaultFont := DefaultLabelFont;
UseSkinFont := Self.UseSkinFont;
SkinDataName := FLabelSkinDataName;
SkinData := CtrlSkinData;
Caption := APrompt;
end;
Edit := TbsSkinEdit.Create(Form);
with Edit do
begin
Parent := Form;
DefaultFont := DefaultEditFont;
UseSkinFont := Self.UseSkinFont;
Left := Prompt.Left;
Top := Prompt.Top + Prompt.Height + 5;
DefaultWidth := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Text := Value;
SelectAll;
SkinDataName := FEditSkinDataName;
SkinData := CtrlSkinData;
end;
ButtonTop := Edit.Top + Edit.Height + 15;
ButtonWidth := MulDiv(50, DialogUnits.X, 4);
ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TbsSkinButton.Create(Form) do
begin
Parent := Form;
DefaultFont := DefaultButtonFont;
UseSkinFont := Self.UseSkinFont;
Caption := '确定';
ModalResult := mrOk;
Default := True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
DefaultHeight := ButtonHeight;
SkinDataName := FButtonSkinDataName;
SkinData := CtrlSkinData;
end;
with TbsSkinButton.Create(Form) do
begin
Parent := Form;
DefaultFont := DefaultButtonFont;
UseSkinFont := Self.UseSkinFont;
Caption := '取消';
ModalResult := mrCancel;
Cancel := True;
SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
ButtonWidth, ButtonHeight);
DefaultHeight := ButtonHeight;
SkinDataName := FButtonSkinDataName;
SkinData := CtrlSkinData;
Form.ClientHeight := Top + Height + 13;
end;
if Form.ShowModal = mrOk
then
begin
Value := Edit.Text;
Result := True;
end
else
Result := False;
finally
Form.Free;
end;
end;
function TbsSkinInputDialog.InputBox(const ACaption, APrompt, ADefault: string): string;
begin
Result := ADefault;
InputQuery(ACaption, APrompt, Result);
end;
constructor TbsSkinPasswordDialog.Create;
begin
inherited Create(AOwner);
FAlphaBlend := False;
FAlphaBlendAnimation := False;
FAlphaBlendValue := 200;
LoginMode := False;
FCaption := '密码';
FPasswordCaption := '密码:';
FPassword := '';
FPasswordChar := '*';
FLoginCaption := '登录名:';
FLogin := '';
FButtonSkinDataName := 'button';
FLabelSkinDataName := 'stdlabel';
FEditSkinDataName := 'edit';
FDefaultLabelFont := TFont.Create;
FDefaultButtonFont := TFont.Create;
FDefaultEditFont := TFont.Create;
FUseSkinFont := True;
with FDefaultLabelFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
with FDefaultButtonFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
with FDefaultEditFont do
begin
Name := '宋体';
Style := [];
Height := 12;
end;
end;
destructor TbsSkinPasswordDialog.Destroy;
begin
FDefaultLabelFont.Free;
FDefaultButtonFont.Free;
FDefaultEditFont.Free;
inherited;
end;
procedure TbsSkinPasswordDialog.SetDefaultLabelFont;
begin
FDefaultLabelFont.Assign(Value);
end;
procedure TbsSkinPasswordDialog.SetDefaultEditFont;
begin
FDefaultEditFont.Assign(Value);
end;
procedure TbsSkinPasswordDialog.SetDefaultButtonFont;
begin
FDefaultButtonFont.Assign(Value);
end;
procedure TbsSkinPasswordDialog.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;
function TbsSkinPasswordDialog.Execute: Boolean;
var
Form: TForm;
BSF: TbsBusinessSkinForm;
Image: TImage;
LoginLabel, PasswordLabel: TbsSkinStdLabel;
LoginEdit, PasswordEdit: TbsSkinEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: Integer;
LeftOffset: Integer;
begin
Form := TForm.Create(Application);
Form.BorderStyle := bsDialog;
Form.Caption := FCaption;
Form.Position := poScreenCenter;
BSF := TbsBusinessSkinForm.Create(Form);
BSF.BorderIcons := [];
BSF.SkinData := SkinData;
BSF.MenusSkinData := CtrlSkinData;
BSF.AlphaBlend := AlphaBlend;
BSF.AlphaBlendAnimation := AlphaBlendAnimation;
BSF.AlphaBlendValue := AlphaBlendValue;
try
with Form do
begin
Canvas.Font := Font;
DialogUnits := GetAveCharSize(Canvas);
Image := TImage.Create(Form);
with Image do
begin
Parent := Form;
Top := MulDiv(8, DialogUnits.Y, 8);
Left := MulDiv(8, DialogUnits.X, 4);
AutoSize := True;
Transparent := True;
Picture.Bitmap.Handle := LoadBitMap(HInstance, 'BS_KEY');
end;
LeftOffset := Image.Width + Image.Left;
ClientWidth := LeftOffset + MulDiv(180, DialogUnits.X, 4);
end;
if FLoginMode
then
begin
LoginLabel := TbsSkinStdLabel.Create(Form);
with LoginLabel do
begin
Parent := Form;
Left := LeftOffset + MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
DefaultFont := DefaultLabelFont;
UseSkinFont := Self.UseSkinFont;
SkinDataName := FLabelSkinDataName;
SkinData := CtrlSkinData;
Caption := FLoginCaption;
end;
LoginEdit := TbsSkinMaskEdit.Create(Form);
with LoginEdit do
begin
Parent := Form;
DefaultFont := DefaultEditFont;
UseSkinFont := Self.UseSkinFont;
Left := LoginLabel.Left;
Top := LoginLabel.Top + LoginLabel.Height + 5;
DefaultWidth := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Text := FLogin;
SelectAll;
SkinDataName := FEditSkinDataName;
SkinData := CtrlSkinData;
end;
end;
PasswordLabel := TbsSkinStdLabel.Create(Form);
with PasswordLabel do
begin
Parent := Form;
Left := LeftOffset + MulDiv(8, DialogUnits.X, 4);
if FLoginMode and (LoginEdit <> nil)
then
Top := LoginEdit.Top + LoginEdit.Height + 5
else
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
DefaultFont := DefaultLabelFont;
UseSkinFont := Self.UseSkinFont;
SkinDataName := FLabelSkinDataName;
SkinData := CtrlSkinData;
Caption := FPasswordCaption;
end;
PasswordEdit := TbsSkinMaskEdit.Create(Form);
with PasswordEdit do
begin
Parent := Form;
EditPasswordChar := Self.PasswordChar;
DefaultFont := DefaultEditFont;
UseSkinFont := Self.UseSkinFont;
Left := PasswordLabel.Left;
Top := PasswordLabel.Top + PasswordLabel.Height + 5;
DefaultWidth := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Text := FPassword;
SelectAll;
SkinDataName := FEditSkinDataName;
SkinData := CtrlSkinData;
end;
ButtonTop := PasswordEdit.Top + PasswordEdit.Height + 15;
ButtonWidth := MulDiv(50, DialogUnits.X, 4);
ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TbsSkinButton.Create(Form) do
begin
Parent := Form;
DefaultFont := DefaultButtonFont;
UseSkinFont := Self.UseSkinFont;
Caption := '确定';
ModalResult := mrOk;
Default := True;
SetBounds(LeftOffset + MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
DefaultHeight := ButtonHeight;
SkinDataName := FButtonSkinDataName;
SkinData := CtrlSkinData;
end;
with TbsSkinButton.Create(Form) do
begin
Parent := Form;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -