关于MENU,COMBOBOX的简单问题。 承载MENUITEM和COBOBOX的下拉筐的是窗体吗?这样的窗体应该用什么风格创建?一般的窗体在显示的时候,主窗体总是会失去焦点。看了COMBOBOX的代码,还是没弄懂。谁给说说。。疑惑着呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Menuitem的下拉筐不是窗体Combobox的下拉矿應該是窗体. popupmenu呢?要显示的话,总得有东西当载体啊。不是窗体是什么?COMBOBOX的是什么风格的窗体呢?它的CREATEPARAMS方法如何重载啊?STYLE如何设定? popupmenu可以用其他的空间作为他的载体显示。只要配置属性就可以了! Windows的菜单本来就不是窗体啊,除非你刻意要去模拟一个,例如IE的收藏夹等. 菜单本来就是windows里有的一个元素,就如同窗体一样。 unit PopupWnd;{$DEFINE WIN32}interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TCloseUpEvent = procedure (Sender:TObject;Accept:Boolean) of object; TPopupWindow = class(TCustomControl) private FEditor: TWinControl; FCloseUp: TCloseUpEvent; procedure WMMouseActivate(var Message: TMessage); message WM_MOUSEACTIVATE; protected procedure CreateParams(var Params: TCreateParams); override;{$IFDEF WIN32} function Getvalue: Variant; virtual; abstract; procedure Setvalue(const value: Variant); virtual; abstract;{$ELSE} procedure CreateWnd; override; function Getvalue: string; virtual; abstract; procedure Setvalue(const value: string); virtual; abstract;{$ENDIF} procedure InvalidateEditor; procedure PopupMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure CloseUp(Accept: Boolean); virtual; public constructor Create(AOwner: TComponent); override; function GetPopupText: string; virtual; procedure Hide; procedure Show(Origin: TPoint); property OnCloseUp: TCloseUpEvent read FCloseUp write FCloseUp; end;implementation{ TPopupWindow }constructor TPopupWindow.Create(AOwner: TComponent);begin inherited Create(AOwner); FEditor := TWinControl(AOwner);{$IFDEF WIN32} ControlStyle := ControlStyle + [csNoDesignVisible, csReplicatable, csAcceptsControls];{$ELSE} ControlStyle := ControlStyle + [csAcceptsControls];{$ENDIF} Ctl3D := False; ParentCtl3D := False; Visible := False; Parent := FEditor; onMouseUp := PopupMouseUp;end;procedure TPopupWindow.CreateParams(var Params: TCreateParams);begin inherited CreateParams(Params); with Params do begin Style := WS_POPUP or WS_BORDER or WS_CLIPCHILDREN;{$IFDEF WIN32} ExStyle := WS_EX_TOOLWINDOW;{$ENDIF} WindowClass.Style := WindowClass.Style or CS_SAVEBITS; end;end;{$IFNDEF WIN32}procedure TPopupWindow.CreateWnd;begin inherited CreateWnd; if (csDesigning in ComponentState) then SetParent(nil);end;{$ENDIF}procedure TPopupWindow.WMMouseActivate(var Message: TMessage);begin Message.Result := MA_NOACTIVATE;end;function TPopupWindow.GetPopupText: string;begin Result := '';end;procedure TPopupWindow.InvalidateEditor;var R: TRect;begin //if (FEditor is TCustomComboEdit) then begin // with TCustomComboEdit(FEditor) do // SetRect(R, 0, 0, ClientWidth - FBtnControl.Width - 2, ClientHeight + 1); //end //else R := FEditor.ClientRect; InvalidateRect(FEditor.Handle, @R, False); UpdateWindow(FEditor.Handle);end;procedure TPopupWindow.PopupMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin if Button = mbLeft then CloseUp(PtInRect(Self.ClientRect, Point(X, Y)));end;procedure TPopupWindow.CloseUp(Accept: Boolean);begin if Assigned(FCloseUp) then FCloseUp(Self, Accept);end;procedure TPopupWindow.Hide;begin SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW); Visible := False;end;procedure TPopupWindow.Show(Origin: TPoint);begin SetWindowPos(Handle, HWND_TOP, Origin.X, Origin.Y, 0, 0, SWP_NOACTIVATE or SWP_SHOWWINDOW or SWP_NOSIZE); Visible := True;end;end. 谢谢楼上的代码.我先派分了..回去再看..我担心的是这个POPUPWND SHOW出来以后,主FORM会不会失去焦点变灰,要是不会的话,就OK了. 跨进程访问 有第三方控件 fastreport 怎么不看打印预览,直接就打印 多线程处理速度确实比较快 adoconnection ConnectionString 加密问题 SQL语言难题! DBGRID中不能显示负值的问题 Treeview节点的动态实现,会的不难!! 如何通过编程获取CPU的温度? 我急需要D6的更新包,请各位朋友帮助? 谁知道Delphi替代字符串函数,高分奖励 求delphiX中文教程 报表??
Combobox的下拉矿應該是窗体.
PopupWnd;{$DEFINE WIN32}interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TCloseUpEvent = procedure (Sender:TObject;Accept:Boolean) of object; TPopupWindow = class(TCustomControl)
private
FEditor: TWinControl;
FCloseUp: TCloseUpEvent;
procedure WMMouseActivate(var Message: TMessage); message WM_MOUSEACTIVATE;
protected
procedure CreateParams(var Params: TCreateParams); override;
{$IFDEF WIN32}
function Getvalue: Variant; virtual; abstract;
procedure Setvalue(const value: Variant); virtual; abstract;
{$ELSE}
procedure CreateWnd; override;
function Getvalue: string; virtual; abstract;
procedure Setvalue(const value: string); virtual; abstract;
{$ENDIF}
procedure InvalidateEditor;
procedure PopupMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure CloseUp(Accept: Boolean); virtual;
public
constructor Create(AOwner: TComponent); override;
function GetPopupText: string; virtual;
procedure Hide;
procedure Show(Origin: TPoint);
property OnCloseUp: TCloseUpEvent read FCloseUp write FCloseUp;
end;implementation{ TPopupWindow }constructor TPopupWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEditor := TWinControl(AOwner);
{$IFDEF WIN32}
ControlStyle := ControlStyle + [csNoDesignVisible, csReplicatable,
csAcceptsControls];
{$ELSE}
ControlStyle := ControlStyle + [csAcceptsControls];
{$ENDIF}
Ctl3D := False;
ParentCtl3D := False;
Visible := False;
Parent := FEditor;
onMouseUp := PopupMouseUp;
end;procedure TPopupWindow.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do begin
Style := WS_POPUP or WS_BORDER or WS_CLIPCHILDREN;
{$IFDEF WIN32}
ExStyle := WS_EX_TOOLWINDOW;
{$ENDIF}
WindowClass.Style := WindowClass.Style or CS_SAVEBITS;
end;
end;{$IFNDEF WIN32}
procedure TPopupWindow.CreateWnd;
begin
inherited CreateWnd;
if (csDesigning in ComponentState) then SetParent(nil);
end;
{$ENDIF}procedure TPopupWindow.WMMouseActivate(var Message: TMessage);
begin
Message.Result := MA_NOACTIVATE;
end;function TPopupWindow.GetPopupText: string;
begin
Result := '';
end;procedure TPopupWindow.InvalidateEditor;
var
R: TRect;
begin
//if (FEditor is TCustomComboEdit) then begin
// with TCustomComboEdit(FEditor) do
// SetRect(R, 0, 0, ClientWidth - FBtnControl.Width - 2, ClientHeight + 1);
//end
//else
R := FEditor.ClientRect;
InvalidateRect(FEditor.Handle, @R, False);
UpdateWindow(FEditor.Handle);
end;procedure TPopupWindow.PopupMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then CloseUp(PtInRect(Self.ClientRect, Point(X, Y)));
end;procedure TPopupWindow.CloseUp(Accept: Boolean);
begin
if Assigned(FCloseUp) then FCloseUp(Self, Accept);
end;procedure TPopupWindow.Hide;
begin
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);
Visible := False;
end;procedure TPopupWindow.Show(Origin: TPoint);
begin
SetWindowPos(Handle, HWND_TOP, Origin.X, Origin.Y, 0, 0,
SWP_NOACTIVATE or SWP_SHOWWINDOW or SWP_NOSIZE);
Visible := True;
end;end.