小编Seb*_*n Z的帖子

如何在Fmx项目中将Windows关闭事件作为WM_QUERYENDSESSION和WM_ENDSESSION在VCL项目中获取?

我需要拦截Windows关闭,并执行一些数据库查询,然后我的应用程序将关闭.我在FMX项目上使用Windows 10下的Delphi XE10

我尝试的是下面的代码,但它不起作用

  private
    { Private declarations }
  {$IFDEF MSWINDOWS}
    procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION;
    procedure WMEndSession(var Msg : TWMQueryEndSession); message  WM_ENDSESSION ;
  {$ENDIF}

  end;



procedure TfMain.WMQueryEndSession(var Msg: TWMQueryEndSession);
var
 lista:TStringList;
begin

{$IFDEF MSWINDOWS}
  try
    lista:=TStringList.Create;
    lista.Add(FOrmatDateTime('DD/MM/YYYY HH:NN:SS',now)+' event WMQueryEndSession');
    Lista.SaveToFile(froot+formatdatetime('YYMMDDHHNNSSZZZ',now)+'.log');
    SincroClose();
    lista.Add(FOrmatDateTime('DD/MM/YYYY HH:NN:SS',now)+' Done');
    Lista.SaveToFile(froot+formatdatetime('YYMMDDHHNNSSZZZ',now)+'.log');
  finally
    lista.Free;
  end;
{$ENDIF}
  inherited;

end;



procedure TfMain.WMEndSession(var Msg: TWMQueryEndSession);
var
 lista:TStringList;
begin

{$IFDEF MSWINDOWS}
  try
    lista:=TStringList.Create;
    lista.Add(FOrmatDateTime('DD/MM/YYYY HH:NN:SS',now)+' WMEndSession');
    Lista.SaveToFile(froot+formatdatetime('YYMMDDHHNNSSZZZ',now)+'.log');
    SincroClose();
    lista.Add(FOrmatDateTime('DD/MM/YYYY HH:NN:SS',now)+' Done');
    Lista.SaveToFile(froot+formatdatetime('YYMMDDHHNNSSZZZ',now)+'.log');
  finally
    lista.Free;
  end;
{$ENDIF} …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey

14
推荐指数
1
解决办法
796
查看次数

如何在OSX Yosemite上以不区分大小写的方式比较文本

我正在尝试使用AnsiSameText以不区分大小写的方式比较OSX上的两个字符串.这曾经工作得很好,但是在OSX Yosemite上,如果OSX的"首选语言"设置为荷兰语("系统偏好设置" - >"语言和地区" - >"首选语言" - >"荷兰荷兰语"),这种行为很奇怪.

在下面的代码示例中,我希望它只打印"相同".但我得到"相同,不同,不同".

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  if AnsiSameText('abcde', 'ABCDE') then // Same
    WriteLn('Same')
  else
    WriteLn('Different');

  if AnsiSameText('abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') then // different
    WriteLn('Same')
  else
    WriteLn('Different');

  if AnsiSameText('i', 'I') then // different
    WriteLn('Same')
  else
    WriteLn('Different');
end.
Run Code Online (Sandbox Code Playgroud)

以不区分大小写的方式比较文本的正确方法是什么?

我正在使用Delphi XE7.

delphi macos locale firemonkey osx-yosemite

5
推荐指数
1
解决办法
756
查看次数

标签 统计

delphi ×2

firemonkey ×2

locale ×1

macos ×1

osx-yosemite ×1