小编TJ *_*her的帖子

从模态窗口打开的帮助文件没有响应

使用Delphi XE2,Win64.

所以我有一个包含多种表单的大型应用程序,如果我从主窗体打开帮助文件并打开一个模态窗口然后点击F1以触发模态窗口上的上下文相关帮助,帮助文件窗口会显示正确的信息但是在关闭模态窗口之前,无法关闭帮助文件.如果我回到应用程序直到模态窗口关闭,我甚至无法让帮助文件再次获得焦点.

调用这个确切的从旧版本我们的应用程序(用Delphi 6个内置)的同一帮助文件坐在同一个文件夹中的新版本(与德尔福XE2建)的帮助文件时会显示F1键从模态窗口击中,是响应,可以像我期望的那样关闭.

帮助文件是.chm类型文件.

总结一下.

启动应用程序通过F1打开帮助文件跳转到应用程序并在应用程序中打开模态窗口通过点击F1帮助文件窗口从模态窗口启动帮助无法关闭,直到我跳回我的应用程序并关闭模态窗口.

有没有人知道为什么会这样?

我搜索过互联网,但没有发现任何类似的问题.

我们很难过.

干杯TJ

- - 编辑 - -

下面是一些示例两个表单应用程序的代码,它也表现出这种行为.

program Project1;

uses
  Vcl.Forms,
  HTMLHelpViewer,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.HelpFile := 'C:\helpfile.chm';
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)

这是Form1代码:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations …
Run Code Online (Sandbox Code Playgroud)

delphi helpfile delphi-xe2

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

Swift - 无法从 UITextField 获取真实文本 - 改为获取 NCISr 结果

我有一个 UITextField,在我的故事板中选中了“安全文本输入”。

当我将 UITextField.text 属性的文本分配给变量时,我得到的值是:

类名 = _NSClStr

而不是文本的实际值:

A B C D

如果我取消选中情节提要中的“安全文本输入”并对变量进行相同的分配,我会得到实际的文本。

分配值的代码非常简单:

passFieldText = self.passField.text!
Run Code Online (Sandbox Code Playgroud)

启用安全条目时的调试器输出:

(lldb) print passFieldText
(String) $R0 = class name = _NSClStr
Run Code Online (Sandbox Code Playgroud)

禁用安全输入时的调试器输出:

(lldb) print passFieldText
(String) $R0 = "ABCD"
Run Code Online (Sandbox Code Playgroud)

我什至尝试使用局部变量而不是类变量:

let passFieldText = self.passField.text ?? ""
Run Code Online (Sandbox Code Playgroud)

结果一样!

(lldb) print passFieldText
(String) $R0 = class name = _NSClStr
Run Code Online (Sandbox Code Playgroud)

passFieldText 被传递到另一个函数以验证密码,并且在该另一个函数中它还显示类名 = _NSClStr的值

我缺少什么?

干杯!

ios swift swift5

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

Delphi XE2 EnumWindows无法正常工作

在Win7 64位上使用Delphi XE2更新3或更新4.

调用enumwindows不像以前在Delphi 6中工作那样.

在Delphi 6中,enumwindows处理了窗口,直到回调函数返回False.这就是文档说它应该做的事情:

"要继续枚举,回调函数必须返回TRUE;要停止枚举,它必须返回FALSE."

按如下方式调用enumwindows:

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWindows(@FindMyWindow,0);
  if GLBWindowHandle <> 0 then begin
    ShowMessage('found');
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这是回调函数:

function FindMyWindow(hWnd: HWND; lParam: LPARAM): boolean; stdcall;
var TheText : array[0..150] of char;
str : string;
begin
Result := True;
GLBWindowHandle := 0;
if (GetWindowText(hWnd, TheText, 150) <> 0) then
   begin
   str := TheText;
   if str = 'Form1' then
      begin
      GLBWindowHandle := hWnd;
      Result := False;
      end
   else
      result := True;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,回调函数在按钮单击事件之前的代码中定义,因此编译器可以找到它而无需在接口部分中定义.

如果使用Delphi 6运行,则一旦返回False结果且GLBWindowHandle不为零,则窗口的枚举将停止 …

delphi winapi delphi-xe2

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

双击Delphi XE2应用程序中的TStaticText将标题复制到剪贴板

