FlatStyleBar Pro 教程:从入门到精通,打造专业级扁平化界面
FlatStyleBar(通常指代的是在 Delphi/C++ Builder 中使用的 TFlatStyle 系列控件,如 TFlatToolBar, TFlatStatusBar 等)是一个经典且功能强大的界面美化库,它通过一套统一的样式引擎,让开发者能够轻松创建出符合现代设计趋势的扁平化界面。

本教程将分为四个部分:
- 入门篇:核心概念与环境搭建
- 进阶篇:核心控件深度剖析
- 精通篇:高级技巧与主题定制
- 实战篇:一个完整界面的构建流程
第一部分:入门篇 - 核心概念与环境搭建
1 什么是扁平化设计?
扁平化设计是一种去除多余装饰(如渐变、阴影、纹理)的设计风格,它强调简洁、清晰和直接的沟通,核心元素包括:
- 二维平面感:界面元素看起来是平的,没有立体感。
- 大胆的色彩:使用鲜明、高饱和度的色彩来区分功能区域。
- 清晰的排版:注重字体、字号和间距,保证信息层级分明。
- 简洁的图标:使用线条简洁、意义明确的图标。
FlatStyleBar 就是实现这种设计风格的有力工具。
2 环境准备
- 安装库:你需要获取 FlatStyleBar 的库文件,通常它是一个
.pas和.dcr文件的集合,将它们复制到你的 Delphi/C++ Builder 的Source或Lib目录下。 - 安装控件面板:在 Delphi 的
Component -> Install Packages...中,添加 FlatStyleBar 的.dpk文件(如果提供)或手动编译安装。 - 放置控件:安装成功后,在
Standard或新增的FlatStyle面板中,你就能看到TFlatToolBar,TFlatStatusBar,TFlatGauge等控件了。
3 核心属性:FlatStyle
这是整个库的灵魂,几乎所有 TFlat* 控件都有一个关键的 FlatStyle 属性,它决定了控件的外观和行为。

fsStandard:经典风格,有轻微的边框和凹凸感,点击时有动态效果,这是最常用的风格。fsBump:凸起风格,控件看起来像是从背景中“凸”出来的。fsFlat:完全扁平,无边框,无凹凸感,完全融入背景,适合需要极简设计的场景。fsExplorer:类似 Windows 资源管理器工具栏的风格。fsOffice2003:模仿 Office 2003 的风格。
Pro Tip:在一个应用程序中,尽量为所有相关控件设置统一的 FlatStyle,以保持视觉一致性。
第二部分:进阶篇 - 核心控件深度剖析
我们将逐一解析最常用的几个控件,并揭示其 Pro 级用法。
1 TFlatToolBar - 工具栏之王
TFlatToolBar 是替代标准 TToolBar 的首选。
基础设置:

