AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Onclick und rechte Maustaste!

Ein Thema von TriphunEM · begonnen am 29. Dez 2005 · letzter Beitrag vom 4. Feb 2006
Antwort Antwort
Seite 1 von 3  1 23      
TriphunEM

Registriert seit: 8. Jan 2004
147 Beiträge
 
#1

Onclick und rechte Maustaste!

  Alt 29. Dez 2005, 19:44
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
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Onclick und rechte Maustaste!

  Alt 29. Dez 2005, 22:16
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:
type
  TExtendedMainMenue = class(TMainMenue)
    private
      procedure LeftMouseButtonDown(var Msg : TMouseInput); message WM_LBUTTONDOWN;
      procedure RightMouseButtonDown(var Msg : TMouseInput); message WM_RBUTTONDOWN;
  end;
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.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
TriphunEM

Registriert seit: 8. Jan 2004
147 Beiträge
 
#3

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 08:51
danke, aber da ich mit komponenten-programmierung net so gut auskenne bin ihc nur soweit gekommen

Delphi-Quellcode:
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;
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!
kannst mir da noch weiter helfen???
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 10:05
Hallo!

Also ich bin mir nicht sicher, aber gehören die zwei Prozeduren LeftMouseButtonDown und RightMouseButtonDown nicht nach published?

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 10:07
Hallo,
Zitat von faux:
Also ich bin mir nicht sicher, aber gehören die zwei Prozeduren LeftMouseButtonDown und RightMouseButtonDown nicht nach published?
Nein, die fangen ja nur Windows-Botschaften ab und sind keine Ereignisse. In diesen Prozeduren sollten aber dann Ereignisprozeduren aufgerufen werden.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 10:09
Zitat von xaromz:
Nein, die fangen ja nur Windows-Botschaften ab und sind keine Ereignisse. In diesen Prozeduren sollten aber dann Ereignisprozeduren aufgerufen werden.
Ah! Gut zu wissen.

Wie würde dann diese Prozedur aussehen?
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 10:58
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;
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 11:13
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.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 11:31
Hallo, nochmal zurück zum eigentlichen Problem.

Zitat von TriphunEM:
ich will einem MainMenu-Eintrag der zur Laufzeit erstellt wurde ein bestimmtes Popup hinzufügen!
Du möchtest die Items aus einem PopupMenu als dynamisches DropDown-Menü im MainMenu wiederverwenden? Das ist selten sinnvoll, weil das PopupMenu ein Kontextmenü ist und seine Aktionen nicht über das Hauptmenü ausgeführt werden sollen. Es ist ein Verstoß gegen die guten Sitten, aber technisch sehr einfach zu realisieren, wenn du deinen Aktionscode in einer ActionList verwaltest und den Items in deinem PopupMenu zugewiesen hast:

Delphi-Quellcode:
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;
Silvestergrüße vom marabu
  Mit Zitat antworten Zitat
TriphunEM

Registriert seit: 8. Jan 2004
147 Beiträge
 
#10

Re: Onclick und rechte Maustaste!

  Alt 31. Dez 2005, 13:24
@ 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ü!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz