小编use*_*105的帖子

如何识别按键上的unicode键?

我的应用程序使用unicode字符,我有几个文本字段,我想限制用户输入特殊字符,如:'";

begin
    if not (Key in ['a'..'z','A'..'Z',' ','0'..'9',#13,#8]) then
        Key := #0;
    if Key = #13 then
        bOk.Click;
end;
Run Code Online (Sandbox Code Playgroud)

所以在这一点上它允许用户添加空格并使用退格键来擦除,当然还有输入密钥来确认.

我想要输入的unicode字符很少.ą,č,ė,į,š,ų,ū,ž和他们的大写替代品,但只是将它们添加到集合中......

Key in ['a'..'z','A'..'Z',' ','0'..'9',#13,#8,'?'..'ž','?'..'Ž']
Run Code Online (Sandbox Code Playgroud)

...什么都不做,我仍然不能在文本字段中写这些符号.

我想知道,如何解决这个问题.有没有办法判断按下的键是否是我正在寻找的unicode字符?

谢谢

delphi unicode delphi-2009

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

如何在TScrollBox再次显示后显示滚动条?

我遇到了一个小问题.我正在动态生成一些控件并将它们放在一个TScrollbox组件上.但我注意到,如果滚动条可见,用户可以清楚地看到正在创建和放置的每个控件.所以看起来很多工作正在进行而且很慢.

我隐藏了滚动条并在其上生成了所有控件,这花费的时间更少,没有闪烁和相似.但这是问题所在.当我再次显示滚动条时,直到我实际调整表单大小时才会显示其滚动条.(滚动条的对齐方式是alClient)

有想法该怎么解决这个吗?

尝试重新粉刷,但它没有奏效.刷新也不起作用.

谢谢

编辑:

TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
    fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;
Run Code Online (Sandbox Code Playgroud)

上面的代码显示了我如何隐藏和显示滚动框.
fNaujasTermas生成一个包含多个轨迹栏,图像和编辑的面板.

我不确定可能会有一步一步的解释.只需创建一个过程,它将生成一些带有许多控件的面板,并将ScrollBox设置为父级.在生成任何内容之前隐藏滚动框,并在完成后取消隐藏它.
哦顺便说一句,面板是对齐的alTop.因此,每次创建新面板并将其放入滚动框时,它将显示在顶部,而所有其他面板将向下移动.

这就是我创建滚动条本身的方式

pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
Run Code Online (Sandbox Code Playgroud)

EDIT2:我想我知道如何重现这一点.
看起来,当向滚动框添加新面板时,它不会将其计入已存在于该滚动框中的所有控件的总高度.

所以举个例子.让我们说1面板的高度为200px.
ScrollBox高度为300px.

因此,在创建2个高度为400px的面板后,即使第二个面板的一半不可见,滚动框也不会显示滚动条.如果我再添加一个面板= 600px,滚动条将显示滚动条,看起来它只会滚动每2个面板,而不是3.当尝试滚动这样的窗口时,值会重新计算,一切都很好地显示.

所以主要的问题是,如何使滚动条"及时"显示滚动条,这样没有面板被切成一半?

delphi delphi-2009 tscrollbox

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

有多种类型的数组?

我想知道是否有办法制作一个具有多种类型数据字段的数组.

到目前为止我一直在使用 aMyArray: array of array [0..1] of TPoint;

但现在,这对我来说还不够.我需要在现有的2"Point"元素中添加3个元素,使其成为一个数组aMyArray: array of (TPoint,TPoint,real,real,real)

所以aMyArray的每个元素都有5个'子元素',其中2个是TPoint类型,其中3个是'真实'类型.

这有可能以某种方式实现吗?

arrays delphi delphi-2009

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

preg_match和长字符串

这是我试图用来在文本文件中查找特定文本的preg_match.

if (preg_match($regexp,$textFile,$result) > 0) {
    echo "Found ".$result[0];
} else {
    echo "Not found";
}
Run Code Online (Sandbox Code Playgroud)

但是,结果总是如此Found.结果数组为空.现在我读到preg_match无法使用长字符串.

我的文本文件大约是300KB,所以我想是300000个字符.

我100%确定搜索到的字符串在文本文件中,并且preg_match函数返回值大于0的事实意味着它找到了它,但它没有以某种方式将它放入结果数组中.

所以我的问题是,我如何让它发挥作用?

regexp就是/[specific text]\{(\d*)\}/这样,当然我希望能够得到括号中的数字.

php regex preg-match

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

如何解决"权限被拒绝访问财产'警报'"?

我正在制作一个greasmonkey脚本的网页.此页面包含多个iframe.我发现它们是问题,但我不知道如何解决这个问题.

首先,我的脚本使用按钮创建一个小div框.通过按下按钮脚本分析网页内容并alert在某些条件下调用.

Firefox中的Javascript控制台已经向我大声说,访问被拒绝,document因为我的脚本document.getElementByID用于查找顶部文档的正文,其中div框被附加到其中.

这是一个容易避免的问题,因为脚本失败并陷入iframe,但它仍然在主页面上继续,因为它确实提供了访问权限document.

当我尝试在我的函数中使用警报时问题出现了问题.看起来像iframe接管我的脚本并用它杀死它Permission denied to access property 'alert'.

我如何告诉浏览器/脚本或其他什么,我只希望我的脚本在主文档上运行而我不想被iframe打扰?我安装了NO-script插件,允许主域并阻止了辅助域(即在iframes内加载)并且所有警报消息都正常.但是,我不能要求我的用户安装noscript启用/禁用特定域,我的脚本应该正常工作.我需要找到适用于所有iframe的解决方案.

希望它听起来并不令人困惑.

感谢您的任何帮助.

javascript firefox alert greasemonkey permission-denied

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

如何获取打开的窗口列表,包括 Delphi 应用程序中的 DLL

我的应用程序可以加载基本上包含另一个窗口应用程序的 DLL。

它在任何时候只能打开一个DLL窗口。

我遇到过一种情况,DLL 窗口显示消息框和/或我的主应用程序显示消息框或模态表单,并且通过停用应用程序(切换到另一个应用程序)然后激活它,随机移动所有窗口( ?) z 顺序,从而使 DLL 窗体及其消息框位于主窗体后面。主窗体消息框位于主窗体后面。

这会导致应用程序无响应。无法单击任何内容,无法关闭,无法最小化。必须通过任务管理器杀死。

在Delphi中,我看到有一个Screen对象并且它有一个列表Forms。我检查了它,发现它保存了我的应用程序当前打开的所有表单(甚至是消息框,它是 的结果ShowMessage(),它没有名称,但我可以看到ClassName)。

到目前为止,一切都很好,我可以遍历表单并用来SetWindowPos告诉他们正确的 z 顺序,但是,我无法为 DLL 应用程序执行此操作。Screen列表中没有此表格。

如何控制 DLL 表单的 z 顺序?
DLL 使用 Delphi、C++、WPF 构建。

delphi wpf dll delphi-7 z-order

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

如何在调整大小时使控件粘贴到其父边框?

我有一个TGroupBox作为父母,我想在其中放置一个按钮,并使其按钮将粘在组合框的右上角.

问题是,TGroupBox没有方法OnResize,所以我不知道如何告诉按钮在调整groupbox大小后它应该移动到哪里.

有没有办法让它成真?

谢谢

delphi delphi-2009

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

如何获得指针指向的浮点值?

在我的应用程序中,我创建了TList类型列表,其中我将指针存储为1个字符串,每3个项目存储2个浮点(实际)值.

aList.Add(@sName); //string
aList.Add(@x1); //float
aList.Add(@x2); //float
Run Code Online (Sandbox Code Playgroud)

然后,我想从列表中获取值,但我只能为字符串执行此操作

sStr := string(lList.items[i]);
Run Code Online (Sandbox Code Playgroud)

但我无法得到浮点值,因为a := real(lList...)会导致无效的类型转换错误.

那么我该如何获得浮动值呢?
当然我有一个问题,如果字符串转换实际上会给我字符串值.我不擅长指针的东西,所以我不知道该怎么做.

delphi floating-point pointers delphi-2009

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

如何拍摄照片的日期和时间?

我正在Delphi中编写一个程序,该程序应该获取使用photo cam拍摄的图片的日期和时间,然后重命名该文件以包括它找到的日期+时间.

到目前为止,我已经通过打开文件作为二进制文件并搜索特殊的字节顺序来实现这一点.然后这些字节后跟日期和时间.所以我遇到了一个问题.其实很少有问题.

  1. 因为它一个接一个地读取文件,所以读取文件是一个缓慢的过程.如果找到日期,它通常在文件的开头,它不需要很长时间,但是如果没有找到"特殊字节顺序",它将读取整个文件.所以我的方法太慢了.

  2. 即使是使用相同的相机拍摄,特殊字节顺序也可能会在某些图片中发生变化(我不知道为什么).所以我的程序有时无法在文件中找到日期,即使它在那里.

Windows资源管理器在所有图片中找到日期没有问题,所以我想也许有某种特殊功能可以让我得到我需要的东西?

如何从图片中获取所需信息,以便它适用于所有格式?

谢谢

delphi exif image

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