📄 suititlebar.pas
字号:
procedure TsuiTitleBar.SetAutoSize2(Value: Boolean);
begin
m_AutoSize := Value;
if Sections.Count > 0 then
Height := Sections.Items[0].Picture.Height
else
m_AutoSize := false;
end;
procedure TsuiTitleBar.SetButtonInterval(const Value: Integer);
begin
m_ButtonInterval := Value;
Repaint();
end;
procedure TsuiTitleBar.SetButtons(const Value: TsuiTitleBarButtons);
begin
m_Buttons.Assign(Value);
end;
procedure TsuiTitleBar.SetCaption(const Value: TCaption);
begin
m_Caption := Value;
Repaint();
end;
procedure TsuiTitleBar.SetSections(const Value: TsuiTitleBarSections);
begin
m_Sections.Assign(Value);
end;
procedure TsuiTitleBar.SetUIStyle(const Value: TsuiUIStyle);
var
i : Integer;
OutUIStyle : TsuiUIStyle;
begin
m_UIStyle := Value;
if m_Custom then
Exit;
Sections.Clear();
if UsingFileTheme(m_FileTheme, m_UIStyle, OutUIStyle) then
UpdateFileTheme()
else
UpdateInsideTheme(OutUIStyle);
for i := 0 to m_Buttons.Count - 1 do
m_Buttons.Items[i].UIStyle := OutUIStyle;
m_DefPopupMenu.UIStyle := OutUIStyle;
m_DefPopupMenu.FileTheme := m_FileTheme;
if InForm() then
SetFormRoundCorner(m_RoundCorner);
if not m_SelfChanging then
begin
{$IFDEF RES_MACOS}
if m_UIStyle = MacOS then
Font.Color := clBlack
else
{$ENDIF}
Font.Color := clWhite;
end;
AutoSize := true;
Repaint();
end;
procedure TsuiTitleBar.SetFormRoundCorner(Round: Integer);
var
R : TRect;
Rgn : HRGN;
TempRgn: HRGN;
Form : TCustomForm;
begin
Form := GetParentForm(self);
if Form = nil then
Exit;
R := Form.ClientRect;
Rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right + 1, R.Bottom + 1, Round, Round);
TempRgn := CreateRectRgn(
Form.ClientRect.Left,
Form.ClientRect.Bottom,
Form.ClientRect.Left + Round * 2,
Form.ClientRect.Bottom - Round * 2
);
CombineRgn(Rgn, Rgn, TempRgn, RGN_OR);
DeleteObject(TempRgn);
TempRgn := CreateRectRgn(
Form.ClientRect.Right,
Form.ClientRect.Bottom,
Form.ClientRect.Right - Round * 2,
Form.ClientRect.Bottom - Round * 2
);
CombineRgn(Rgn, Rgn, TempRgn, RGN_OR );
DeleteObject(TempRgn);
if not (csDesigning in ComponentState) then
SetWindowRgn(Form.Handle, Rgn, true);
DeleteObject(Rgn);
end;
procedure TsuiTitleBar.ProcessMaxBtn;
var
i : Integer;
begin
for i := 0 to m_Buttons.Count - 1 do
if m_Buttons.Items[i].ButtonType = suiMax then
m_Buttons.Items[i].ProcessMaxBtn();
end;
{ TsuiTitleBarSection }
procedure TsuiTitleBarSection.Assign(Source: TPersistent);
begin
if Source is TsuiTitleBarSection then
begin
Width := TsuiTitleBarSection(Source).m_Width;
Align := TsuiTitleBarSection(Source).m_Align;
Picture.Assign(TsuiTitleBarSection(Source).m_Picture);
Stretch := TsuiTitleBarSection(Source).m_Stretch;
AutoSize := TsuiTitleBarSection(Source).m_AutoSize;
end
else
inherited Assign(Source);
end;
constructor TsuiTitleBarSection.Create(Collection: TCollection);
begin
inherited;
m_Picture := TPicture.Create();
m_Width := 10;
m_Align := suiLeft;
m_Stretch := false;
m_AutoSize := false;
end;
destructor TsuiTitleBarSection.Destroy;
begin
m_Picture.Free();
m_Picture := nil;
inherited;
end;
procedure TsuiTitleBarSection.SetAlign(const Value: TsuiTitleBarAlign);
var
i : Integer;
begin
if Value = suiClient then
begin
for i := 0 to (Collection as TsuiTitleBarSections).Count - 1 do
begin
if (Collection as TsuiTitleBarSections).Items[i].Align = suiClient then
begin
MessageDlg('Sorry, only one section''s Align property can be "suiClient"', mtError, [mbOK], 0);
Exit;
end;
end;
m_Stretch := true;
end;
m_Align := Value;
(Collection as TsuiTitleBarSections).m_TitleBar.Repaint();
end;
procedure TsuiTitleBarSection.SetAutoSize(const Value: Boolean);
begin
m_AutoSize := Value;
if m_Picture.Graphic <> nil then
m_Width := m_Picture.Width;
(Collection as TsuiTitleBarSections).m_TitleBar.Repaint();
end;
procedure TsuiTitleBarSection.SetPicture(const Value: TPicture);
begin
m_Picture.Assign(Value);
if Value <> nil then
if m_AutoSize then
m_Width := m_Picture.Width;
(Collection as TsuiTitleBarSections).m_TitleBar.Repaint();
end;
procedure TsuiTitleBarSection.SetStretch(const Value: Boolean);
begin
m_Stretch := Value;
if m_Align = suiClient then
m_Stretch := true;
(Collection as TsuiTitleBarSections).m_TitleBar.Repaint();
end;
procedure TsuiTitleBarSection.SetWidth(const Value: Integer);
begin
m_Width := Value;
(Collection as TsuiTitleBarSections).m_TitleBar.Repaint();
end;
{ TsuiTitleBarSections }
function TsuiTitleBarSections.Add: TsuiTitleBarSection;
begin
Result := inherited Add() as TsuiTitleBarSection;
end;
constructor TsuiTitleBarSections.Create(TitleBar: TsuiTitleBar);
begin
Inherited Create(TsuiTitleBarSection);
m_TitleBar := TitleBar;
end;
destructor TsuiTitleBarSections.Destroy;
begin
m_TitleBar := nil;
inherited;
end;
function TsuiTitleBarSections.GetItem(Index: Integer): TsuiTitleBarSection;
begin
Result := inherited GetItem(Index) as TsuiTitleBarSection;
end;
function TsuiTitleBarSections.GetOwner: TPersistent;
begin
Result := m_TitleBar;
end;
procedure TsuiTitleBarSections.SetItem(Index: Integer;
Value: TsuiTitleBarSection);
begin
inherited SetItem(Index, Value);
end;
procedure TsuiTitleBarSections.Update(Item: TCollectionItem);
begin
inherited;
m_TitleBar.Repaint();
end;
{ TsuiTitleBarButtons }
function TsuiTitleBarButtons.Add: TsuiTitleBarButton;
begin
Result := inherited Add() as TsuiTitleBarButton;
end;
constructor TsuiTitleBarButtons.Create(TitleBar: TsuiTitleBar);
begin
Inherited Create(TsuiTitleBarButton);
m_TitleBar := TitleBar;
end;
function TsuiTitleBarButtons.GetItem(Index: Integer): TsuiTitleBarButton;
begin
Result := inherited GetItem(Index) as TsuiTitleBarButton;
end;
function TsuiTitleBarButtons.GetOwner: TPersistent;
begin
Result := m_TitleBar;
end;
procedure TsuiTitleBarButtons.SetItem(Index: Integer;
Value: TsuiTitleBarButton);
begin
inherited SetItem(Index, Value);
end;
procedure TsuiTitleBarButtons.Update(Item: TCollectionItem);
begin
inherited;
m_TitleBar.Repaint()
end;
{ TsuiTitleBarButton }
procedure TsuiTitleBarButton.Assign(Source: TPersistent);
begin
if Source is TsuiTitleBarButton then
begin
Visible := TsuiTitleBarButton(Source).m_Visible;
ButtonType := TsuiTitleBarButton(Source).m_ButtonType;
Transparent := TsuiTitleBarButton(Source).m_Transparent;
Top := TsuiTitleBarButton(Source).m_Top;
UIStyle := TsuiTitleBarButton(Source).m_UIStyle;
PicNormal.Assign(TsuiTitleBarButton(Source).m_PicNormal);
PicMouseOn.Assign(TsuiTitleBarButton(Source).m_PicMouseOn);
PicMouseDown.Assign(TsuiTitleBarButton(Source).m_PicMouseDown);
ControlBoxMenu := TsuiTitleBarButton(Source).m_ControlBoxMenu;
end
else
inherited Assign(Source);
end;
constructor TsuiTitleBarButton.Create(Collection: TCollection);
begin
inherited;
m_Visible := true;
m_ButtonType := suiCustom;
m_Transparent := false;
m_Top := 2;
m_PicNormal := TPicture.Create();
m_PicMouseOn := TPicture.Create();
m_PicMouseDown := TPicture.Create();
UIStyle := SUI_THEME_DEFAULT;
ControlBoxMenu := nil;
end;
destructor TsuiTitleBarButton.Destroy;
begin
m_PicMouseDown.Free();
m_PicMouseDown := nil;
m_PicMouseOn.Free();
m_PicMouseOn := nil;
m_PicNormal.Free();
m_PicNormal := nil;
inherited;
end;
procedure TsuiTitleBarButton.DoClick;
var
ParentForm : TCustomForm;
Point : TPoint;
begin
if (Collection as TsuiTitleBarButtons).m_TitleBar = nil then
Exit;
ParentForm := GetParentForm((Collection as TsuiTitleBarButtons).m_TitleBar);
if ParentForm = nil then
Exit;
case m_ButtonType of
suiMax :
begin
if ParentForm.WindowState = wsMaximized then
ParentForm.WindowState := wsNormal
else
begin
ParentForm.WindowState := wsMaximized;
if not (Collection as TsuiTitleBarButtons).m_TitleBar.InForm() then
PlaceControl(ParentForm, GetWorkAreaRect());
end;
ProcessMaxBtn();
end;
suiMin :
begin
if ParentForm = Application.MainForm then
SendMessage(Application.MainForm.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0)
else
ShowWindow(ParentForm.Handle, SW_SHOWMINIMIZED);
end;
suiClose :
begin
ParentForm.Close();
end;
suiControlBox :
begin
if Assigned(m_ControlBoxMenu) then
begin
Point.X := 0;
Point.Y := (Collection as TsuiTitleBarButtons).m_TitleBar.Height;
Point := (Collection as TsuiTitleBarButtons).m_TitleBar.ClientToScreen(Point);
m_ControlBoxMenu.Popup(Point.X, Point.Y);
end;
end;
suiCustom :
begin
end;
end; // case
end;
procedure TsuiTitleBarButton.ProcessMaxBtn;
procedure InMAX(FileTheme : TsuiFileTheme);
var
OutUIStyle : TsuiUIStyle;
begin
if UsingFileTheme(FileTheme, m_UIStyle, OutUIStyle) then
begin
FileTheme.GetBitmap(SUI_THEME_TITLEBAR_BUTTON_IMAGE, PicNormal.Bitmap, 18, 10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -