AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Drag&Drop mit TMenuItem

Ein Thema von hoika · begonnen am 30. Jun 2008 · letzter Beitrag vom 12. Sep 2008
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#1

Drag&Drop mit TMenuItem

  Alt 30. Jun 2008, 18:59
Hallo,

ich möchte einige meiner TMenuItems per Drag&Drop
eine ListView packen (als Kopie),
um mir so eine Art Favouriten-Leiste zu bauen.

Hat jemand sowas schonmal gemacht ?

Das TMenuItem scheint ja keine Drag-Properties zu haben (DragMode etc.)


Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Drag&Drop mit TMenuItem

  Alt 30. Jun 2008, 19:41
dadurch, dass du weder die Drag&Drop-Events noch MouseDown/Up/Move hast, wird das nicht so möglich sein. ich denke du müsstest auf ein alternatives Menü umsteigen (bzw. es schreiben) oder du lässt bei der Definition das Menü einfach außen vor.
ich weis zwar nicht, ob letzteres bei dir möglich ist aber mal so als Anhaltspunkt:
die Menu-Items enumerieren und in eine Listbox eintragen, hier kannst du die items löschen/verschieben etc. als kleine Hilfe kannst du dir den Menu-Editor von DFMEdit mal anschauen (MenuEdit_u.pas), der kann die grobe Menüdarstellung und Drag&Drop müsstes halt nur die lade-routine anpassen, da dfmedit die items aus dem DFM-Quelltext parst (bzw. aus dem Treeview).

HTH Frank
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Drag&Drop mit TMenuItem

  Alt 30. Jun 2008, 20:04
Hallo,

ja so in etwa sieht mein Alternativ-Plan aus.
Die Menus aus dem aktuellen Main-Menu holen,
schreibe ich mir selber, nix da mit Copy&Paste

Dummerweise weiss ich noch nicht,
wie ich diese Konfiguration speichern kann ;(

Name, neee
Pointer hä ?

Mir bleibt jetzt wohl nur,
jedes TMenuItem mit einem distinct Tag zu versehen
und diese Tags zu speichern.

Viel Klickerei (aber nur einmal)


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Drag&Drop mit TMenuItem

  Alt 30. Jun 2008, 20:24
mussts ja nicht kopieren, aber zum anschauen , gut, die Property-Liste ist nicht sehr gut gelungen mit der stringlist, aber ich wollte mi bisschen Arbeit ersparen

vielleicht findest ja was brauchbares drin, stehe ja auch für fragen zur Verfügung...

Gruß Frank
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#5

Re: Drag&Drop mit TMenuItem

  Alt 30. Jun 2008, 20:26
Zitat von _frank_:
dadurch, dass du weder die Drag&Drop-Events noch MouseDown/Up/Move hast, wird das nicht so möglich sein.
Hi

Den onDrag Event könnte man allerdings mit Hilfe der Nachricht WM_MENUDRAG abfangen.
Delphi-Quellcode:
  private
    procedure WMMENUDRAG(var Msg: TMessage);message WM_MENUDRAG;
 
...

procedure TForm1.WMMENUDRAG(var Msg: TMessage);
begin
  Caption:= MainMenu1.FindItem(Msg.LParam,fkHandle).Items[Msg.WParam].Caption;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  MenuInfo: TMenuInfo;
begin
  MenuInfo.cbSize:= SizeOf(TMenuInfo);
  MenuInfo.fMask:= MIM_STYLE;
  MenuInfo.dwStyle:= MNS_DRAGDROP;
  SetMenuInfo(MainMenu1.Handle, MenuInfo);
end;
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Drag&Drop mit TMenuItem

  Alt 10. Sep 2008, 12:47
Hallo,
vielleicht ein bissl spät geantwortet von mir
Es ist mit Bordmitteln möglich. Leider unterstützt die VCL keine Drag'n'Drop Menüs. Aber mit ein bissl Bastelei klappt es ganz gut.
Der Code ist recht umfangreich. Wer ihn will, soll mir bitte einfach ne PM schicken. Dann schreib ich ein kleines Demoprogramm.
Schritt für Schritt:
  • dem Hauptmenü den Style MNS_DRAGDROP setzen
  • im Formular das Ereignis WM_MENUDRAG abfangen
  • darin ein IDataObject (Unit ActiveX) anlegen, welches deinen Meüeintrag repräsentiert
  • mit DoDragDrop oder (vielleicht besser noch) SHDoDragDrop eine Drag'n'Drop Schleife starten
beim ListView musst du dich dann auf ein OLE Drop einrichten.

Hoffentlich nicht zu kompliziert.

gruß
Marco
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Drag&Drop mit TMenuItem

  Alt 12. Sep 2008, 07:47
Für alle, die es interessiert, hier ein bissl Code

Das Demoprogramm zeigt, wie man TMenuItems in einen VirtualStringTree befördert und (wenn nötig) auf dem Desktop ablegt.
Ich hab den Code aus einem unserer laufenden Projekte herausgelöst. Es kann also sein, daß es an der einen oder anderen Stelle ein wenig hängt. Aber wie gesagt... das Programm dient nur der Demonstration der Technologie!
Die Units sind von mir (wenn überhaupt einmal) auf englisch kommentiert. Und bitte nicht so viele Fragen... ich hab ab morgen Urlaub und bin dann ne ganze Woche Offline (*träum*)

Gruß Marco

P.S. Um ein "DragImage" zu sehen muss unter Windows die Funktion "Fensterinhalt beim ziehen anzeigen" aktiviert sein
P.P.S. Um den Hinweistext neben dem DragImage zu sehen, braucht ihr Vista.
Angehängte Dateien
Dateityp: zip draganddropmenu_200.zip (388,2 KB, 60x aufgerufen)
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:49 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