"Slepen en neerzetten" is de computermuis knop terwijl de muis wordt verplaatst en laat de knop los om het object neer te zetten. Delphi maakt het eenvoudig om slepen en neerzetten in applicaties te programmeren.
Je kunt echt slepen en neerzetten van / naar waar je maar wilt, zoals van het ene formulier naar het andere, of van Windows Verkenner naar je applicatie.
Voorbeeld van slepen en neerzetten
Start een nieuw project en zet één beeldbesturing op een formulier. Gebruik Object Inspector om een afbeelding (eigenschap Picture) te laden en stel vervolgens de in DragMode eigendom aan dmManual. We zullen een programma maken waarmee het mogelijk is om een TImage-runtime te verplaatsen met de slepen en neerzetten techniek.
DragMode
Componenten maken twee soorten slepen mogelijk: automatisch en handmatig. Delphi gebruikt de eigenschap DragMode om te bepalen wanneer de gebruiker het besturingselement kan verslepen. De standaardwaarde van deze eigenschap is dmManual, wat betekent dat componenten rond de aanmelding is niet toegestaan, behalve onder bijzondere omstandigheden, waarvoor wij de juiste code. Ongeacht de instelling voor de eigenschap DragMode, wordt het onderdeel alleen verplaatst als de juiste code is geschreven om het te verplaatsen.
OnDragDrop
De gebeurtenis die slepen en neerzetten herkent, wordt de OnDragDrop-gebeurtenis genoemd. We gebruiken het om te specificeren wat we willen dat er gebeurt wanneer de gebruiker een object laat vallen. Als we daarom een component (afbeelding) naar een nieuwe locatie op een formulier willen verplaatsen, moeten we code schrijven voor de OnDragDrop-gebeurtenishandler van het formulier.
De bronparameter van de OnDragDrop-gebeurtenis is het object dat wordt verwijderd. Het type van de bronparameter is TObject. Om toegang te krijgen tot de eigenschappen ervan, moeten we het naar het juiste componenttype casten, wat in dit voorbeeld TImage is.
Aanvaarden
We moeten de OnDragOver-gebeurtenis van het formulier gebruiken om aan te geven dat het formulier het TImage-besturingselement kan accepteren dat we erop willen plaatsen. Hoewel de Accept parameter is standaard True, als er geen OnDragOver-gebeurtenishandler is opgegeven, weigert het besturingselement het gesleepte object (alsof de parameter Accept is gewijzigd in False).
Voer uw project uit en probeer uw afbeelding te slepen en neer te zetten. Merk op dat de afbeelding tijdens het slepen zichtbaar blijft op de oorspronkelijke locatie muisaanwijzer beweegt. We kunnen de OnDragDrop-procedure niet gebruiken om het onderdeel onzichtbaar te maken terwijl het slepen plaatsvindt, omdat deze procedure alleen wordt aangeroepen nadat de gebruiker het object heeft neergezet (of helemaal niet).
DragCursor
Gebruik de eigenschap DragCursor als u de cursorafbeelding wilt wijzigen die wordt weergegeven wanneer het besturingselement wordt gesleept. De mogelijke waarden voor de eigenschap DragCursor zijn dezelfde als die voor de eigenschap Cursor. U kunt geanimeerde cursors gebruiken of wat u maar wilt, zoals een BMP-afbeeldingsbestand of een CUR-cursorbestand.
BeginDrag
Als DragMode automatisch is, begint het slepen automatisch wanneer we op een muisknop drukken met de cursor op het besturingselement. Als u de waarde van de eigenschap DragMode van TImage op de standaardwaarde dmManual hebt gelaten, moet u de BeginDrag / EndDrag-methoden gebruiken om het slepen van de component toe te staan. Een meer gebruikelijke manier om te slepen en neer te zetten, is door DragMode in te stellen op dmManual en het slepen te starten door muis-omlaaggebeurtenissen af te handelen.
Nu gebruiken we de Ctrl + MouseDown toetsenbordcombinatie om slepen mogelijk te maken. Stel TImage's DragMode terug naar dmManual en schrijf de MouseDown event handler als volgt:
BeginDrag heeft een Booleaanse parameter. Als we True passeren (zoals in deze code), begint het slepen onmiddellijk; als dit niet waar is, begint het pas als we de muis een klein stukje verplaatsen. Onthoud dat hiervoor de Ctrl-toets nodig is.