![]() |
Onclick und rechte Maustaste!
Hallo,
wie kann ich bei einem OnClick-Event prüfen ob die rechte oder linke maustaste geklickt wurde. denn ein onmousedown oder so steht mir bei der komponente nicht zur verfügung! Es geht darum, ich will einem MainMenu-Eintrag der zur Laufzeit erstellt wurde ein bestimmtes Popup hinzufügen! Wenn jemand eine andere Lösung kennt, wäre ich auch zu frieden!!! ???? Danke |
Re: Onclick und rechte Maustaste!
Hi,
mir würde jetzt am ehesten einfallen, dass du einfach die Komponente ableitest. In der abgeleiteten Komponente erstellst du dann eine Methode, die auf Windows-Botschaften reagiert. Hier kannst du dann einfach auf das klicken der Linken oder Rechten Maustaste reagieren.
Delphi-Quellcode:
Gut, was soll ich da noch erklären? Sollte funktionieren, bin mir aber bei Typ der auftretenden Nachricht nicht sicher, müsstest du mal gucken ob die funktioniert.
type
TExtendedMainMenue = class(TMainMenue) private procedure LeftMouseButtonDown(var Msg : TMouseInput); message WM_LBUTTONDOWN; procedure RightMouseButtonDown(var Msg : TMouseInput); message WM_RBUTTONDOWN; end; Gruß Der Unwissende |
Re: Onclick und rechte Maustaste!
danke, aber da ich mit komponenten-programmierung net so gut auskenne bin ihc nur soweit gekommen
Delphi-Quellcode:
Wie muss denn der Code für die Prozeduren aussehen! Wichtig ist auch das ein Sender vorhanden ist, damit ich auch weiß auf welchen item geklickt wurde!
unit AdvMainMenu;
interface uses Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TAdvMainMenu = class(TMainMenu) private { Private-Deklarationen } procedure LeftMouseButtonDown(var Msg : TMouseInput); message WM_LBUTTONDOWN; procedure RightMouseButtonDown(var Msg : TMouseInput); message WM_RBUTTONDOWN; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published-Deklarationen } 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; kannst mir da noch weiter helfen??? |
Re: Onclick und rechte Maustaste!
Hallo!
Also ich bin mir nicht sicher, aber gehören die zwei Prozeduren LeftMouseButtonDown und RightMouseButtonDown nicht nach published? Grüße Faux |
Re: Onclick und rechte Maustaste!
Hallo,
Zitat:
Gruß xaromz |
Re: Onclick und rechte Maustaste!
Zitat:
Wie würde dann diese Prozedur aussehen? |
Re: Onclick und rechte Maustaste!
Delphi-Quellcode:
published
property OnLeftMouseButtonClicked: TNotifyEvent read FOnLeftMouseButtonClicked write FOnLeftMouseButtonClicked; // Kann auch was anderes als TNotifyEvent sein ;) end; [...] procedure LeftMouseButtonDown(var Msg : TMouseInput); begin if Assigned(FOnLeftMouseButtonClicked) then FOnLeftMouseButtonClicked(Self); end; |
Re: Onclick und rechte Maustaste!
Hallo,
ich würde im protected Abschnitt die Methoden DoLeftMouseButtonDown und DoRightMouseButtonDown einführen. Das vereinfacht das Überschreiben der Events in Nachfahren erheblich.
Delphi-Quellcode:
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 FOnLMBClick; property OnRMBClick: TNotifyEvent read FOnRMBClicked write FOnRMBClick; 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. |
Re: Onclick und rechte Maustaste!
Hallo, nochmal zurück zum eigentlichen Problem.
Zitat:
Delphi-Quellcode:
Silvestergrüße vom marabu
procedure AddMenuItems(miTake, miGive: TMenuItem);
var i: integer; mi: TMenuItem; begin // get rid of existing items miTake.Clear; for i := 0 to Pred(miGive.Count) do begin // create new menuItem mi := TMenuItem.Create(miTake); // share action with popup menuItem mi.Action := miGive[i].Action; // associate new item with menu miTake.Add(mi); end; end; procedure TDemoForm.FormCreate(Sender: TObject); var mi: TMenuItem; begin // dynamic creation of menuItem mi := NewItem('&Test', TextToShortCut(''), false, true, nil, 0, ''); // make right most dropdownMenu MainMenu.Items.Add(mi); // populate dropdownMenu from popupMenu AddMenuItems(mi, PopupMenu.Items); end; |
Re: Onclick und rechte Maustaste!
@ Jens Schumann
Danke, das funzt soweit, allerdings habe ich die OnLMBClick und OnRMBClick nur auf dem Mainmenü und nicht auf den Items! Ich brauch das auch auf den Items??? Kannst mir da helfen! Achja, die Komponente funzt zwar jetzt, aber wenn ich die einträge dynamisch erstellen, bleibt das mainmenü leer! fehlt da vielleicht was bei constructor Create(AOwner: TComponent); override; @ marabu Sinnvoll ist das schon. Nehmen wir mal den Favoritenliste im Firefox oder IE, dort bekommt auf einem Order ein anderes popup als wie auf einem link. ist zwar sowas wie ne toolbar, aber will das für ein Mainmenü! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz