在Windows平台上,使用VCL,当我们要在菜单中添加分隔符时,我们添加一个TMenuItem带有Caption := '-';
使用FireMonkey,我们添加了TMenuItem一个Text := '-';
它在Windows平台上按预期工作,带有Text =' - '的项目显示为分隔符.
但是,当我在OSX上运行相同的应用程序时,我看到减号...
我没有找到任何属性TMenuItem来指定它是一个分隔符 ...
我尝试了a TMainMenu和a TMenuBar(UseOSMenu := True|False;),我仍然有这个问题.
有没有想过创建一个真正的分隔符?(否则,我会检查操作系统并在OSX中删除它...)
嗨我正在使用Firemonkey,因为它具有跨平台功能.我想渲染一个粒子系统.现在我正在使用TMesh,它可以很好地快速显示粒子.每个粒子通过两个纹理三角形在网格中表示.使用不同的纹理坐标,我可以使用相同的网格显示许多不同的粒子类型.问题是,每个粒子都有自己的透明度/不透明度.根据我目前的方法,我无法为每个三角形(甚至顶点)单独设置透明度.我能做什么?
我意识到TMesh.Data.VertexBuffer中还有一些其他属性,比如Diffuse或其他纹理集(TexCoord1-3),但这些属性在TMesh中不被使用(甚至没有初始化).通过继承TMesh简单地改变这种行为似乎并不容易.似乎必须从较低级别的控件继承以初始化具有更多属性的VertextBuffer.在我尝试之前,我想问一下是否可以控制三角形的透明度.例如,我可以设置透明色(漫反射)还是使用透明纹理(TextCoor1)?或者有更好的方法在Firemonkey中绘制粒子.
我正在使用Delphi XE2和更新4修补程序1
我的默认FMX应用程序表示非常缓慢,并且在事件发生时它会冻结一段时间.例如:当我点击一个按钮时,整个应用程序会冻结几秒钟(但仅限于该事件的第一次执行).所以我认为它可能是一个GPU问题并编辑我的默认Dpr文件为;
uses
FMX.Forms, fmx.Types,..
{$R *.res}
begin
Application.Initialize;
GlobalUseHWEffects := False ;
GlobalUseDirect2D := False ;
GlobalUseDirect2DSoftware := False ;
GlobalUseGDIPlusClearType := True ;
GlobalDisableFocusEffect := True ;
Application.CreateForm(...);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
现在它按预期工作没有任何问题,但CPU使用率与之前一样(移动鼠标时为25%)
然后我修改了我的代码
GlobalUseHWEffects := true ;
GlobalUseDirect2D := False ;
GlobalUseDirect2DSoftware := False ;
GlobalUseGDIPlusClearType := True ;
GlobalDisableFocusEffect := True ;
Run Code Online (Sandbox Code Playgroud)
现在一切顺利,只有一小段时间的节省时间和CPU使用率非常低(0 - 2%).(这就是我需要Firemonkey的原因)
现在所有控件都按预期工作,除了菜单栏,上面的设置不适用于菜单栏,它正在使用默认行为(整个应用程序冻结几秒钟).
我能做些什么才能解决这个问题.
假设我想要一个并排放置的窗体上的两个形状,每个窗口占据窗口的50%,当窗口调整大小时会调整大小.我怎样才能做到这一点?
我真正想要的是按比例设置...例如..上述形状之一占25%,另一种占75%
动态调整大小非常重要,我不想输入任何代码来实现这一点.
我正在使用带有FireMonkey的Delphi XE2.
我已经阅读了很多关于MD5的其他问题,但没有找到我的问题的答案...我还测试了不同的脚本来从Delphi生成MD5:
function MD5(const text: string) : string;
var
md5 : TIdHashMessageDigest5;
begin
md5 := TIdHashMessageDigest5.Create;
Result := LowerCase(md5.HashStringAsHex(text, TEncoding.ANSI));
md5.Free;
end;
Run Code Online (Sandbox Code Playgroud)
要么
function MD5(const text: String) : string;
var
md5: IMD5;
begin
md5:= GetMD5;
md5.Init;
md5.Update(TByteDynArray(RawByteString(AnsiString(text))), Length(AnsiString(text)));
Result := LowerCase(md5.AsString);
end;
Run Code Online (Sandbox Code Playgroud)
两者都给我相同的结果......这通常与我在PHP中的结果相同:
$md5 = md5($toencode);
$md5 = hash("md5", $toencode);
Run Code Online (Sandbox Code Playgroud)
但是如果我使用Delphi或PHP,结果是不同的,当我请求其中一个字符的MD5时:"或者'
可能有其他字符产生不同的结果但我只是在测试期间找到这些字符...
我已经测试了许多扩展的ASCII字符并且具有相同的MD5 ...
所以,我不明白为什么我与它们中的一些("或')存在差异,而且我想知道是否有一种方法可以始终从Delphi生成PHP MD5结果,无论字符是什么.
任何的想法?
例如:
用Delphi:
":b15835f133ff2e27c7cb28117bfae8f4
':3590cb8af0bbb9e78c343b52b93773c9
用PHP:
":3bd864034f446da13581129bb17f9191 …
我创建了一个(Delphi XE2)Firemonkey示例程序,它包含一个TButton和一个带有两个不同过滤器的TSavedialog.(TSaveDialog组件支持Win32/Win64和OS X平台.)
它在Win32/Win64上工作正常,但我现在不知道为什么它不显示OS X上的Savedialog过滤器(VirtualBox/OS X 10.7.x).
如何让它在OS X上运行?
procedure TForm1.Button_SaveClick(Sender: TObject);
begin
SaveDialog.Filter:='Format_1 (*.fmt1)|*.fmt1|Format_2 (*.fmt2)|*.fmt2';
If Savedialog.Execute Then ShowMessage(SaveDialog.FileName+#13+'Selected filterindex: '+Inttostr(SaveDialog.FilterIndex));
end;
Run Code Online (Sandbox Code Playgroud) (我该怎么办呢?)
如果我在VCL中创建两个标签并设置一个使用Arial和另一个Arial Narrow,我会看到预期的结果.

如果我在Firemonkey中执行相同操作,则第二个标签不会显示在Arial Narrow中.它甚至没有显示在Arial中(我的圆点是圆的,'s'的形状都是错的等等).

有谁知道为什么FM(我用Delphi XE4测试这个)没有正确显示字体?我能做些什么吗?
VCL表格的来源:
object Form3: TForm3
Left = 0
Top = 0
Caption = 'Form3'
ClientHeight = 198
ClientWidth = 475
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 24
Top = 32
Width = 134
Height = 14
Caption = 'This label is using Arial @11'
Font.Charset = DEFAULT_CHARSET
Font.Color …Run Code Online (Sandbox Code Playgroud) 我希望按钮大小(宽度和高度)尽可能小,但我希望它适合文本.任何代码示例?Delphi XE4 FireMonkey移动应用程序.
我正在将一个大型项目转换为Firemonkey,并且我们有一些自定义按钮,这些按钮不会显示在表单上.我已将问题分离到一个非常简单的项目:
使用下面的代码,在移动和桌面上(使用Delphi XE6中的默认新应用程序),创建tTestButton1工作正常,但tTestButton2不会在窗体上显示.怎么可能?
type
tTestButton1 = class(TButton);
tTestButton2 = class(tTestButton1);
tMainForm = class(TForm)
private
fTestButton: TButton;
public
constructor Create(aOwner: TComponent); override;
end;
constructor tMainForm .Create(aOwner: TComponent);
begin
inherited;
// fTestButton := tTestButton1.Create(Self); // this works fine (used instead of next line)
fTestButton := tTestButton2.Create(Self); //this button does not show up
fTestButton.Text := 'Test';
fTestButton.Parent := Self;
fTestButton.Visible := True;
fTestButton.Position.X := 20;
fTestButton.Position.Y := 20;
end;
Run Code Online (Sandbox Code Playgroud) 在我的客户端应用程序中,我使用以下代码在标头中添加一个标记:
RESTRequest.Params.AddItem('Authorization', 'Bearer ' + MyToken, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);
Run Code Online (Sandbox Code Playgroud)
我想使用datasnap在我的服务器中获取此令牌.
可能吗?
我怎样才能做到这一点?
我可以验证Datasnap执行TIdCustomHTTPServer.DoParseAuthentication和DoParseAuthentication调用FOnParseAuthentication它是否已分配.
那么,我怎么能破解Datasnap分配我自己的OnParseAuthentication?
我认为这解决了我的问题.
delphi ×10
firemonkey ×10
delphi-xe2 ×5
button ×1
datasnap ×1
delphi-xe4 ×1
delphi-xe6 ×1
fonts ×1
http-headers ×1
indy ×1
macos ×1
md5 ×1
menuitem ×1
php ×1
separator ×1
text ×1