我正在尝试将我当前的Delphi 7 Win32代码转换为Delphi XE5 Android,只需要很少的更改,这样我的项目就可以从一系列Delphi版本和XE5的Android交叉编译到Win32.
从XE5开始,针对未来的语言会发生重大变化.其中一个变化是从零开始的字符串.
在具有基于1的字符串的旧版本中,以下代码是正确的:
function StripColor(aText: string): string;
begin
for I := 1 to Length(aText) do
Run Code Online (Sandbox Code Playgroud)
但现在这显然不对.建议的解决方案是使用:
for I := Low(aText) to High(aText) do
Run Code Online (Sandbox Code Playgroud)
这样,XE5 Win32处理基于1的字符串,而XE5 Android处理基于0的字符串.但是有一个问题 - 以前的Delphi版本(例如XE2)在这样的代码上输出错误:
E2198 Low cannot be applied to a long string
E2198 High cannot be applied to a long string
Run Code Online (Sandbox Code Playgroud)
我有很多字符串操作代码.我的问题是 - 如何修改和保持上面的代码可以在Delphi 7 Win32和Delphi XE5 Android中编译?
PS我知道我仍然可以在XE5中禁用ZEROBASEDSTRINGS定义,但这是不受欢迎的解决方案,因为在XE6中,这个定义可能会消失,并且所有字符串都将被强制为0.
有谁知道如何让这个工作?我得到的最接近的是下面的代码,但没有成功.首先,当它告诉您需要SEND_SMS
许可时,它会给您一些希望.但在您设置此权限后,没有任何反应!
uses
Androidapi.JNI.JavaTypes;
procedure TForm1.Button1Click(Sender: TObject);
var
smsManager: JSmsManager;
smsTo, smsFrom: JString;
begin
smsManager:= TJSmsManager.JavaClass.getDefault;
smsTo:= StringToJString('552199999999'); //replace with the right destination number
smsFrom:= StringToJString('552499999999'); //replace with the right originator number
smsManager.sendTextMessage(smsTo, smsFrom, StringToJString(Edit1.Text), nil, nil);
end;
Run Code Online (Sandbox Code Playgroud) 正如标题所说,来自RTL语言(如波斯语或阿拉伯语)的文本在android中没有表现出来,例如"سلام"这个词显示为"مالس".即使在文本输入(我认为它们是本机和本机android文本框支持)这个问题发生了有没有办法解决这个问题?
尝试在Embarcadero XE5中使用NFC在Android上运行.从以下内容开始:https://forums.embarcadero.com/thread.jspa?threadID = 97574 ,它们似乎正在运行.现在想注册NFC Intent的回调
Java方法:
1. Register current activity as a listener
...
2. Receive Intent
@Override
protected void onNewIntent(Intent intent) {
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
NdefMessage[] msgs = NfcUtils.getNdefMessages(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://www.jessechen.net/blog/how-to-nfc-on-the-android-platform/
德尔福方法(我想象):
1. Define methods available in Java interface
Run Code Online (Sandbox Code Playgroud)
来源:https://forums.embarcadero.com/thread.jspa?messageID = 634212
Question:
How do I register a listener for NFC intent messages and
how do I eventually get messages?
Run Code Online (Sandbox Code Playgroud)
我的猜测是调用enableForegroundDispatch
方法.定义如下:
procedure enableForegroundDispatch; cddcl;
Run Code Online (Sandbox Code Playgroud)
从Android API调用它 …
我在Delphi XE5(iOS和Android)中使用REST组件.我目前正在通过iOS模拟器进行测试,我的应用程序经常挂在我的代码中的以下行:
R_Request.Execute;
Run Code Online (Sandbox Code Playgroud)
经过一些调试后,我发现它专门挂在REST.Client.PAS中的这行代码中:
HandleEvent(DoAfterExecute);
Run Code Online (Sandbox Code Playgroud)
看起来像:
procedure TCustomRESTRequest.HandleEvent(AEventHandler: TMethod);
begin
// Handle Synchronized if we are NOT already in the main thread
// NEVER call synchronize on the MainThread - that might shift the island!
if SynchronizedEvents and (System.MainThreadID <> TThread.CurrentThread.ThreadID) then
TThread.Synchronize(TThread.CurrentThread, AEventHandler) // FAILS HERE
else
AEventHandler;
end;
Run Code Online (Sandbox Code Playgroud)
它要么不在.Synchronize中返回线程,要么花费很长时间(大约5分钟)...它在调试时工作了一次,但是从现在开始一直没有(30分钟后,在设置之后) 5分钟返回一个帖子).
救命 ?或者至少任何人都可以给我的方向感?
再次,开发iOS和Android(所以FMX ...),目前正在通过iOS模拟器进行测试.谢谢 !
如何让我的Android应用程序对后退按钮作出反应?
有没有什么东西可以作为高级VCL的TApplicationEvents来处理它,或者我是否需要深入研究低级Android特定的东西?
现在,大多数演示应用程序都有一个屏幕后退按钮,可以返回上一个屏幕.按下psysical按钮似乎总是退出应用程序,在某些情况下会导致访问冲突.
用于Win32的Delphi XE5编译器具有调试信息的新设置:有限调试信息.
有限调试信息和调试信息有什么区别?
在使用Delphi XE5开发应用程序时,如何在Android设备上创建OpenGL渲染上下文?
基本上我不知道从哪里开始.还没有OpenGL示例.
我期望存在的东西:
某种事件(Panel.OnRender)将提供我可以调用OpenGL调用的现有上下文.
可以放在表单设计器中的通用TOpenGLSurface控件
一种在运行时在主窗体上创建上下文的方法.
从我迄今为止的研究中我可以TWindowManager.Render
访问OpenGL调用并使用它们来渲染弹出窗口.
编辑:向表单添加一个计时器并调用此过程用绿色填充屏幕,这意味着GL上下文已经存在:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
glClearColor(0, 1, 0, 0);
glClear(GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
eglSwapBuffers(TCustomAndroidContext.SharedDisplay, TCustomAndroidContext.SharedSurface);
end;
Run Code Online (Sandbox Code Playgroud)
问题是 - 如何正确处理它,在受控环境中对Timer进行渲染绝对是一个坏主意.
任何人都知道如何使用delphi XE5访问android中的串口?我正在使用带有android 4.1的Cubieboard
我有很多变量声明为
var
Something: array of XXX;
begin
SetLength(Something, 10);
try
...
finally
SetLength(Something, 0);
end;
end;
Run Code Online (Sandbox Code Playgroud)
将它们替换为安全的范围:
var
Something: TArray<XXX>;
begin
SetLength(Something, 10);
try
...
finally
SetLength(Something, 0);
end;
end;
Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-xe5 ×10
android ×6
firemonkey ×2
arrays ×1
back-button ×1
delphi-7 ×1
generics ×1
nfc ×1
opengl-es ×1
serial-port ×1
sms ×1