Moin zusammen!
Ich möchte gern ein selber gebautes PopupMenu bauen, was die Form eines Ringmenüs hat. Dazu habe ich eine Komponente gebaut, die von TCustomControl abgeleitet ist, da die mir ein Canvas-Element und die Möglichkeit eines Containers bietet.
Der Code sieht (aszugsweise) so aus:
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:
| TRingemenueMagQuad = class(TCustomControl) private FRadius: Integer; FVelocity: Integer; procedure SetRadius(Value: Integer); procedure SetVelocity(Value: Integer); protected public procedure ShowMenue; published property Radius: Integer read FRadius write SetRadius default 80; property Velocity: Integer read FVelocity write SetVelocity default 20; end;
implementation
procedure TRingemenueMagQuad.SetRadius(Value: Integer); begin if FRadius <> Value then begin if Value <= 0 then Value := 1; FRadius := Value; end; end;
procedure TRingemenueMagQuad.SetVelocity(Value: Integer); begin if FVelocity <> Value then begin if Value <= 0 then Value := 1; FVelocity := Value; end; end;
procedure TRingemenueMagQuad.ShowMenue; var MCoord: TPoint; i: Integer; begin MCoord := ScreenToClient(Mouse.CursorPos);
i := 0; Canvas.Pen.Color := clYellow; Canvas.Brush.Color := clYellow; Canvas.Brush.Style := bsSolid; repeat inc(i, 10); canvas.Ellipse(MCoord.X - i div 2, MCoord.Y - i div 2, MCoord.X + i div 2, MCoord.Y + i div 2); invalidate; sleep(Velocity); until i >= Radius; end; |
Der Aufruf erfolgt im Formular, indem die Komponente beim Start erzeugt wird und mit Komponente.ShowMenu angezeigt wird.
Und da kommen zwei Probleme:
1. wird gar nichts angezeigt. Nichts, nada, null. Warum? Was muss ich beachten? Und ja, Owner und Parent ist das MainForm.
2. Ich würde gerne die Funktionalität von PopupMenu nutzen können. Also bei fast jeder grafischen Komponente kann man ja ein PopupMenu auswählen, was dann automatisch angezeigt wird, wenn ein rechtsklick ausgeführt wird auf die Komponente. Wie kann ich diese Funktionalität auch in meiner Komponente nutzen? Also eben beim Aufruf das "Aufbauen" des Menüs und nach Auswahl bzw. einem Klick auf eine freie Fläche das "Zusammenfallen" des Menüs automatisch aufrufen lassen, wenn ihr versteht, was ich meine?
Wäre super, wenn ihr mir ein paar Tipps in die richtige Richtung geben könntet.
Vielen Dank!