小编Hea*_*are的帖子

编程为控制台和GUI

是否有可能(如果是这样,我如何)使用Delphi 2007将单个程序作为控制台应用程序和GUI版本工作?

我所追求的是,​​如果程序使用适当的命令行选项运行,它应该用作控制台程序,使用WRITELN将输出打印到控制台,但如果没有给出命令行参数,它应该作为普通Delphi运行GUI应用程序?

问题是当作为控制台应用程序运行时,命令行解释程序在允许您输入新命令之前等待应用程序终止,而从命令行启动的GUI应用程序会立即返回到命令行和GUI应用程序在分离的过程中启动.我希望保留这种行为.

我不介意这样的事情:

如果GUI那么StartApplicationAsGUI(ParamStr(0))

即.我不介意我必须使用某种形式的EXECUTE调用重新启动应用程序,以便在GUI模式下启动它(如果需要),只要命令行界面在GUI版本启动时返回到命令行输入即可.

我更喜欢一个解决方案/建议:

<Parse Comnand Line>
IF ConsoleMode THEN
   RunConsole(参数)
ELSE BEGIN
   Application.Initialize;
   Application.CreateForm(...)
   Application.Run;
结束

(反之亦然,即如果GUI模式以特殊方式做事)

这样我在制作GUI界面时仍然可以使用Delphi的IDE和VCL ......

delphi console user-interface

24
推荐指数
3
解决办法
6796
查看次数

从 Delphi VCL 应用程序可靠地读取 Windows 缩放因子

为了在我的应用程序中正确处理 DPI 更改,我使用以下代码读取当前的缩放因子:

TYPE TZoom = BYTE;

FUNCTION OldStyleGetDpiForSystem : TZoom; cdecl;
  VAR
    DC          : HDC;
    X,Y,Z       : LongWord;

  BEGIN
    DC:=GetDC(0);
    TRY
      X:=GetDeviceCaps(DC,LOGPIXELSX);
      Y:=GetDeviceCaps(DC,LOGPIXELSY)
    FINALLY
      ReleaseDC(0,DC)
    END;
    IF X>Y THEN Result:=X ELSE Result:=Y
  END;

FUNCTION GetDpiForSystem : TZoom;
  TYPE
    GetDpiForSystemFunc = FUNCTION : TZoom; cdecl;

  CONST
    GetDpiForSystem     : GetDpiForSystemFunc = NIL;

  BEGIN
    IF NOT Assigned(GetDpiForSystem) THEN BEGIN
      // Try to use official method (available from Windows 10, version 1607 [desktop apps only] and on)
      GetDpiForSystem:=GetProcAddress(LoadLibrary('USER32.DLL'),'GetDpiForSystem');
      // If not found, then …
Run Code Online (Sandbox Code Playgroud)

delphi highdpi delphi-10.2-tokyo

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

从Delphi访问Android的SharedPreferences类

我刚刚开始使用Delphi XE5的Android开发路径,并且我正在尝试构建一个简单的应用程序,它需要能够持久保存一些输入的信息(配置).

我已经想到,Android类SharedPreferences可能是最简单的方法,但我无法弄清楚如何从Delphi XE5 FMX Mobile访问这个类.

我试过在帮助中搜索"SharedPreferences",但它什么也没有返回.另一方面,搜索"共享偏好"给了我太多.

delphi android delphi-xe5

4
推荐指数
1
解决办法
4451
查看次数

如何使用FireMonkey for Delphi XE5检测/处理屏幕旋转

首先 - 我是Android和FireMonkey编程的初学者,所以请记住这一点:-).

我已经制作了一个FireMonkey/Android应用程序,可以根据屏幕大小和方向调整其控件的大小/重排,但是当用户旋转屏幕时,我无法弄清楚如何设置我的应用程序.如果我在其中运行Firemonkey/Win32并显示执行以下操作的按钮:

PROCEDURE TMainForm.FlipForm;
  VAR
    W,H : INTEGER;

  BEGIN
    W:=Width; H:=Height; Width:=H; Height:=W
  END;
Run Code Online (Sandbox Code Playgroud)

然后陷阱FormResize事件,我的表单调整大小/回流它应该.我想在Android上运行时也这样做,但似乎在屏幕旋转时不会调用FormResize事件,因此我的按钮等不会重排并最终在屏幕外.

所以我的问题是,如何检测屏幕已旋转,以便我可以让我的应用程序在横向和纵向模式下工作?

delphi android firemonkey firemonkey-fm3 delphi-xe5

4
推荐指数
3
解决办法
9323
查看次数

DELPHI - 如何将一个过程声明为其他过程中的参数?

我需要一个像下面的代码这样的函数(不起作用!这只是一个例子)

type
  TCallBack = procedure( x:String) of object;

procedur procA(CallBack : TCallBack);
begin
    CallBack('hello world')
end;

Run Code Online (Sandbox Code Playgroud)

然后触发 procA 并将过程作为参数传递:

procA( procedure (res : string)
begin
    ShowMessage(res);
end);
Run Code Online (Sandbox Code Playgroud)

delphi

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

&gt;= Alexandria 11.3 的编译时检测

您如何(编译时)检测 Alexandria 11.2 和 11.3 之间的差异(或者更确切地说,您如何检测您处于 11.3 或更高版本?)

两者的 CompilerVersion 和 RTLVersion 值为 35。

delphi delphi-11-alexandria

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