小编Fla*_*vio的帖子

Delphi:在多线文本组件(如TMemo或TRichEdit)中使用TextHint

TextHint是TEdit属性,当文本框为空时,它允许您在文本框中显示灰色文本提示.

我想在TMemo或TRichEdit中放置相同类型的提示,因为TEdit组件不允许多行.

如何在Delphi中的多行文本控件中使用TextHint?TextHint属性实际存在于TMemo和TrichEdit组件中,但它似乎没有任何效果.

先感谢您.

delphi

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

Delphi:声明变量避免循环引用

我有一个Delphi单元需要保留各种形式的应用程序的指针,以便稍后对它们进行操作.

为了执行这些操作,我需要将指针强制转换为表单类型,例如.

var    
  ptrFrmMain: Pointer;
  CurrentFrmMain: TfrmMain;
begin
    CurrentFrmMain := ptrFrmMain;
    CurrentFrmMain.Close();
end;
Run Code Online (Sandbox Code Playgroud)

问题是该单元包含在应用程序的所有其他Delphi单元的使用中.因此,虽然我可以Pointer在接口部分声明一个简单类型,但我不能声明在其他单元(例如TfrmMain单元frmMain.pas)中声明的类型.

我可以通过在实现部分中使用来解决这个问题,例如:

interface
type TMyThread = class(TThread)
  Public
    ptrFrmMain:Pointer
...

implementation
    uses frmMain

    var
      CurrentFrmMain: TfrmMain;
Run Code Online (Sandbox Code Playgroud)

但是仍然存在一个问题:我需要将变量特定于我的类实例,用于多线程目的,而不是通用的全局变量.但我不能把它放在我的TmyThread班级里面,因为TfrmMain没有在那里声明,我不能把它放在接口部分的使用中.

一个解决方案是CurrentFrmMain在所有使用它的过程中作为局部变量放置,然后CurrentFrmMain := ptrFrmMain每次都进行转换,但是你知道更好的解决方案吗?

非常感谢你提前.

delphi circular-reference

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

显示分辨率更改后表单重绘问题

我有一个 Delphi GUI 应用程序,它运行得很好,直到显示分辨率更改自动导致程序的 GUI 窗口被重新绘制。我们可以通过消息捕获这个显示事件WM_DISPLAYCHANGE

在重绘事件中,似乎某些TListView在那一刻隐藏的组件不会被重绘,直到它们再次可见。

似乎仅在表单的可见组件上调用重绘,并且操作系统在不可见的项目再次变得可见时重新绘制它们。

但是,当代码引用消息TListViewWM_DISPLAYCHANGE尚未显示的 a 中的项目时,这会导致问题。内部应该TListView有项目,但TListView.Items.Count返回 0,就好像TListView是空的一样。

在屏幕上显示可见后TListView,一切都会恢复正常,并且我可以再次引用TListView.

我尝试显式调用TListView.Repaint()更新它而不必显示它,但它不起作用。

这是有记录的行为吗?

有没有办法立即重新绘制不可见的表单组件,而不让它在屏幕上可见?

delphi listview vcl repaint

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

标签 统计

delphi ×3

circular-reference ×1

listview ×1

repaint ×1

vcl ×1