在Delphi XE2之前,我们只使用VCL来创建GUI应用程序.Delphi XE2声明:
警告:FireMonkey(FMX)和可视组件库(VCL)不兼容,不能在同一项目或应用程序中使用.也就是说,应用程序必须只有一个或另一个,FireMonkey或VCL.不兼容性是由FireMonkey(FMX)和VCL之间的框架差异引起的.
我的应用程序是一个使用运行时包构建的纯VCL应用程序.所有VCL表单都存储在运行时包中.如果我要创建一个FireMonkey表单并存储在一个包中,我是否有机会在运行时在我的VCL应用程序中实例化这个FireMonkey表单?所以我可能会喜欢FireMonkey的3D或HD效果.
通常,使用Windows,我将应用程序的数据保存在用户文件夹(%appdata%)中.
为此,我使用ExpandEnvironmentStrings链接到Windows 的函数来获取我需要的文件夹,并将其存储在我的inifile子文件夹中.
有没有最佳实践来管理它并符合所有支持的平台(Windows 32b,64b和Mac)?
我成功地测试过:
procedure TfrmMain.SaveSettings;
var
fnINI: TFileName;
ini : TIniFile;
begin
fnINI := IncludeTrailingPathDelimiter(GetHomePath) + IncludeTrailingPathDelimiter(APP_NAME) + ChangeFileExt(APP_NAME, '.ini');
if ForceDirectories(ExtractFilePath(fnINI)) then
begin
ini := TIniFile.Create(fnINI);
try
ini.WriteString(INI_CONNECTION, INI_IP, edtIP.Text);
finally
ini.Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud) 使用Delphi XE2,是否可以在不使用FireMonkey的情况下创建Mac GUI应用程序?如果是这样,可以使用什么以及如何进行呢?
Firemonkey使我们能够为我们的应用程序添加样式,矢量图形,位图,效果,动画等.但我不是设计师,所以我需要雇一个来做这些奇特的工作.但据我所知,所有的设计工作都在IDE中完成.
是否有一种简单的方法可以让设计人员处理项目而无需拥有Delphi XE2的副本和源代码的完整副本?
(是的,他们可以编辑.style文件,但这不完全是视觉或方便).
有没有人碰巧知道是否有正在准备的流行VirtualTreeView的Firemonkey版本?此外,是否有人收集了一些将自定义控件移植到Firemonkey的经验,并且可以估算将虚拟树视图移植到Firemonkey的工作量?我们需要这个控件,如果我们可以让这个控件工作,切换到Firemonkey只是一个选项.
谢谢!
是否可以在iOS的FMX表单上放置TImage并将URL中的图像(jpg)加载到此TImage中以显示在iOS应用程序中?
我试过没有成功.任何提示或正确方向的点都值得赞赏.
目前我正在使用Delphi XE3客户端/服务器应用程序来传输文件(使用Indy FTP组件).客户端部分监视文件夹,获取内部文件列表,将它们上载到服务器并删除原始文件.上传由一个单独的线程完成,该线程逐个处理文件.文件的范围从0到几千,它们的大小也有很大差异.
它是为OSX和Windows编译的Firemonkey应用程序,因此我不得不使用TThread而不是OmniThreadLibrary,这是我更喜欢的.我的客户报告该应用程序随机冻结.我无法复制它,但由于我对TThread没有那么多经验,我可能会把死锁条件放在某处.我读了很多例子,但我仍然不确定一些多线程的细节.
应用程序结构很简单:
主线程中的计时器检查文件夹并将每个文件的信息获取到记录中,该记录进入通用TList.此列表保留有关文件名称,大小,进度,文件是完全上载还是必须重试的信息.所有显示在带有进度条等的网格中.此列表仅由主线程访问.之后,通过调用AddFile方法(下面的代码)将列表中的项目发送到线程.该线程将所有文件存储在一个线程安全的队列中,如下所示http://delphihaven.wordpress.com/2011/05/06/using-tmonitor-2/
上传文件时,上传者线程通知主线程调用同步.
主线程定期调用Uploader.GetProgress方法来检查当前文件进度并显示它.这个函数实际上不是线程安全的,但它可能导致死锁,还是只返回错误的数据?
什么是安全有效的进度检查方法?
那么这种方法还可以,或者我错过了什么?你会怎么做?
例如,我虽然只是为了阅读文件夹内容而创建一个新线程.这意味着我使用的TList必须是线程安全的,但必须始终访问它以刷新GUI网格中显示的信息.不是所有的同步都会降低GUI的速度吗?
我已经发布了下面的简化代码,以防有人想看一下.如果没有,我会很高兴听到一些关于我应该使用的一般意见.主要目标是在OSX和Windows上工作; 能够显示有关所有文件的信息和当前文件的进度; 并且无论文件的数量和大小如何都要响应.
这是上传者线程的代码.我删除了一些以便于阅读:
type
TFileStatus = (fsToBeQueued, fsUploaded, fsQueued);
TFileInfo = record
ID: Integer;
Path: String;
Size: Int64;
UploadedSize: Int64;
Status: TFileStatus;
end;
TUploader = class(TThread)
private
FTP: TIdFTP;
fQueue: TThreadedQueue<TFileInfo>;
fCurrentFile: TFileInfo;
FUploading: Boolean;
procedure ConnectFTP;
function UploadFile(aFileInfo: TFileInfo): String;
procedure OnFTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
procedure SignalComplete;
procedure SignalError(aError: String);
protected
procedure Execute; override;
public
property Uploading: Boolean read FUploading;
constructor Create;
destructor Destroy; …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过蓝牙与Sewoo LK-P32打印机通信.为此,我使用的是Delphi XE7.我做了一些Delphi附带的例子并没有成功.我把配对的打印机放在平板电脑中,即使这样我也无法连续打印.
当我打印的东西必须重新启动应用程序,所以我可以再打印一些东西.在我的来源下面.
有人能帮助我吗?支持这个问题?我尝试其他技术的时间很短.
启动与打印机通信的方法
procedure TForm2.ButtonClickStart(Sender: TObject);
var
Msg, Texto: string;
I, B: Integer;
BluetoothAdapter: TBluetoothAdapter;
ListaDeAparelhosPareados: TBluetoothDeviceList;
LServices: TBluetoothServiceList;
begin
try
Memo1.Lines.Add('Ponto 1');
FBluetoothManager := TBluetoothManager.Current;
if FBluetoothManager = nil then
Memo1.Lines.Add('FBluetoothManager esta nulo');
Memo1.Lines.Add('Ponto 2');
BluetoothAdapter := FBluetoothManager.CurrentAdapter;
if BluetoothAdapter = nil then
Memo1.Lines.Add('BluetoothAdapter esta nulo');
ListaDeAparelhosPareados := BluetoothAdapter.PairedDevices;
Memo1.Lines.Add('Ponto 3');
if ListaDeAparelhosPareados = nil then
Memo1.Lines.Add('ListaDeAparelhosPareados esta nulo');
for I := 0 to ListaDeAparelhosPareados.Count - 1 do
begin
LDevice := ListaDeAparelhosPareados[I] …Run Code Online (Sandbox Code Playgroud) 我试图在Mac上运行示例Firemonkey应用程序,但我在mac中收到此消息:
dyld: Library not loaded: @rpath/libcgunwind.1.0.dylib
Referenced from: /Users/nobre/Applications/Embarcadero/PAServer/scratch-dir/rafael_colucci-Nobre/Project37.app/Contents/MacOS/Project37
Reason: image not found
dyld: Library not loaded: @rpath/libcgunwind.1.0.dylib
Referenced from: /Users/nobre/Applications/Embarcadero/PAServer/scratch-dir/rafael_colucci-Nobre/Project37.app/Contents/MacOS/Project37
Reason: image not found
dyld: Library not loaded: @rpath/libcgunwind.1.0.dylib
Referenced from: /Users/nobre/Applications/Embarcadero/PAServer/scratch-dir/rafael_colucci-Nobre/Project37.app/Contents/MacOS/Project37
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
我使用本教程添加OSX平台:
编辑
有关错误的更多信息:
Process: Teste2 [34270]
Path: /Users/User/Applications/Embarcadero/PAServer/scratch-dir/rafael_colucci-VM/Teste2.app/Contents/MacOS/Teste2
Identifier: Teste2
Version: ??? (???)
Code Type: X86 (Native)
Parent Process: launchd [94]
Date/Time: 2011-09-01 19:36:26.246 +0100
OS Version: Mac OS X 10.6.8 (10K540)
Report Version: 6
Interval Since Last Report: 3908 …Run Code Online (Sandbox Code Playgroud) 有谁知道如何让这个工作?我得到的最接近的是下面的代码,但没有成功.首先,当它告诉您需要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) delphi ×10
firemonkey ×10
delphi-xe2 ×6
macos ×2
android ×1
bluetooth ×1
delphi-xe5 ×1
delphi-xe7 ×1
directory ×1
ios ×1
sms ×1
styles ×1
timage ×1
upload ×1
url ×1
vcl ×1