修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式
Delphi 10.1.2 edit控件在android默认的复制、剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观。
默认的样式:

修改后的样式:

修改FMX.Platform.Android.pas
找到procedure TWindowManager.ShowContextMenu(const ItemsToShow: TContextMenuItems),按下面的红字增加Copy、cut和Paste button的setBackgroundColor属性。
FCopyButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改
FCutButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改
FPasteButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改
procedure TWindowManager.ShowContextMenu(const ItemsToShow: TContextMenuItems);
var
LA: TTextLayout;
P: TPoint;
HasSelection, HasClipboard: Boolean;
ApproxWidth: Integer;
ApproxHeight: Integer;
ClipboardValue: TValue;
ResID: Integer;
TextInput: ITextInput;
VirtualKeyboard: IVirtualKeyboardControl;
ClipboardSvc: IFMXClipboardService;
begin
DestroyPasteMenuTimer;
ApproxWidth := FContextMenuPopupSize.cx;
ApproxHeight := FContextMenuPopupSize.cy;
if not FContextMenuVisible and Supports(FFocusedControl, ITextInput, TextInput) and not FSelectionInProgress then
begin
FContextMenuVisible := True;
HasSelection := not TextInput.GetSelection.IsEmpty;
TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, ClipboardSvc);
ClipboardValue := ClipboardSvc.GetClipboard;
HasClipboard := not ClipboardValue.IsEmpty and not ClipboardValue.ToString.IsEmpty;
if FContextMenuPopup = nil then
begin
FContextMenuLayout := TJLinearLayout.JavaClass.init(TAndroidHelper.Activity);
FContextButtonsLayout := TJLinearLayout.JavaClass.init(TAndroidHelper.Activity);
LA := TTextLayoutManager.DefaultTextLayout.Create;
LA.Font.Style := LA.Font.Style + [TFontStyle.fsBold];
P := Point(0, 0);
Supports(FFocusedControl, IVirtualKeyboardControl, VirtualKeyboard);
if HasSelection then
begin
//Copy button
if (TContextMenuItem.Copy in ItemsToShow) and ((VirtualKeyboard = nil) or not VirtualKeyboard.IsPassword) then
begin
ResID := TAndroidHelper.GetResourceID('android:string/copy');
if ResID <> 0 then
LA.Text := TAndroidHelper.GetResourceString(ResID)
else
LA.Text := SEditCopy.ToUpper;
FCopyButton := TJButton.JavaClass.init(TAndroidHelper.Activity);
if ResID <> 0 then
FCopyButton.setText(ResID)
else
FCopyButton.setText(StrToJCharSequence(LA.Text));
FCopyButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);
FCopyButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改
FCopyClickListener := TCopyButtonClickListener.Create;
FCopyButton.setOnClickListener(FCopyClickListener);
LA.Font.Size := FCopyButton.getTextSize;
P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);
P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));
ApproxHeight := P.Y + FCopyButton.getPaddingTop + FCopyButton.getPaddingBottom;
end;
//Cut button
if (TContextMenuItem.Cut in ItemsToShow) and not TextReadOnly and ((VirtualKeyboard = nil) or not VirtualKeyboard.IsPassword) then
begin
ResID := TAndroidHelper.GetResourceID('android:string/cut');
if ResID <> 0 then
LA.Text := TAndroidHelper.GetResourceString(ResID)
else
LA.Text := SEditCut.ToUpper;
FCutButton := TJButton.JavaClass.init(TAndroidHelper.Activity);
if ResID <> 0 then
FCutButton.setText(ResID)
else
FCutButton.setText(StrToJCharSequence(LA.Text));
FCutButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);
FCutButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改
FCutClickListener := TCutButtonClickListener.Create;
FCutButton.setOnClickListener(FCutClickListener);
LA.Font.Size := FCopyButton.getTextSize;
P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);
P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));
end;
end;
if HasClipboard and (TContextMenuItem.Paste in ItemsToShow) and not TextReadOnly then
begin
//Paste button
ResID := TAndroidHelper.GetResourceID('android:string/paste');
if ResID <> 0 then
LA.Text := TAndroidHelper.GetResourceString(ResID)
else
LA.Text := SEditPaste.ToUpper;
FPasteButton := TJButton.JavaClass.init(TAndroidHelper.Activity);
if ResID <> 0 then
FPasteButton.setText(ResID)
else
FPasteButton.setText(StrToJCharSequence(LA.Text));
FPasteButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);
FPasteButton.setBackgroundColor(TAlphaColors.Yellowgreen);//------增加这行,可以根据自己的喜好修改
FPasteClickListener := TPasteButtonClickListener.Create;
FPasteButton.setOnClickListener(FPasteClickListener);
LA.Font.Size := FPasteButton.getTextSize;
P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);
P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));
if ApproxHeight = 0 then
ApproxHeight := P.Y + FPasteButton.getPaddingTop + FPasteButton.getPaddingBottom;
end;
修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式的更多相关文章
- Delphi 10 Seattle 小票打印控件TQ_Printer
TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...
- WPF的DataGrid控件从excel里复制数据然后粘贴
WPF的DataGrid控件不能像winform的DataGridView控件一样,支持值的粘贴.WPF的DataGrid控件本质上是跟数据绑定联系在一起,所以需要进行复制粘贴的操作,可以在wpf里用 ...
- win32 修改Edit控件文本颜色与背景色
#define WM_CTLCOLORMSGBOX 0x0132 #define WM_CTLCOLOREDIT 0x0133 //编辑控件Edit #define WM_CTLCOLORLISTBO ...
- delphi Components[i]清除所有edit控件中的内容
(* 一般的清空combobox方法 combobox1.clear; ... combobox9.clear; *) procedure TForm1.Button1Click(Sender: ...
- Delphi在Listview中加入Edit控件
原帖 : http://www.cnblogs.com/hssbsw/archive/2012/06/03/2533092.html Listview是一个非常有用的控件,我们常常将大量的数据(如数据 ...
- DELPHI 动态 创建和释放 多个 EDIT 控件
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- 增加duilib edit控件的提示功能和多种文字颜色
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41786407 duilib的CEditUI控件内部使用了win32的原生 ...
- Delphi下使用Oracle Access控件组下TOraSession控件链接
Delphi下使用Oracle Access控件组下TOraSession控件链接数据库,使用 orsn1.Options.Direct:=true; orsn1.Server:=IP:Port: ...
- emWin(ucGui) Edit控件数值模式 ——符号编辑 worldsing
emWin(ucGui) Edit控件数值模式出现负数值编辑时,如果键盘按键全可以设置独立的"-","+"键,这样可以正常编辑正数和负数,但是要没有设置这两个键 ...
随机推荐
- iOS-桥接方式
很多时候都会使用到CoreFoundation的函数,其返回值为CoreFoundation框架的对象,如果想转换为Foundation框架的对象就可以使用桥接方式来搞定. 示例代码: CFStrin ...
- 内功心法 -- java.util.ArrayList<E> (6)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- css浮动(float,clear)
1. 以div元素布局为例,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流,是指标准流中的div. 无论多么复杂的布局,其基本出发点均是:“如何在一行显示多个div元素”,显然标准 ...
- 软通动力C语言机试题
#include <stdio.h> int charCount(char *str) { int iCount = 0; int i, j, k=0; char *p = str; ch ...
- PHP面向对象——GD库实现图片水印和缩略图
今天的实现目标就是使用GD库完成对图片加水印和图 片缩略图两个功能 动身前逻辑准备 属性: 路径 功能: 构造方法 生成水印的方法 获取 图片信息 获取位置信息(123 456 789) 创建图片资源 ...
- JAVA中浮点数显示
//Java小数点后留两位 double num1 =11; double num2 =21; String num3 =""; //函数可以确定十进制数的显示格式:百分数,限定小 ...
- DLL 导出变量
声明为导出变量时,同样有两种方法: 第一种是用__declspec进行导出声明 #ifndef _DLL_SAMPLE_H #define _DLL_SAMPLE_H // 如果定义了C++编译器 ...
- [Hadoop] - 自定义Mapreduce InputFormat&OutputFormat
在MR程序的开发过程中,经常会遇到输入数据不是HDFS或者数据输出目的地不是HDFS的,MapReduce的设计已经考虑到这种情况,它为我们提供了两个组建,只需要我们自定义适合的InputFormat ...
- Thrift入门初探--thrift安装及java入门实例
什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...
- 一步一步学Python(2) 连接多台主机执行脚本
最近在客户现场,每日都需要巡检大量主机系统的备库信息.如果一台台执行,时间浪费的就太冤枉了. 参考同事之前写的一个python脚本,配合各主机上写好的shell检查脚本,实现一次操作得到所有巡检结果. ...