Att "dra och släpp" är att hålla ned data mus när musen flyttas och släpp sedan knappen för att släppa objektet. Delphi gör det enkelt att programmera dra och släppa till applikationer.
Du kan verkligen dra och släppa från / till var du än vill, från en form till en annan, eller från Windows Explorer till din applikation.
Exempel på dra och släpp
Starta ett nytt projekt och lägg en bildkontroll på ett formulär. Använd Objektinspektör för att ladda en bild (Egenskapen Bild) och ställ sedan in DragMode egendom till dmManual. Vi skapar ett program som gör det möjligt att flytta en TImage-kontrolltid med dra och släpp teknik.
DragMode
Komponenter tillåter två typer av dra: automatisk och manuell. Delphi använder egenskapen DragMode för att kontrollera när användaren kan dra kontrollen. Standardvärdet för den här egenskapen är dmManual, vilket innebär att man drar komponenter runt ansökan är inte tillåten, utom under speciella omständigheter, för vilka vi måste skriva lämplig kod. Oavsett inställningen för DragMode-egenskapen kommer komponenten att flyttas endast om rätt kod är skriven för att flytta den igen.
OnDragDrop
Händelsen som känner igen dra och släppa kallas OnDragDrop-händelsen. Vi använder det för att specificera vad vi vill hända när användaren tappar ett objekt. Därför, om vi vill flytta en komponent (bild) till en ny plats på ett formulär, måste vi skriva kod för formens OnDragDrop-händelseshanterare.
Källparametern för händelsen OnDragDrop är objektet som tappas. Källparameterns typ är TObject. För att få tillgång till dess egenskaper måste vi kasta den till rätt komponenttyp, som i detta exempel är TImage.
Acceptera
Vi måste använda formulärets OnDragOver-händelse för att signalera att formuläret kan acceptera den TImage-kontroll som vi vill släppa på den. Även om acceptera parameter som standard är sant, om en OnDragOver-händelseshanterare inte tillhandahålls, avvisar kontrollen det dras objektet (som om Acceptera parametern har ändrats till falskt).
Kör ditt projekt och försök dra och släppa din bild. Lägg märke till att bilden förblir synlig på sin ursprungliga plats medan dra muspekaren rör sig. Vi kan inte använda OnDragDrop-proceduren för att göra komponenten osynlig medan dragningen sker eftersom den här proceduren anropas först när användaren har tappat objektet (om inte alls).
DragCursor
Om du vill ändra markörbilden som presenteras när kontrollen dras, använd egenskapen DragCursor. De möjliga värdena för egenskapen DragCursor är desamma som för marköregenskapen. Du kan använda animerade markörer eller vad du vill, till exempel en BMP-bildfil eller en CUR-markörfil.
BeginDrag
Om DragMode är dmAutomatic börjar dra automatiskt när vi trycker på en musknapp med markören på kontrollen. Om du har lämnat värdet på TImages egenskap DragMode som standard som dmManual, måste du använda BeginDrag / EndDrag-metoder för att tillåta dra av komponenten. Ett vanligare sätt att dra och släppa är att ställa DragMode till dmManual och starta dra genom att hantera mus-ner-händelser.
Nu ska vi använda Ctrl + mousedown tangentbordskombination för att dra kan ske. Uppsättning TImageDragMode tillbaka till dmManual och skriv händelsehanteraren av MouseDown så här:
BeginDrag tar en Boolean-parameter. Om vi passerar sant (som i den här koden) börjar dra dra omedelbart; om det är falskt startar det inte förrän vi flyttar musen ett kort avstånd. Kom ihåg att det kräver Ctrl-tangenten.