Autor Beitrag
TriphunEM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Mo 02.01.06 10:13 
Hallo, im folgenden Code hab ich eine Subkomponente von TMainMenü abgeleitet und die Methoden

- DoLeftMouseButtonDown
- DoRightMouseButtonDown

hinzugefügt.

Allerdings stehen die Methoden nur auf dem eigentlichen Mainmenü zur Verfügung. Ich brauche diese aber auch auf jeden einzelnen Item den ich anlege!

Kann mir jemand helfen? Danke!

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
unit AdvMainMenu;

interface

uses
  Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TAdvMainMenu = class(TMainMenu)
  private
    { Private-Deklarationen }
    FOnLMBClicked: TNotifyEvent;
    FOnRMBClicked: TNotifyEvent;
    procedure LeftMouseButtonDown(var Msg : TMouseInput); message WM_LBUTTONDOWN;
    procedure RightMouseButtonDown(var Msg : TMouseInput); message WM_RBUTTONDOWN;
  protected
    { Protected-Deklarationen }
    procedure DoLeftMouseButtonDown(var Msg : TMouseInput); dynamic;
    procedure DoRightMouseButtonDown(var Msg : TMouseInput); dynamic;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published-Deklarationen }
    property OnLMBClick: TNotifyEvent read FOnLMBClicked write FOnLMBClicked;
    property OnRMBClick: TNotifyEvent read FOnRMBClicked write FOnRMBClicked;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TAdvMainMenu]);
end;

constructor TAdvMainMenu.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TAdvMainMenu.Destroy;
begin
  inherited Destroy;
end;

procedure TAdvMainMenu.DoLeftMouseButtonDown(var Msg: TMouseInput);
begin
  If Assigned(FOnLMBClicked) then
    FOnLMBClicked(Self);
end;

procedure TAdvMainMenu.DoRightMouseButtonDown(var Msg: TMouseInput);
begin
  If Assigned(FOnRMBClicked) then
    FOnRMBClicked(Self);
end;

procedure TAdvMainMenu.LeftMouseButtonDown(var Msg: TMouseInput);
begin
  DoLeftMouseButtonDown(Msg);
end;

procedure TAdvMainMenu.RightMouseButtonDown(var Msg: TMouseInput);
begin
  DoRightMouseButtonDown(Msg);
end;

end.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 02.01.06 11:43 
Dazu müsstest du TMenuItem ableiten.

AXMD
TriphunEM Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Mo 02.01.06 12:17 
Ja, das ist mir schon klar nur wie!
hatte es mal so probiert, aber das funktioniert nicht :

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
unit AdvMainMenu;

interface

uses
  Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TAdvMainMenu = class(TMainMenu)
  private
    { Private-Deklarationen }
    FOnLMBClicked: TNotifyEvent;
    FOnRMBClicked: TNotifyEvent;
    procedure LeftMouseButtonDown(var Msg : TMouseInput); message WM_LBUTTONDOWN;
    procedure RightMouseButtonDown(var Msg : TMouseInput); message WM_RBUTTONDOWN;
  protected
    { Protected-Deklarationen }
    procedure DoLeftMouseButtonDown(var Msg : TMouseInput); dynamic;
    procedure DoRightMouseButtonDown(var Msg : TMouseInput); dynamic;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published-Deklarationen }
    property OnLMBClick: TNotifyEvent read FOnLMBClicked write FOnLMBClicked;
    property OnRMBClick: TNotifyEvent read FOnRMBClicked write FOnRMBClicked;
  end;
  TAdvMenuItem = class(TMenuItem)
  private
    { Private-Deklarationen }
    FOnLMBClicked: TNotifyEvent;
    FOnRMBClicked: TNotifyEvent;
    procedure LeftMouseButtonDown(var Msg : TMouseInput); message WM_LBUTTONDOWN;
    procedure RightMouseButtonDown(var Msg : TMouseInput); message WM_RBUTTONDOWN;
  protected
    { Protected-Deklarationen }
    procedure DoLeftMouseButtonDown(var Msg : TMouseInput); dynamic;
    procedure DoRightMouseButtonDown(var Msg : TMouseInput); dynamic;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published-Deklarationen }
    property OnLMBClick: TNotifyEvent read FOnLMBClicked write FOnLMBClicked;
    property OnRMBClick: TNotifyEvent read FOnRMBClicked write FOnRMBClicked;
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TAdvMainMenu]);
end;

constructor TAdvMainMenu.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TAdvMainMenu.Destroy;
begin
  inherited Destroy;
end;

procedure TAdvMainMenu.DoLeftMouseButtonDown(var Msg: TMouseInput);
begin
  If Assigned(FOnLMBClicked) then
    FOnLMBClicked(Self);
end;

procedure TAdvMainMenu.DoRightMouseButtonDown(var Msg: TMouseInput);
begin
  If Assigned(FOnRMBClicked) then
    FOnRMBClicked(Self);
end;

procedure TAdvMainMenu.LeftMouseButtonDown(var Msg: TMouseInput);
begin
  DoLeftMouseButtonDown(Msg);
end;

procedure TAdvMainMenu.RightMouseButtonDown(var Msg: TMouseInput);
begin
  DoRightMouseButtonDown(Msg);
end;

constructor TAdvMenuItem.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TAdvMenuItem.Destroy;
begin
  inherited Destroy;
end;

procedure TAdvMenuItem.DoLeftMouseButtonDown(var Msg: TMouseInput);
begin
  If Assigned(FOnLMBClicked) then
    FOnLMBClicked(Self);
end;

procedure TAdvMenuItem.DoRightMouseButtonDown(var Msg: TMouseInput);
begin
  If Assigned(FOnRMBClicked) then
    FOnRMBClicked(Self);
end;

procedure TAdvMenuItem.LeftMouseButtonDown(var Msg: TMouseInput);
begin
  DoLeftMouseButtonDown(Msg);
end;

procedure TAdvMenuItem.RightMouseButtonDown(var Msg: TMouseInput);
begin
  DoRightMouseButtonDown(Msg);
end;

end.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 02.01.06 12:22 
Du wirst wohl oder übel dein abgeleitetes TMainMenu so modifizieren müssen, dass es deine MenuItems beinhaltet anstatt der normalen TMenuItems; das dürfte nicht ganz so einfach werden.

AXMD
TriphunEM Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97



BeitragVerfasst: Di 03.01.06 09:34 
na toll
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 03.01.06 09:47 
Bei mir werden nicht mal LeftMouseButtonDown und RightMouseButtonDown der TAdvMainMenu Komponente aufgerufen wenn ich mit rechts oder links auf das Menü klicke. Funktioniert das bei dir?

lg martin

_________________
Ein Nutzer der Ecke ;-)