小编jed*_*der的帖子

在Delphi中是否可以使用带图标的主题主菜单?

我正在使用Delphi 7.在Windows 7上进行测试.

在表单上删除a TMainMenu和a TImageList.添加一些菜单TMainMenu和一些图像到TImageList.当TImageList没有分配到TMainMenuImages属性,应用程序是这样的:

德尔福主题TMainMenu没有图标

但是,一旦TImageList被分配到TMainMenuImages属性,应用程序是这样的:

德尔福非主题的TMainMenu与图标

此外,如果Images在运行时更改(分配或取消分配)属性,只有子菜单项更改,根菜单项(我的示例应用程序中的文件,编辑,工具,设置和帮助)永远不会更改 - 它们始终如果Images在设计时没有分配财产,则保持主题,或者如果Images在设计时分配财产,它们始终保持非主题.

最后,所有这一切都在发生,无论是否XPManifest使用.

所以,我的问题是:

1.当使用图标时,为什么主题消失了?我猜这些图标是使用像所有者绘图这样的内部绘制的,它打破了主题,但这只是猜测.

2.为什么主菜单主题,即使XPManifest不使用?

3.最重要的是,我如何才能拥有带图标的主题菜单?

delphi icons themes menu delphi-7

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

如何从TRichEdit控件中完全删除选择栏?

TRichEdit控件的每一行的左侧,有一个不可见的空间,光标变为右上箭头,当您单击那里时,整个行被选中.当TRichEdit的文本对齐方式为中心或右侧时,很容易看到它.我相信这个空间被称为选择栏.

TMemo控件中不存在这样的条.

我的问题:

如何删除此选择栏,以便光标行为与中的相同TMemo

我正在使用Delphi 7,没有TRichEdit属性来控制这种行为.

ECO_SELECTIONBAR您可以对EM_SETOPTIONS消息使用一个值,但它只添加或删除选择栏的一小部分(仅当您要将选择栏添加到TRichEdit具有左对齐的选区时才有用).

delphi richedit textselection

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

为特定扩展(不是文件类型)添加Windows Shell上下文菜单项

添加Windows外壳上下文菜单,让我们说的.txt文件-如果.txt 扩展HKEY_CLASSES_ROOT(或者HKEY_CURRENT_USER\Software\Classes,其实并不重要)的默认值(文件类型)txtfile-您添加的命令HKEY_CLASSES_ROOT\txtfile\shell\yourcommand(和命令本身HKEY_CLASSES_ROOT\txtfile\shell\yourcommand\command,当然)你走了.

但是,假设.txt 扩展名具有默认值Notepad++_file.Notepad++_file可能是许多其他扩展文件类型,因此如果您将命令添加到,则此命令将针对与Notepad ++关联的每个扩展名显示.HKEY_CLASSES_ROOT\Notepad++_file

所以,问题是:如果可能的话,如何在不更改文件类型的情况下为只有一个特定的EXTENSION添加菜单条目?

PS:我不想只复制文件类型,因为将来对原始文件类型的更改不会影响重复的文件类型.

windows registry contextmenu

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

为什么EM_SETTEXTMODE不起作用?

我试图用EM_SETTEXTMODE一个RichEdit在Delphi 7控制.

只需创建一个新项目,添加一个TRichEdit控件和一个TButton控件,并将以下代码添加到按钮的单击处理程序:

  SendMessage(RichEdit1.Handle, WM_SETTEXT, 0, LPARAM(PChar('')));
  Button1.Caption := IntToStr(SendMessage(RichEdit1.Handle, EM_GETTEXTMODE, 0, 0));
  Button1.Caption := Button1.Caption + ' ' + IntToStr(SendMessage(RichEdit1.Handle, EM_SETTEXTMODE, TM_PLAINTEXT, 0));
  Button1.Caption := Button1.Caption + ' ' + IntToStr(SendMessage(RichEdit1.Handle, EM_GETTEXTMODE, 0, 0));
Run Code Online (Sandbox Code Playgroud)

38 0 38单击按钮后,按钮的标题设置为,意味着文本模式根本没有变化 - 最初是38(TM_RICHTEXT or TM_SINGLELEVELUNDO or TM_MULTICODEPAGE),然后SETTEXTMODE是成功(0),但即使在此之后它仍然是38.

根据文档的建议,RichEdit在使用之前清除文本EM_SETTEXTMODE.

我已尝试设置不同的值,EM_SETTEXTMODE它始终保持不变38.

我注意到,即使控件在调用之前包含文本,它也会EM_SETTEXTMODE返回0(成功)RichEdit. …

delphi winapi richedit windows-messages trichedit

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

Delphi:TRichEdit非默认非Unicode系统语言中的文本字符串(ANSI)

所以这是设置:

  1. 使用TRichEdit控件创建一个新的Delphi 7应用程序.我们在这里谈论非Unicode应用程序.
  2. 在Windows的"区域和语言选项"中安装新的输入语言,其编码与非Unicode程序的默认语言编码不同 - 例如希腊语.
  3. 在应用程序中添加一个按钮,并在其OnClick处理程序中添加Button1.Caption := RichEdit1.Text;,并将其设置Font.Charset为刚安装的输入语言的字符集(GREEK_CHARSET如果我们坚持这个例子).
  4. 运行应用程序,切换到新的(希腊语)输入语言,在RichEdit中键入几个字母并按下按钮 - 按钮的标题现在有????符号而不是希腊字符.

  5. 现在,如果您将非Unicode程序的默认语言设置为希腊语(需要重新启动Windows),则此问题将消失 - 希腊字符将正确显示.将非Unicode程序的默认语言设置回原来的状态,然后又出现问题.

所以我猜想TRichEdit在内部使用Unicode,因为更改它的Font.Charset值永远不会改变任何东西 - RichEdit正确接受任何已安装的输入语言,如果你安装了两种使用不同字符集的非拉丁语言(希腊/ GREEK_CHARSET/和俄语/ RUSSIAN_CHARSET/例如)它会接受它们而不改变它的Font.Charset.

我还猜想当你得到TRichEdit 的.Text(或.Lines[i])值时,它会根据Windws的非Unicode程序默认语言将其内部Unicode文本转换为ANSI .

此外,将.Text值分配给WideString或UnicodeString也无法正常工作(文本再次出现????而不是正确的字符),它不仅在您将其分配给String(AnsiString)时.

所以这就是问题:

我希望能够根据我选择的字符集正确地将RichEdit的文本转换为字符串(ANSI),而不是系统的非Unicode程序默认语言.我怎样才能做到这一点?我更喜欢不涉及第三方组件的解决方案,当然,如果不可能的话 - 任何事情都可以.

谢谢!

PS:切换到Delphi 2009或更高版本是不可接受的解决方案.

delphi richedit delphi-7 input-language

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

Delphi - 获取Windows的默认非unicode字符集

我有一个Delphi 7应用程序.我需要能够获得非unicode程序的默认Windows字符集.我知道DEFAULT_CHARSET设置了它,但我需要确切地知道它是哪个charset,以便我可以将它与其他字符集进行比较.这可能吗?怎么样?

谢谢!

delphi character-encoding non-unicode

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

Delphi 7:如何检查Windows主题是否已启用?

使用Delphi 7,我如何检查Windows是否启用了主题(即它是否是经典的灰色窗口外观)?

delphi winapi delphi-7

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