双击表单上的TStaticText将该TStaticText的标题复制到剪贴板.不需要双击事件.

重现步骤:

  • 使用Win 64和Delphi XE2更新4.
  • 创建一个VCL表单应用程序.
  • 在表单上放置一个TEdit.
  • 在表单上放置一个TStaticText.将标题更改为"TStaticText1Caption"
  • 在表单上放置第二个TStaticText.将标题更改为"TStaticText2Caption"
  • 运行程序(F9)
  • 在TEdit中键入一些文本.全部选中并通过CTRL + C复制.
  • 删除TEdit中的文本.粘贴它以验证文本是您复制的内容.
  • 删除TEdit中的文本.
  • 双击TStaticText.
  • 将文本粘贴到TEdit中.请注意,它不是原始复制文本,而是TStaticText的标题.

我已经向Embarcadero提交了一份错误报告.

我尝试将双击事件分配给TStaticTexts.它仍然将标题复制到剪贴板,即使它执行双击事件.

procedure TForm1.StaticText1DblClick(Sender: TObject);
begin
  Edit1.Text := 'Hello';
end;

procedure TForm1.StaticText2DblClick(Sender: TObject);
begin
  Edit1.Text := 'World';
end;
Run Code Online (Sandbox Code Playgroud)

TLabel或我尝试过的任何其他VCL控件都不会发生这种情况.

我们在表格上有很多TStaticTexts用于视觉设计目的,不能选择改用TLabels.

有人对如何防止这种情况有任何想法吗?

delphi delphi-xe2

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

UIButton上的iOS可伸缩图像显示了不稳定的角落

好的人,

我到处搜索过,似乎无法找到解决问题的方法.

我试图使用一个相当大的图像作为按钮背景来获得UIButton的自定义外观并减少应用程序的整体大小,因为它似乎是正确的事情.

但是,当我尝试在按钮上设置图像时,按钮看起来很奇怪,并且角落与常规UIButton的标准角半径不匹配.

我尝试过创建几种不同尺寸的图像,但我做的一切似乎都没有用.

我知道帽子应该是均匀的,我加上1像素中间伸展.

我的UIButton高44.如果我创建的图像高44像素,宽21像素,并且与默认按钮(它喜欢阿司匹林caplet)具有相同的圆角半径,并设置我的背景图像:

UIImage *btnImage = [UIImage imageNamed:@"buttontest1.png"];
UIImage *newImg = [btnImage stretchableImageWithLeftCapWidth:10 topCapHeight:0];
Run Code Online (Sandbox Code Playgroud)

角落只是不匹配,看起来奇怪地拉伸和按钮增长高度!

我知道stretchableImagewithLeftCapWidth已被弃用,但resizableCapWithInsets的使用对我来说意义不大,当我尝试这样做时,按钮图像似乎一遍又一遍地重复.

谁能弄清楚我做错了什么?有没有简单解释这个废话的地方?我似乎无法得到它.

谢谢!-TJ

编辑 - 使用resizableImageCapWithInserts显示结果后添加图像.它们不可能是典型的,因为我看到所有可能有效的例子,但这些例子对我来说都不适用.我刚想出如何在这里添加图像,所以这可能会有所帮助.

我的PNG文件宽21像素,高29像素 这是PNP文件,宽21px,高39px

我的代码的结果 这是使用以下代码设置背景图像的结果:

