Using FireMonkey Layouts
FireMonkey has many layout controls to choose from. Come learn the differences and how to use them to create dynamic, multi-platform user interfaces.
FireMonkey Layouts with Delphi
FireMonkey Layouts with C++Builder
Understanding and using FireMonkey Layouts
FireMonkey and the FireUI makes it easy to build one form to rule all the platforms. Combining layout controls and making use of Anchors, Alignment, Padding and Margins it is easy to make one form that looks and works great on all platforms.
Anchors
- Position relative to one or more edge(s) of parent:
- Top
- Bottom
- Left
- Right
- Default is Top, Left
- Moves with parent resize
- Each control has 0 to 4 anchors
Alignment
- Aligns control within parent, setting anchors, size and position.
- Default is None.
- Anchor and fill along edge:
- Top, Bottom, Left, Right
- Fill parent, but preserve aspect ratio:
- Fit, FitLeft, FitRight
- Fill along one side of the parent (priority over other edge alignments):
- MostBottom, MostTop, MostLeft, MostRight
- Resize only on one axis (width or height)
- Vertical, VertCenter, Horizontal, HorzCenter
- Miscellaneous
- Client – Fills client area, less other children
- Center – No resize, just centered
- Contents – Fills client area, ignoring other children
- Scale – resizes and moves to maintain the relative position and size
Spacing – Margins and Padding
TFlowLayout
- Arrange child controls like words in a paragraph
- Controls arranged in order added to layout
- Use “Move to Front” or “Send to Back” to reorder
- Use TFlowLayoutBreak for forced line break

TGridLayout
- Arranges child controls in a grid of equal sizes
- Controls flow through grid as parent resizes
- Use ItemWidth and ItemHeight properties
- Customize margins of individual controls

TGridPanelLayout
- Creates a grid of specified rows and columns
- Does not change the anchor or size of child
- Each cell can contain 1 child control
- You set the Height, Width, Align, and Anchors of children
- Controls can span multiple cells

TScaledLayout
- Stretches child controls as it is resized at runtime
- Doesn’t respect aspect ratios of controls
- Set the Align of the TScaledLayout to Fit to maintain aspect ratio
- Some styles look better zoomed than others. The font grows – it is not a bitmap scale.
- Has properties for OriginalWidth and OriginalHeight – Compare to Width and Heightto determine scaling.

TScrollBox
- Allows children to take up more space than parent
- Usually anchored to Client
- Only anchor children to Top & Left (default)
- Scroll to see additional children
- See also: TVertScrollBox, THorzScrollBox,TFramedScrollBox and TFramedVertScrollBox
TTabControl
- Control to group child controls into tabs
- Tabs are in a stack with one visible at a time
- TabPosition := PlatformDefault to use platform default behavior
- TabPosition := None to hide navigation
- Use TTabChangeAction to animate transitions
Frames
- Reusable pieces of User Interface
- Includes
- The layout
- All the event handlers
- All the code in the unit
- Includes
- Create 1 or more Frames, then reposition based on current layout
- Examples:
- In TTabControl for phone
- Side-by-side for Tablet
- Examples:
TMultiView
- One super panel with multiple modes

- Supported modes
- PlatformDefault
- Drawer
- NavigationPane
- Panel
- Popover
- Custom
- Point to MasterPane, DetailPane and definable MasterButton
- PlatformDefault adapts to platform and orientation
- Custom supports user defined layout and behavior
Learning Resources
- FireMonkey Layout Strategies
- Layours
- Related technologies
- More layout options
- Previous Video Replays
ScaledLayout Helper
The AbsoluteToLocal and LocalToAbsolute for TScaledLayout don’t handle the scaling. I’ve created a class helper that adds new methods for dealing with scaling.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
{ TScaledLayoutHelper - interface }type TScaledLayoutHelper = class helper for TScaledLayout function LocalToAbsoluteScaled(const Point: TPointF): TPointF; function AbsoluteToLocalScaled(const Point: TPointF): TPointF; end; { TScaledLayoutHelper - implementation }function TScaledLayoutHelper.AbsoluteToLocalScaled( const Point: TPointF): TPointF; begin Result.X := Self.Position.X + Point.X * Self.Width / Self.OriginalWidth; Result.Y := Self.Position.Y + Point.Y * Self.Height / Self.OriginalHeight; end; function TScaledLayoutHelper.LocalToAbsoluteScaled( const Point: TPointF): TPointF; begin Result.X := Point.X / Self.Width / Self.OriginalWidth - Self.Position.X; Result.Y := Point.Y / Self.Height / Self.OriginalHeight - Self.Position.Y; end; |
If you look at the original implementations of AbsoluteToLocal and LocalToAbsoluteyou will see they have different execution paths and calculations based on private members, so there may be some circumstances where my new ones don’t work as expected. They did work in my tests, and I am open to feedback.
http://delphi.org/2015/12/skill-sprint-using-firemonkey-layouts/
Using FireMonkey Layouts的更多相关文章
- 改变 TMemo 的背景颜色 (Firemonkey)
说明:展示使用程序码改变 Firemonkey TMemo 的背景颜色. 适用:XE6 源码下载:[原創]Memo改背景色_XE6.zip //---------------------------- ...
- Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题
Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...
- Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、LoadFromBinStream
Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream.LoadFromStream.SaveToBinStream.LoadF ...
- Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件
Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件 表达式中的函数有 ...
- Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()
Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 ...
- Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope
Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope 如果在编写表达式时, 如果能够随意指认需要的控件就好了(通过 Owne ...
- Delphi XE2 之 FireMonkey 入门(1)
Delphi XE2 的 FireMonkey 是跨平台的, 暂时只准备看看它在 Windows 下(我是 32 位 Win7)的应用情况. 很新的东西, 相信有了它, 以后的界面将会更灵活.漂亮, ...
随机推荐
- SQLserver数据库基础
1·控制数据库的服务 运行 cmd 在控制面板输入 net start MSSQLserver (启动数据库服务) 在控制面板输入 net stop MSSQLserver ( ...
- ios常用的一些类库
在网上收集到的 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https:/ ...
- dubbo监控活跃线程数
telnet对应dubbo服务的ip+端口号 status -l 其中的active就是当前的活跃线程数 通过程序定时探测写入DB,再查询渲染出来就好了 监控报警,如果已经有监控平台,可以通过一定的规 ...
- 九度OJ 1351 数组中只出现一次的数字
题目地址:http://ac.jobdu.com/problem.php?pid=1351 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输 ...
- html元素li移动动态效果
在日常工作当中遇到了一个问题,平铺型列表修改单个内容设置排序时列表排序应与之对应.一下是一个小小的例子:简单的解决了此类问题,以浮动的形式改变当前的数据的显示顺序.有不足之处欢迎指点,后期还会做一个更 ...
- Oracle 关于事物的描述
事物在Oracle中的4种状态: commit--提交 rollback--全部回滚 savepoint name;--定义一个回滚到这里的点:例如:savepoint a; rollback to ...
- Java Web开发之详解JSP
JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...
- CheckedListBox与下拉框联动代码
private void yewubind(string id) { //给业务类型下拉框绑定业务类型数据 DataTable dtyewu = sb.SelectLast(id, 0); bool ...
- oracle日期格式数据修改
select * from INVOICE_NEW where ref_no='32308' update INVOICE_NEW set check_d=to_date('2015/11/16', ...
- li样式不显示使用overflow:hidden导致Li前面点、圈等样式不见
点评:用了overflow:hidden 会影响 list-style,即当ul 中的li 的overflow 为hidden的时候,list-style不起作用,不显示前面的点.圈等样式,在ul或l ...