通常,我使用: ShellExecute(0, 'OPEN', PChar(edtURL.Text), '', '', SW_SHOWNORMAL);
如何在所有平台(Windows 和 OSX)上具有相同的行为(在默认浏览器中打开链接)?
通常,使用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) 在Windows平台上,使用VCL,当我们要在菜单中添加分隔符时,我们添加一个TMenuItem带有Caption := '-';
使用FireMonkey,我们添加了TMenuItem一个Text := '-';
它在Windows平台上按预期工作,带有Text =' - '的项目显示为分隔符.
但是,当我在OSX上运行相同的应用程序时,我看到减号...
我没有找到任何属性TMenuItem来指定它是一个分隔符 ...
我尝试了a TMainMenu和a TMenuBar(UseOSMenu := True|False;),我仍然有这个问题.
有没有想过创建一个真正的分隔符?(否则,我会检查操作系统并在OSX中删除它...)
我正在使用带有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脚本打开/关闭我的显示器,从Windows XP到7.
我在stackoverflow的Delphi部分内搜索过,但没有找到答案.
我还发现许多样本在Windows 7上不再起作用(仅限XP).
如何在Project1及更高版本下添加TMenuItem在下面的屏幕截图中退出?

我创建了一个带有UseOSMenu属性的TMenuBar.我添加的第一个TMenuItem是主栏中的第二个...
我试图用破折号替换word文档中列表的项目符号,基本上只需要替换"渲染图标",即
从以下列表中替换项目符号:
这是一个列表项
这是另一个列表项
又一个项目
破折号:
- 这是一个列表项
- 这是另一个列表项
- 又一个项目
我将在Delphi中使用ActiveX来做这个,但VB代码也会这样做,谢谢!
通常,当我有一个需要一些时间的任务时,我使用这样的脚本:
procedure Work;
var
cPrevious: TCursor;
begin
cPrevious := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
// the task
finally
Screen.Cursor := cPrevious;
end;
end;
Run Code Online (Sandbox Code Playgroud)
使用FireMonkey,Screen没有属性:Cursor.
向用户提供反馈的最佳方式是什么?
我跟着的评论和答案...用TPanel具有较少的不透明度和TAniIndicator(我也模糊了其他组件):

谢谢!
我没有找到在FMX.Platform中获取屏幕截图的功能(无论如何,其他地方......).
有了VCL,有很多答案(stackoverflow,google,...).
但是如何在Windows和Mac OS X的图像(位图或其他)中获取屏幕截图?
问候,
W.
更新:Tipiweb 的链接为OS X提供了一个很好的解决方案.
关于Windows部分:我编写了这个,但我不喜欢使用VCL和Stream来实现它...任何更好的建议,评论?
谢谢.
W.
uses ..., FMX.Types, Winapi.Windows, Vcl.Graphics;
...
function DesktopLeft: Integer;
begin
Result := GetSystemMetrics(SM_XVIRTUALSCREEN);
end;
function DesktopWidth: Integer;
begin
Result := GetSystemMetrics(SM_CXVIRTUALSCREEN);
end;
function DesktopTop: Integer;
begin
Result := GetSystemMetrics(SM_YVIRTUALSCREEN);
end;
function DesktopHeight: Integer;
begin
Result := GetSystemMetrics(SM_CYVIRTUALSCREEN);
end;
procedure GetScreenShot(var dest: FMX.Types.TBitmap);
var
cVCL : Vcl.Graphics.TCanvas;
bmpVCL: Vcl.Graphics.TBitmap;
msBmp : TMemoryStream;
begin
bmpVCL := Vcl.Graphics.TBitmap.Create;
cVCL := Vcl.Graphics.TCanvas.Create;
cVCL.Handle := GetWindowDC(GetDesktopWindow);
try
bmpVCL.Width := …Run Code Online (Sandbox Code Playgroud) 我有2个TTreeviews.它们都具有相同数量的项目.我希望能够同步他们的滚动条 ...如果我移动其中一个,另一个移动也...
对于水平,它按预期工作...对于垂直,它可以使用滚动条的箭头,但如果我拖动拇指或我使用鼠标滚轮它不...
这是我写的一个例子来说明我的问题:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StrUtils;
type
TForm1 = class(TForm)
tv1: TTreeView;
tv2: TTreeView;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
originalTv1WindowProc : TWndMethod;
originalTv2WindowProc : TWndMethod;
procedure Tv1WindowProc (var Msg : TMessage);
procedure Tv2WindowProc (var Msg : TMessage);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); …Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-xe2 ×7
firemonkey ×7
menuitem ×2
activex ×1
browser ×1
directory ×1
feedback ×1
macos ×1
md5 ×1
ms-word ×1
php ×1
screen ×1
screenshot ×1
scrollbar ×1
separator ×1
synchronized ×1
treeview ×1
vba ×1
winapi ×1