上面的 ?? 有没有几个想当然的和我一样,试图用 TListBox.Items.Exchange 来交互两个项目的顺序的?如果你那么做了,恭喜您,迷茫吧~~,彷徨吧~~,陪我一起放羔羊吧~~~ p实际上官方看来也知道这个问题,在TListBox的级别上直接提供了一个 ItemsExchange 函数来完成这一工作。我想
标签: FMX
[教程]FMX 下将当前控件的相对坐标转换为屏幕坐标
好吧,在 VCL 里简单的 ClientToScreen,到了 FMX 就变得不是那么简单了。这就牵涉到了 FMX 的坐标体系,咱们不在这里的展开说明,仅提供实现的介绍: 1、调用控件的 LocalToAbsolute 将控件坐标转换为绝对坐标,这个绝对坐标是相对于 Form 的,所以不要以为它是屏幕坐标,这是人很容易
[FMX] FMX 动画类的一个辅助增强
本增强的目的是解决动画对象只支持 published 的有效的几种属性的问题,确切的说,这是一个适配器,通过匿名函数建立与非 published 属性的适配。我在 [FMX] Delphi 中 TAnimation 设计的几点值得商榷的地方 一文中讨论了 FMX 动画支持类的一些值得商榷的地方和改动,而这个增强从另一个
[FMX] FMX 拖放支持的一处小问题修正
FMX 的拖放支持实际上要比 VCL 方便一些,控件的 OnDragOver 事件的 Operation 代替了 VCL 中只能简单的 Accept。但就 10.2 版本而言,其拖放操作在 Windows 下对 DragDrop 的调用存在问题,没有调用 TControl.DragDrop 函数,造成拖放后,目标的 I
[FMX] QDAC 新增 FMX VirtualTreeView 实现
好吧,我本来不想在 QDAC 里添加 UI 相关的东西,不过 FMX 的树实在让人不爽,等 VirtualTreeView 的 FMX 版也等不到,FMX 的闭源实现到是有一些,但根据群友的反馈,也就那样吧。所以狠狠心,咬咬牙,花了近一周的时间,自己写了一个,命名为 TQVirtualTreeView,自己测试的结果,
[FMX]在 QPlugins 中 VCL 宿主使用 FMX DLL 需要手动处理的问题说明
由于众所周知的原因,FMX 的 DLL 在 FreeLibrary 时,会出现 AV 异常,这实际上包含了两方面的原因: FreeLibrary 时,未正确清理内部的计时器,造成 FreeLibrary 后,内部的计时器到指定的时间点后仍然运行,结果就出现了 AV 错误。 GDI+ 初始化和清理只能在宿主程序中执行
[FMX]在 FMX 程序中绘制单像素宽度的直线
在前面的一篇文章中,我介绍了一种绘制低品质直线的方法,但是这么做,效率上肯定要打折扣的。在和群里的朋友们一顿交流折腾后,对于绘制水平或垂直的直线,现在有两种更简单的办法来解决这一问题: 办法一:使用 FillRect 来代替 DrawLine 绘制,矩形区域的大小注意要在相应的方向上加 0.5 个像素。 [crayon
[FMX]FMX 编写 Windows 平台下 DLL 需要解决的两个问题小结
1、在 FMX.Platform.Win 中,平台退出时,没有正确释放 FApplicationHWND 窗口,这样子造成模块释放后,窗口依然存在,所以这个需要修改 FMX.Platform.Win 的代码,以修正这一问题; 2、在 FMX.Forms.Win 中, 平台退出时,没有正确释放 FTimerActionH
[FMX]在你的跨平台应用中使用剪贴板进行复制粘贴
VCL 中如何使用剪贴板咱就不说了,FMX 做为一个新的框架,提供了跨平台的剪贴板支持。FMX 对剪贴板的支持来自两个接口: IFMXClipboardService:位于 FMX.Platform.pas 中
1 2 3 4 5 6 7 8 9 10 11 |
IFMXClipboardService = interface(IInterface) ['{CC9F70B3-E5AE-4E01-A6FB-E3FC54F5C54E}'] /// <summary> /// Gets current clipboard value /// </summary> function GetClipboard: TValue; /// <summary> /// Sets new clipboard value /// </summary> procedure SetClipboard(Value: TValue); end; |
IFMXExtendedClipboard
[FMX] 在 FMX 中手动控制打印机打印内容
好吧,先说下版本:10.1.2,然后说遇到的两个 Bug: 一、字体大小的问题 打印机的字体大小错误,比如设置为10.5(五号字的大小,3.7mm),你会发现打印出的字特别小,根本与实际设置不搭别。所以在 10.1.2 时,输出文本时的字体大小需要按以下公式计算下: 字体磅数 × DPI/72 然后就没有问题了,比如现
[FMX]增强画布的 DrawBitmap 函数
不多说话,直接上源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
type TFMXCanvasHelper = class helper for TCanvas public procedure StretchDraw(R: TRectF; ABitmap: TBitmap; ADoFit, AHighSpeed: Boolean); end; { TFMXCanvasHelper } procedure TFMXCanvasHelper.StretchDraw(R: TRectF; ABitmap: TBitmap; ADoFit, AHighSpeed: Boolean); var SR: TRectF; begin SR := RectF(0, 0, ABitmap.Width, ABitmap.Height); if ADoFit then R := SR.FitInto(R); DrawBitmap(ABitmap, SR, R, 1, AHighSpeed); end; |
参数说明: R :绘制目标区域 ABitmap:要绘制的位图内容 ADoFit:是否按比例自适应目标区域大小 AHighSpeed:是否高速绘图,如果你是要绘制边缘清晰的位图,如二维码,那就要设置为 true,否则设置为 fals
[FMX]获取控件样式中的指定项目以便进行调节
FMX 的样式丰富了我们的设计,但我们在运行时想改变特定的Style的属性却没有直接的办法,下面的函数提供了一种途径,让你找到特定的样式,然后进行处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function FindStyleByName(AParent:TFMXObject;AName:String):TFMXObject; var I: Integer; AObj:TFMXObject; begin Result:=nil; for I := 0 to AParent.ChildrenCount-1 do begin AObj:=AParent.Children[I]; if AObj.StyleName=AName then Result:=AObj else Result:=FindStyleByName(AObj,AName); if Assigned(Result) then break; end; end; |
用法示例:
1 2 3 4 5 6 7 |
procedure TForm1.btnLeftApplyStyleLookup(Sender: TObject); var AText:TButtonStyleTextObject; begin AText:=FindStyleByName(Sender as TFMXObject,'text') as TButtonStyleTextObject; AText.NormalColor:=TAlphaColors.White; end; |
在 btnLeft 的
[FMX]开年第二弹:修改 FMX.Forms.pas 避免在控件中滑动被识别为点击
通过修改 FMX.Controls 单元,我们在编辑控制上滑动时,输入法自动弹出的问题算是比较完美的解决了(参考:[FMX]开年第一弹:修改 FMX.Controls 避免按住编辑框移动时弹出输入法的问题),但 FMX 依然存在着滑动时触发OnClick事件的问题。 现在我们要做的就是解决这一问题: 1、找到 FMX.
[FMX]开年第一弹:修改 FMX.Controls 避免按住编辑框移动时弹出输入法的问题
在 FMX 中,当用户在编辑框上按下时,许多场景下,是要拖动位置,但是,FMX.Controls 在 MouseDown 事件中,就调用了控件的 SetFocus ,结果就造成按下时,弹出输入法,影响拖动操作。我们可以将相应的代码那到 MouseUp 中来解决这一问题。同时,我们加一个判断,以避免将拖动识别为点击。 所
[FMX]使用 FMX 那些缺失的动画效果
FMX 里的动画做起来简单So easy! TFloatAnimation 不能对一些整数类型的属性做动态效果。 实际上,我们并不需要太沮丧,毕竟天生我材必有用,今天吃饱了明天还饿,这只是因为官方忘了将TIntAnimation注册到面板上而已,我们只需要动态创建它并设置相关属性。 [crayon-60739c678f
[转]AOne:修正Firemonkey 中英文混排折行问题(移动平台)
原文链接:[修正] Firemonkey 中英文混排折行问题(移动平台) – 龟山Aone – 博客园 问题:FMX 在移动平台的文字显示并非由该平台的原生 API 来显示,而是由 FMX.TextLayout.GPU 来处理,也许是官方没留意到中文字符的问题,造成在中英文混排折行时,有些问题
[FMX]从摄像头获取照片并转换为特定的格式
首先,我们要使用 TTakePhotoFromCamera 这个 Action 来获取一幅照片,在其 OnDidFinishTaking 事件中,可以得到一个 TBitmap 的图片。这块我们跳过代码。 然后,我们要将这个位图保存为我们希望的格式,如JPEG。默认调用它的 SaveToStream 它会保存为 PNG
[FMX] FMX.Graphics.Android 中对 GIF 判断的问题的修正
关于这个 Bug 的详情,大家可以参考:https://quality.embarcadero.com/browse/RSP-12424 Berlin 中的 FMX.Graphics.Android 实现的原始代码如下:
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 |
class function TBitmapCodecAndroid.IsGIFStream(const Stream: TStream): Boolean; const IDCharCount = 3; var PrevPosition: Int64; Builder: TStringBuilder; I: Integer; Value: Char; begin if (Stream = nil) or (Stream.Size < IDCharCount) then Exit(False); PrevPosition := Stream.Position; try Builder := TStringBuilder.Create(IDCharCount); try for I := 0 to 2 do begin Stream.ReadBuffer(Value, 1); Builder.Append(Value); end; Result := SameText(Builder.ToString, 'GIF'); finally Builder.Free; end; finally Stream.Position := PrevPosition; end; end; |
存在的问题: 第一个判定不完善,
[转]Tht:Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)
原文地址:http://blog.csdn.net/tht2009/article/details/50183721 最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass。在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemon
[教程] 在 FMX 中通过样式实现自定义样式的 TCheckBox
这个的目的是为了让大家明白如何在 FMX 中自定义样式,结合自己在实践中遇到的问题,做一个简单的教程。 首先准备好素材图片,TCheckBox 的素材要求有三组:获得焦点( Focus )、鼠标移入( Hot )和普通,每组都包含选中和未选中两种状态,对于禁用的情况下,FMX 会自动处理,不需要准备素材。我们从网站上准