FlatStyle:统一设置为fsStandard或fsBump。EdgeBorders:决定工具栏的哪些边显示边框,通常设置为[ebTop, ebBottom]或[ebLeft, ebRight],让它看起来像一个独立的区域。Glyph:为工具栏按钮设置图标,这是最重要的部分。
Pro 级技巧:
-
自定义按钮绘制:
TFlatToolBar的按钮 (TFlatToolButton) 默认支持Caption和Glyph,但如果你想实现更复杂的效果(如文字在图标下方、组合图标等),可以重写OnDrawButton事件。procedure TMyForm.FlatToolBar1DrawButton(Sender: TObject; AButton: TFlatToolButton; const ARect: TRect; State: TButtonState; var DefaultDraw: Boolean); begin DefaultDraw := False; // 告诉控件不要自己绘制 // 绘制背景(根据状态高亮) if State = bsHot then Canvas.Brush.Color := $F0F0F0 else Canvas.Brush.Color := FlatToolBar1.Color; Canvas.FillRect(ARect); // 绘制图标 if AButton.Glyph <> nil then Canvas.Draw(ARect.Left + 5, ARect.Top + 5, AButton.Glyph); // 绘制文字 Canvas.Font.Color := clGray30; Canvas.TextOut(ARect.Left + 5, ARect.Top + AButton.Glyph.Height + 10, AButton.Caption); end; -
分隔符的美化:默认的分隔符是一条简单的竖线,你可以通过设置
TFlatToolButton的Style为tbsSeparator,然后调整其宽度来创建更优雅的间距,或者用自定义的图片作为分隔符。
2 TFlatStatusBar - 状态栏专家
TFlatStatusBar 用于显示程序状态信息。
基础设置:
FlatStyle:与工具栏保持一致。Panels:通过Panels编辑器添加多个状态面板。AutoHint:设置为True,当鼠标悬停在面板上时,可以显示Hint信息。
Pro 级技巧:
- 动态信息显示:在代码中动态更新面板内容。
// 在操作完成后更新状态 FlatStatusBar1.Panels[0].Text := '操作完成'; FlatStatusBar1.Panels[1].Text = Format('共处理 %d 条记录', [RecordCount]); - 进度条集成:
TFlatStatusBar可以直接嵌入TFlatGauge进度条,只需在Panels中添加一个面板,并将其Style设置为psOwnerDraw,然后在OnDrawPanel事件中手动绘制进度条。
3 TFlatGauge - 进度条美化
TFlatGauge 是一个外观现代的进度条。
Pro 级技巧:
- 颜色自定义:通过
BarColor属性可以改变进度条的颜色,使其与应用主题更搭。 - 文本显示:
ShowText属性控制是否显示百分比文本。 - 平滑度:
Position属性可以设置为小数,实现平滑的动画效果。
4 TFlatComboBox 和 TFlatEdit - 输入控件
这些控件替代了标准的 TComboBox 和 TEdit,提供了统一的扁平化外观。
Pro 级技巧:
-
边框颜色:
TFlatEdit有一个BorderColor属性,你可以在它获得或失去焦点时动态改变颜色,提供即时的视觉反馈。procedure TMyForm.FlatEdit1Enter(Sender: TObject); begin (Sender as TFlatEdit).BorderColor := clBlue; end; procedure TMyForm.FlatEdit1Exit(Sender: TObject); begin (Sender as TFlatEdit).BorderColor := clGray; end;
第三部分:精通篇 - 高级技巧与主题定制
1 统一的颜色管理
专业应用的界面颜色是协调统一的,不要在每个控件上硬编码颜色。
方案:使用常量或 TColor 变量
unit uColors; interface // 主色调 const cMainColor = $0078D7; // 微软蓝 cMainLightColor = $106EBE; // 主色调的深色版本 cMainLighterColor = $E1F5FE; // 主色调的浅色版本 cBackgroundColor = $F5F5F5; // 背景色 cTextColor = $212121; // 主要文字颜色 cTextColorHint = $757575; // 次要文字颜色 implementation end.
在你的窗体中引用这些常量:
FlatToolBar1.Color := cMainColor; FlatStatusBar1.Color := cMainColor; FlatEdit1.Color := cBackgroundColor; FlatEdit1.Font.Color := cTextColor;
2 主题切换(高级)
如果需要实现深色模式或多主题切换,可以这样做:
-
定义主题记录:
TTheme = record MainColor, BGColor, TextColor: TColor; end; var LightTheme, DarkTheme: TTheme;
-
初始化主题:
LightTheme.MainColor := $0078D7; LightTheme.BGColor := $F5F5F5; LightTheme.TextColor := $212121; DarkTheme.MainColor := $004C7C; DarkTheme.BGColor := $121212; DarkTheme.TextColor := $E0E0E0;
-
创建应用主题的函数:
procedure ApplyTheme(const ATheme: TTheme); begin FlatToolBar1.Color := ATheme.MainColor; FlatStatusBar1.Color := ATheme.MainColor; Self.Color := ATheme.BGColor; // ... 应用到所有控件 end;
-
在需要时调用:
// 在菜单点击事件中 procedure TMyForm.miDarkModeClick(Sender: TObject); begin ApplyTheme(DarkTheme); end;
3 图标的选择
扁平化界面的成功与否,一半取决于图标。
- 风格统一:选择同一套图标库(如 Material Icons, FontAwesome, Fluent UI Icons)。
- 线条简洁:选择线性图标,避免使用填充过度的复杂图标。
- 尺寸一致:确保所有图标的视觉大小和线条粗细基本一致。
第四部分:实战篇 - 一个完整界面的构建流程
假设我们要构建一个简单的文本编辑器界面。
-
规划布局:
- 顶部:
TFlatToolBar(新建、打开、保存、分隔符、剪切、复制、粘贴) - 中间:
TMemo - 底部:
TFlatStatusBar(显示行号、列号和当前状态)
- 顶部:
-
设置窗体:
Form1.BorderStyle := bsSizeable;Form1.Position := poScreenCenter;
-
放置和配置
TFlatToolBar:FlatToolBar1.FlatStyle := fsBump;FlatToolBar1.EdgeBorders := [ebTop, ebBottom];FlatToolBar1.Images := ImageList1;(确保ImageList1中有对应的图标)- 在
FlatToolBar1中添加TFlatToolButton,设置Style为ttsButton,ImageIndex为对应的图标索引,Caption为功能名称。
-
放置和配置
TMemo:Memo1.Align := alClient;// 让 Memo 填充剩余空间Memo1.ScrollBars := ssBoth;- 为了美观,可以给 Memo 加一个
TBevel或TShape作为边框,或者使用一个TPanel作为容器,设置其BevelOuter := bvNone和Color,然后将Memo1放在里面并设置BevelWidth := 1。
-
放置和配置
TFlatStatusBar:FlatStatusBar1.Align := alBottom;FlatStatusBar1.FlatStyle := fsBump;// 与工具栏一致- 打开
Panels编辑器,添加三个面板。Panels[0].Text := '就绪';Panels[1].Width := 150;// 用于显示行号和列号Panels[2].Width := 100;// 用于显示其他状态
-
编写事件处理代码:
-
工具栏按钮:
procedure TMyForm.FlatToolBar1Click(Sender: TObject; Button: TFlatToolButton); begin case Button.Tag of 0: NewFile; // Tag=0 对应新建 1: OpenFile; // Tag=1 对应打开 2: SaveFile; // Tag=2 对应保存 // ... 其他按钮 end; end; -
Memo 事件:实时更新状态栏。
procedure TMyForm.Memo1Change(Sender: TObject); begin FlatStatusBar1.Panels[0].Text := '已修改'; end; procedure TMyForm.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Line, Col: Integer; begin Line := Memo1.CaretPos.Y + 1; Col := Memo1.CaretPos.X + 1; FlatStatusBar1.Panels[1].Text := Format('行: %d, 列: %d', [Line, Col]); end;
-
-
最终调整:
- 运行程序,检查整体效果。
- 微调
FlatToolBar1的ButtonWidth和ButtonHeight,使其与图标完美匹配。 - 检查所有控件的
Font和Color是否与你的颜色方案一致。
Pro 级设计心法
- 一致性是王道:颜色、字体、圆角、间距、风格,必须在整个应用中保持一致。
- 少即是多:扁平化设计的核心是去除冗余,只保留对用户完成任务所必需的元素。
- 视觉反馈:无论是按钮点击、输入框聚焦还是操作进行中,都要给予用户清晰的视觉反馈。
- 拥抱留白:合理的留白能让界面呼吸,提升内容的可读性和高级感。
- 从模仿到创造:多观察优秀的设计作品(如微软 Fluent Design、Google Material Design),理解其背后的设计原则,然后应用到自己的项目中。
通过掌握以上技巧和心法,你将不再仅仅是一个“会用” FlatStyleBar 的开发者,而是一个能够“驾驭”它,创造出专业、美观、现代化界面的“Pro”级设计师。
