我注意到在(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 限制,但我找不到任何确认。
希望很简单。我在Win 7上使用Firefox 17.0.1。一切工作正常,但是现在当我使用“检查元素”时,检查元素窗格具有深蓝色背景,而html元素具有深色前景色,因此很难阅读。我进行了搜索,但是自然而然地,大多数搜索都将结果显示为更改页面的背景颜色,而不是检查器本身的背景颜色。任何帮助表示赞赏。谢谢。
使用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) 我有一些代码使用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] DLL,主要供非delphi调用者使用。我想使用一些现有的“库”代码,但是如果在DLL中执行某些部分,则可能不合适或存在问题。
有没有一种方法可以检测代码是否在DLL中运行?
我正在重做一些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 10 21H2。刚刚升级到 Delphi 11.2(从 11.1)。速度按钮(Flat=False)在设计时不显示按钮矩形。它确实在运行时出现。我们的大多数/所有 VCL 项目都有一个空的样式名称。我注意到,如果我设置按钮(甚至表单)的样式名称,那么它会正常显示。但这是最好的处理方式吗?是否有一个全局设置可以恢复“正常”行为?
我正在从 Delphi 10.2.3 升级到 10.3.3。我的 android 应用程序现在没有从虚拟键盘为 Return 键生成 OnKeyDown 事件。我已经使用一个非常基本的新创建的项目确认了这一点,所以它似乎与 10.2.3 的转换无关。
任何想法,将不胜感激。
embarcadero 的 QA 回复如下:
使用 KeyEvent 类和相关 API 处理键盘事件时,您应该期望此类键盘事件仅来自硬件键盘。对于软输入法(屏幕键盘)上的任何键,您永远不应依赖接收键事件。
我认为使用在文本更改时启动的方法是解决此问题的充分方法......
我认为这个Stackoverflow问题和这个Blogpost可能有用。”
提供的解决方案包括向 JFMXTextEditorProxy 添加一个 TextListener,而后一个接口已从 delphi 10.3 中消失。我目前正在尝试在 10.3 中实现等效的东西,但希望得到任何指导。顺便说一句:其他人会有不同的目标,但就我而言,我只想看到返回键。
delphi ×7
windows ×4
delphi-xe6 ×3
callback ×2
android ×1
arrays ×1
background ×1
button ×1
colors ×1
components ×1
dll ×1
firefox ×1
vcl ×1