Förstå dra- och släppoperationer

Att "dra och släppa" är att hålla ner datormusknappen 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-styrningstid med dra-och-släpp-tekniken.

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 det inte är tillåtet att dra komponenter runt applikationen, förutom under speciella omständigheter, för vilka vi måste skriva rätt 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 parametern Accepterar som standard är sanningen, om en OnDragOver-händelseshanterare inte tillhandahålls, avvisar kontrollen det dragna objektet (som om Acceptera parametern ändrades 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 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 efter att 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 för 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. Ställ TImages DragMode tillbaka till dmManual och skriv MouseDown-händelseshanteraren 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.