Autor Beitrag
Quivadis
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Fr 18.02.05 11:21 
Hallo,

ich benutze die Shape als Anfasser (sind di Punkte womit in vielen Programme die Objektgrenzen verschieben kann). Die shape werden dynamisch erzeugt.

ich habe ein array angelegt von Typ Tshape. das geht alles super. Kann sie verschieben usw.

Nun zu meinen Problem.

Wie erzeuge ich ein Menü, wenn ich auf shape mit der rechten Maustaste drücke bei dyn. erzeugten Shapes?

ausblenden Delphi-Quelltext
1:
Shapes[High(Shapes)].OnContextPopup:= myContextPopup;					


damit lege ich den mausevent für das popup an. Was muss ich jetzt weiter machen das ich zu einen PopupMenü komme?

Danke , schonmal im vorraus

Quivadis

_________________
Wissen ist macht, nichts wissen macht auch nichts. ODER: Wer nichts weis, kann nichts vergessen.
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Fr 18.02.05 14:19 
Weiss niemand eine Antwort? Ich benötige das dringend.

Falls ihr es nicht versteht was ich meine:

Ich erzeuge zur Laufzeit, also dynamisch mehrere shapes. Diese sind sind nur 5x5 pixel gross, und dienen als Bewegungspunkte/Anfasser. Die events/Ereignisse onclick und onmove funktionieren. Damit kann ich mein Shape anfassen und durch onmove auch verschieben. Nun möchte ich das mein beim klick mit der rechten Maustaste auf das Shape ein Menü am Mauszeiger angezeigt wird.

Hoffe das Problem ist nun etwas besser erklärt.

Ich finde leider keine Lösung die funktioniert.

Weiss jemand, wie man ein popupmenü in einem shape inerhalp der Form erstellt?

Quivadis

_________________
Wissen ist macht, nichts wissen macht auch nichts. ODER: Wer nichts weis, kann nichts vergessen.
Wizard of OS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win95, Win98, Win2000, WinNT, Win XP
D5
BeitragVerfasst: Mo 21.02.05 18:50 
Hallo QuoVadis,

am besten gehst Du wie folgt vor ...

Im Event OnContextPopup rufst Du die Methode Popup des Popup-Menüs auf, sie erwartet die Koordinaten an der das Menü dargestellt werden soll. Hier gibt es ein kleineres Problem, da die MousePos, die der Event liefert bezogen auf den Bildschirm-Ursprung sind, Die Position Deines Shapes aber relativ zum Ursprungspunkt des Forms ist (Top/Left)

Also mußt Du mittels "ClientToScreen" die Koordinaten umrechnen und die Left- und Top-Position Deines Shapes hinzu addieren ...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Shape1ContextPopup
(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
var
   ptMouse: TPoint; 
begin
   //Koordinaten relativ zum Form ermitteln
   ptMouse := ClientToScreen(MousePos);
   //Menü genau an der Position des Shapes darstellen
   inc(ptMouse.X,Shape1.Left);
   inc(ptMouse.Y,Shape1.Top);
   //Menü positionieren und aufklappen  
   PopupMenu1.Popup(ptMouse.X,ptMouse.Y);
   //Verhindert zusätzliche AutoPopup-Behandlung
   Handled := true;
end;


Hoffe, ich konnte Dir helfen und Dein Problem ist hiermit gelöst... :wink:

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.
Quivadis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314

UBUNTU 9.04
D2005 PERS, JAVA, D7 Pers.
BeitragVerfasst: Di 22.02.05 09:28 
Hallo Wizard of OS,

Danke für Deine Antwort. Habe es ausprobiert.

Es scheint zu funktionieren.

Quivadis

_________________
Wissen ist macht, nichts wissen macht auch nichts. ODER: Wer nichts weis, kann nichts vergessen.