小编Whi*_*ler的帖子

如何使用FireMonkey跨平台应用程序使用默认浏览器打开URL?

通常,我使用: ShellExecute(0, 'OPEN', PChar(edtURL.Text), '', '', SW_SHOWNORMAL);

如何在所有平台(Windows OSX)上具有相同的行为(在默认浏览器中打开链接)?

browser delphi delphi-xe2 firemonkey

28
推荐指数
3
解决办法
3万
查看次数

使用FireMonkey及其跨平台,我应该在哪里存储我的应用程序数据?

通常,使用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 directory delphi-xe2 firemonkey

23
推荐指数
1
解决办法
3308
查看次数

如何添加在OSX上按预期工作的菜单项分隔符?

Windows平台上,使用VCL,当我们要在菜单中添加分隔符时,我们添加一个TMenuItem带有Caption := '-';

使用FireMonkey,我们添加了TMenuItem一个Text := '-';

它在Windows平台上按预期工作,带有Text =' - '的项目显示为分隔符.

但是,当我在OSX上运行相同的应用程序时,我看到减号...

我没有找到任何属性TMenuItem来指定它是一个分隔符 ...

我尝试了a TMainMenu和a TMenuBar(UseOSMenu := True|False;),我仍然有这个问题.

有没有想过创建一个真正的分隔符?(否则,我会检查操作系统并在OSX中删除它...)

delphi menuitem separator delphi-xe2 firemonkey

8
推荐指数
1
解决办法
4235
查看次数

如何使用Delphi和PHP获得相同的MD5?

我正在使用带有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 …

php delphi md5 delphi-xe2 firemonkey

8
推荐指数
2
解决办法
8965
查看次数

如何打开/关闭显示器?

我希望能够从Delphi脚本打开/关闭我的显示器,从Windows XP到7.

我在stackoverflowDelphi部分内搜索过,但没有找到答案.

我还发现许多样本在Windows 7上不再起作用(仅限XP).

delphi winapi screen power-management

7
推荐指数
1
解决办法
3496
查看次数

如何在OSX上的应用程序名称下创建子项菜单?

如何在Project1及更高版本下添加TMenuItem在下面的屏幕截图中退出

在此输入图像描述

我创建了一个带有UseOSMenu属性的TMenuBar.我添加的第一个TMenuItem是主栏中的第二个...

delphi macos menuitem delphi-xe2 firemonkey

7
推荐指数
1
解决办法
1880
查看次数

用Word文档中的破折号替换项目符号

我试图用破折号替换word文档中列表的项目符号,基本上只需要替换"渲染图标",即

从以下列表中替换项目符号:

  • 这是一个列表项

  • 这是另一个列表项

  • 又一个项目

破折号:

- 这是一个列表项

- 这是另一个列表项

- 又一个项目

我将在Delphi中使用ActiveX来做这个,但VB代码也会这样做,谢谢!

delphi vba activex ms-word

7
推荐指数
2
解决办法
2264
查看次数

使用Firemonkey,如何向用户提供反馈?(crHourglass)

通常,当我有一个需要一些时间的任务时,我使用这样的脚本:

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(我也模糊了其他组件):

反馈

谢谢!

delphi feedback delphi-xe2 firemonkey

6
推荐指数
1
解决办法
6269
查看次数

如何使用FireMonkey(多平台)截取屏幕截图

我没有找到在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)

delphi screenshot delphi-xe2 firemonkey

6
推荐指数
1
解决办法
8083
查看次数

如何同步2个TTreeviews的滚动?

我有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 treeview synchronized scrollbar

6
推荐指数
1
解决办法
1651
查看次数