小编Tom*_*omB的帖子

标签标题中的字符数是否有(Windows)限制?

我注意到在(Windows 10 64 位上的 Delphi 10.3.3 32 位 VCL 应用程序)应用程序中,如果字符串“真的”很长,标签的标题将不会显示。进一步的测试表明它不限于 TLabel。TStaticText 也以相同的方式运行,可能所有的 TGraphicControls 也是如此。

对于表单上的 TLabel,测试表明如果标题长度为 43,679 个字符,它将显示标题。但再过一段时间,标题就会消失。自动调整大小、自动换行和 EllipsisPosition 的组合没有改变这种行为。跟踪 delphi 代码,它归结为 VCL.Controls 中的 2 条语句:

  Perform(WM_SETTEXT, 0, Buffer);
  Perform(CM_TEXTCHANGED, 0, 0);
Run Code Online (Sandbox Code Playgroud)

Buffer 在所有情况下都保存了正确的标题字符串值。但是在43,680 个字符时,标题消失了。所以它似乎是 Windows 限制,但我找不到任何确认。

windows delphi vcl

7
推荐指数
0
解决办法
140
查看次数

如何更改Firefox检查元素的背景颜色

希望很简单。我在Win 7上使用Firefox 17.0.1。一切工作正常,但是现在当我使用“检查元素”时,检查元素窗格具有深蓝色背景,而html元素具有深色前景色,因此很难阅读。我进行了搜索,但是自然而然地,大多数搜索都将结果显示为更改页面的背景颜色,而不是检查器本身的背景颜色。任何帮助表示赞赏。谢谢。

firefox background colors inspect-element

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

在Delphi中定位组件的提示

使用Delphi XE6,我正在创建一个类似TdateTimePicker的控件,但由于几个原因,我使用的是TButtonedEdit,其中嵌入了TMonthCalendar"嵌入".一个完整的简单演示是:

当点击右键(使用Style = WS_POPUP)时,我按照需要将月份日历显示为SHOWn,并在进行选择时隐藏它,用户导航,ESCapes等.

unit DateEditBare1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ImgList,  Vcl.ComCtrls, Vcl.StdCtrls,
  CommCtrl;

type

  TespMonthCalendar = class(TMonthCalendar)
    procedure DoCloseUp(Sender: TObject);
  private
    FDroppedDown: boolean;
    FManagerHandle: HWND;   // just a convenience to avoid having to assume its in the owner

    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
    procedure SetWindowDIMs;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure WMActivate(var Msg: TWMActivate); message WM_ACTIVATE; …
Run Code Online (Sandbox Code Playgroud)

delphi components delphi-xe6

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

从64位XE6中的Windows回调返回结果

我有一些代码使用EnumFontFamiliesEX来确定是否安装了特定字体(使用其"facename").代码在32位工作正常.当我编译并以64位运行它时,它在回调例程中不断抛出异常.

我现在已经让它在两个BUT下工作只有当不是将函数FindFontbyFaceName的结果作为第四个参数传递给EnumFontFamiliesEX时,我传递一个本地(或全局)变量 - 在这种情况下的MYresult.(然后设置结果).我不明白发生了什么事?谁能解释或指出我更好的方式.(我对字体的机制并不是那么感兴趣,作为基本的回调机制).

// single font find callback
function FindFontFace(  {$IFDEF CPUX86}  lpelf: PLogFont;       {$ENDIF}
                        {$IFDEF CPUX64}  lpelf: PEnumLogFontEx; {$ENDIF}
                        lpntm: PNewTextMetricEx;
                        AFontType: DWORD; var Aresult: lparam): integer ; stdcall;
begin
  result := 0;       // 1 shot only please  - not interested in any variations in style etc
  if (lpelf <> nil) then
    Aresult := -1         // TRUE
  else
    Aresult := 0;
end;


function FindFontbyFaceName(ACanvas: TCanvas; const AFacename: string): boolean;
var
  lf: TLogFont;
  Myresult: boolean; …
