我有一个放置组合框的 Delphi 应用程序。最近在迁移到 Win 7 后,组合框下拉的通知行为很有趣。它在 XP 中可以正常工作,其中状态栏矩形的组合框下拉菜单。但在 Windows 7 中,组合框下拉区域显示在顶部屏幕上并闪烁。必须按住鼠标按钮才能保持显示状态,但这不允许选择任何项目。
不知道有没有其他人有同样的经历?请告知在 Win 7 中需要进行哪些特殊处理才能使组合框下拉菜单在放置在状态栏内时完美工作。
PS:放置在窗体上的组合框在 Win7 中表现正常。仅当组合框放置在状态栏内时,才会显示上述行为。
感谢您的意见和/或建议。
谢谢。
演示代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
const Rect: TRect);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Style, idx: Integer;
begin
StatusBar1.Panels[0].Style := psOwnerDraw;
ComboBox1.Parent := StatusBar1;
Style := GetWindowLong(ComboBox1.Handle, GWL_EXSTYLE);
Style := Style - WS_EX_STATICEDGE;
SetWindowLong(ComboBox1.Handle, GWL_EXSTYLE, Style);
for idx := 1 to 20 do
ComboBox1.Items.Add(Format('Test Item %d',[idx]));
end;
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
const Rect: TRect);
begin
if Panel = StatusBar1.Panels[0] then
with ComboBox1 do
begin
Top := Rect.Top;
Left := Rect.Left;
Width := Rect.Right - Rect.Left - 5;
Height := Rect.Bottom - Rect.Top - 10;
end
end;
end.