[self.button1 setBackgroundImage:[[UIImage imageNamed:@"buttontest4.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

据我了解,这应该按原样复制我的21像素宽图像的左10像素和右10像素,并将中间1像素拉伸,它似乎做了但它也使我的按钮垂直变大我是得到这个奇怪的重复.它应该与旁边的BTN大小相同.

这是我的Xcode布局: Xcode布局

无论我使用什么图像,我都会看到类似的结果.

我显然没有在这里找点东西.

到目前为止,我很欣赏答案.它变得稍微有点雾.

TJ

EDIT2:使用cap insets方法显示样本,图像为21px×44px.

在故事板中设计时,所有4个按钮均为44px高.

两个按钮44px高 如您所见,橙色按钮都比白色按钮大,用于比例缩放.

顶部按钮是button1,底部是button2.

通过使用UIImageResizingModeStretch的可选resizingMode参数,我找到了一种更接近它的方法.

但是,请注意按钮比它们应该的大.

以下是设置按钮图像的代码.

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

[self.button1 setBackgroundImage:[[UIImage imageNamed:@"buttontest1a.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 10, 10)] forState:UIControlStateNormal];

[self.button2 setBackgroundImage:[[UIImage imageNamed:@"buttontest1a.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, …
Run Code Online (Sandbox Code Playgroud)

iphone ios

4
推荐指数
2
解决办法
6771
查看次数

选项卡字符在Delphi XE2消息对话框中不再起作用 - 替代方案?

在Win 7 64位上使用Delphi XE2创建一个32位应用程序...

在Delphi 6中,我们使用消息中的制表符来创建漂亮的多行双列对话框.

str := 'Left item:' + #9#9 + 'Right Item' + #13#10 +
       'Next left item: + #9 + 'Next Right Item' + ...

if MessageDlg(str, mtConfirmation,[mbYes,mbNo],0) = mrYES then...
Run Code Online (Sandbox Code Playgroud)

这创建了一个很好的排列数据列表供用户查看,而不需要自定义表单来询问这个特定问题.右列很好地对齐,可以很容易地清楚地看到数据.

在Delphi XE2中,字符串中嵌入的制表符(#9)完全被忽略,根本没有空格.使用#32会创建一个空格,但不像选项卡字符(#9)那样很好地排列.我遇到了一些Unicode问题吗?

除了使用自定义表单之外,有什么建议可以恢复此格式吗?

干杯!

编辑:

当然,在我发布一个问题后,我想出了几个不同的解决方法.

首先,使用Application.MessageBox()确实维护制表符字符间距.

其次,奇怪的是,下面的代码可以使用制表符来保持正确的空格.

procedure TForm1.Button1Click(Sender: TObject);
var AMsgDialog : TForm;
var str : string;
begin
  str := 'Left item:' + #9#9 + 'Right Item' + #13#10 +
         'Next left item:' + #9#9 + 'Next Right Item';
  AMsgDialog := CreateMessageDialog(str, …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

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

Delphi 10 TDrawGrid - 如何正确刷新行?

使用Delphi 10.2 Tokyo.

我使用DrawCell方法使一行中的所有列与所选单元格的颜色相同.这允许我让用户点击不同的单元格,但仍然显示"选定"行.

这使用OnSelectCell方法使原始行和新选择的行无效.多年来一直使用这种方法.

如果我有一个具有水平滚动条的网格,当向右滚动并且用户在单元格中单击时,网格无法正确绘制.

下面是一个使用带有OnDrawCell事件和OnSelectCell事件的TDrawGrid的简单示例:

表格(DFM)代码:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 299
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DrawGrid1: TDrawGrid
    Left = 0
    Top = 0
    Width = 635
    Height = 299
    Align = alClient
    Color = clWhite
    ColCount = 15
    DefaultColWidth = 65 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-10.2-tokyo

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

如果没有明确设置,Indy TIdSSLIOHandlerSocketOpenSSL使用的默认协议是什么?

问候所以大脑信任.

如果没有为Indy 10 TIdSSLIOHanderSocketOpenSSL明确设置协议,那么使用的默认协议是什么?

我今天遇到了一些没有明确设置协议的代码.

  HTTPReq := TIdHTTP.Create(nil);
  IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  if Assigned(HTTPReq) then begin
    HTTPReq.ReadTimeout := 180000;//set read timeout to 3 minutes
    HTTPReq.Request.ContentType := 'text/xml;charset=UTF-8';
    HTTPReq.Request.Accept := 'text/xml';
    HTTPReq.Request.AcceptEncoding := 'gzip,deflate';
    HTTPReq.HTTPOptions := [];
    HTTPReq.IOHandler := IdSSLIOHandler;
  end;
Run Code Online (Sandbox Code Playgroud)

请注意,所使用的协议没有明确的设置!如果没有设置,默认使用什么?我担心的是这是使用TLS 1.0或者很快被弃用的东西.

使用Delphi 10.2 Tokyo Update 1和Indy 10.6.2.5366以及最新的1.0.2n Open SLL DLL

干杯!

TJ

delphi indy indy10

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

标签 统计

delphi ×6

delphi-xe2 ×4

ios ×2

delphi-10.2-tokyo ×1

helpfile ×1

indy ×1

indy10 ×1

iphone ×1

swift ×1

swift5 ×1

winapi ×1