Run Code Online (Sandbox Code Playgroud)

windows delphi callback delphi-xe6

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

如何检测DLL中是否正在运行Delpi代码?

我正在创建一个[Windows] DLL,主要供非delphi调用者使用。我想使用一些现有的“库”代码,但是如果在DLL中执行某些部分,则可能不合适或存在问题。

有没有一种方法可以检测代码是否在DLL中运行?

windows delphi dll

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

动态数组可以用作Windows回调函数的参数吗?

我正在重做一些64位准备好的代码.这将EnumWindows与回调一起使用,以返回运行的delphi应用程序列表(除IDE和其自身之外),然后将其终止.最初它使用TStringlist来保存这些应用程序的句柄.我想改变它直接以数字形式收集句柄.我已经得到了一个非常令人满意的解决方案,使用通用TList来收集句柄.

一路上,我最初尝试使用动态数组 - 它没有用.在验证了TList解决方案之后,出于学术兴趣重新审视了它,并尝试使用动态数组实现它的每种方式 - 都没有成功.我在文档中找不到任何禁令,虽然我在Rudy V的博客中遇到过这个说明:"不管怎样,Delphi字符串和动态数组都不应该作为参考计数类型传递给API函数......"

所以,我只是在寻求一个"裁决",即动态数组可以或不能用作回调函数的参数.

type
  THandleList=Tlist<THandle>;
const
  ReqdClass: string = 'TApplication' ;


procedure KillWindowViaHandle(Ahwnd:THandle; Amsg: Cardinal=WM_CLOSE);
begin
  PostMessage(Ahwnd, Amsg, 0, 0);
end;

// Get Active "User" Applications (except for bds.exe & caller). Relies on top
// level window having classname of TApplication. Returns list of handles.

function FindActiveUSERApps(AHandle: HWND; AList: lparam): BOOL ; stdcall;
var
  classname: string;
  pid: DWORD;
  imagename: string;
begin
  Result := true;         // keep it going .. want them all
  GetWindowThreadProcessID(AHandle, @pid);  // …
Run Code Online (Sandbox Code Playgroud)

windows arrays delphi callback delphi-xe6

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

Delphi 11.2 速度按钮在设计时不显示边框

运行 Windows 10 21H2。刚刚升级到 Delphi 11.2(从 11.1)。速度按钮(Flat=False)在设计时不显示按钮矩形。它确实在运行时出现。我们的大多数/所有 VCL 项目都有一个空的样式名称。我注意到,如果我设置按钮(甚至表单)的样式名称,那么它会正常显示。但这是最好的处理方式吗?是否有一个全局设置可以恢复“正常”行为?

delphi button

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

Delphi Android 10.3.3 上没有返回键的 OnKeyDown 事件

我正在从 Delphi 10.2.3 升级到 10.3.3。我的 android 应用程序现在没有从虚拟键盘为 Return 键生成 OnKeyDown 事件。我已经使用一个非常基本的新创建的项目确认了这一点,所以它似乎与 10.2.3 的转换无关。

任何想法,将不胜感激。

embarcadero 的 QA 回复如下:

“根据此文档 -处理键盘操作或此 - KeyEvent

使用 KeyEvent 类和相关 API 处理键盘事件时,您应该期望此类键盘事件仅来自硬件键盘。对于软输入法(屏幕键盘)上的任何键,您永远不应依赖接收键事件。

我认为使用在文本更改时启动的方法是解决此问题的充分方法......

我认为这个Stackoverflow问题和这个Blogpost可能有用。”

提供的解决方案包括向 JFMXTextEditorProxy 添加一个 TextListener,而后一个接口已从 delphi 10.3 中消失。我目前正在尝试在 10.3 中实现等效的东西,但希望得到任何指导。顺便说一句:其他人会有不同的目标,但就我而言,我只想看到返回键。

delphi android delphi-10.3-rio

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