Antwort von
nach 4 Tagen
hilfreich
Re^7: Delphi: DragManual
Wenn die nicht einfach die Onmouseup Prozeduren abschalten
würden wäre das überhaupt kein Problem!
Ja ja, wenn das Wörtchen "wenn" nicht wär... ;-)
Es ist, wie Du sagst: Nach dem Starten einer DnD-Operation (egal, ob automatisch, also mit "DragMode=dmAutomatic", oder von Hand per "BeginDrag"-Aufruf ausgelöst) werden von der VCL keinerlei Mausereignisse mehr an die Komponenten gesendet (was wohl irgendwo auch Sinn macht, oder?). Die entsprechenden an die Applikation gesendeten Windows-Botschaften lösen nur die DnD-Ereignisse, z. B. OnEndDrag aus. Dabei wird nun mal nur die linke Maustaste berücksichtigt (Rechtes-Maustasten-DnD wäre auch nicht mit den Windows-Styleguides zu vereinbaren).
Muss ich jetzt eine eigene Api-Abfrage machen oder was?
Fast. Du müßtest die Windows-Botschaft für das Loslassen der rechten Maustaste (WM_RBUTTONUP) an geeigneter Stelle (Application.OnMessage; eine neue WndProc-Methode tut's hier nicht, da nicht mal das Formular vom Loslassen der Maustaste benachrichtigt wird) abfangen.
Aber wozu der Aufwand, wo DnD mit der linken Maustaste doch supereinfach ist und außerdem völlig ausreicht (das Problem, das sich wirklich nur mit Rechtem-Maustasten-DnD lösen läßt, möchte ich mal gezeigt bekommen)? Ich würde jedem ernsthaften Entwickler dringend davon abraten, derartige "Späßchen" in seine Software einzubauen. Der Anwender möchte nicht vorgeführt bekommen, was der Programmierer alles drauf hat. Er will ein Produkt mit möglichst vielen möglichst fehlerfrei arbeitenden Funktionen. Ergo tut man gut daran, den Anwender nicht zu dem Schluß kommen zu lassen, daß der Programmierer seine Energie in irgendwelche überflüssige Gags gesteckt hat, statt in das, was wirklich zählt.
Ich hoffe also, daß Dein Interesse am Rechten-Maustasten-DnD rein akademischer Natur ist ;-).
Mit freundlichem Gruß
Martin