Forstå dra og slipp-operasjoner i Delphi

Å "dra og slippe" er å holde nede datamus når musen beveges, og slipp deretter knappen for å slippe objektet. Delphi gjør det enkelt å programmere dra og slippe inn i applikasjoner.

Du kan virkelig dra og slippe fra / til hvor du vil, for eksempel fra en form til en annen, eller fra Windows Utforsker til applikasjonen din.

Eksempel på dra og slipp

Start et nytt prosjekt og sett en bildekontroll på et skjema. Bruk objektinspektør til å laste et bilde (Bildeegenskaper) og angi deretter DragMode eiendom til dmManual. Vi lager et program som gjør det mulig å flytte en TImage-kontrollkjøringstid ved å bruke dra og slipp teknikk.

DragMode

Komponenter tillater to typer dra: automatisk og manuell. Delphi bruker egenskapen DragMode for å kontrollere når brukeren er i stand til å dra kontrollen. Standardverdien for denne egenskapen er dmManual, noe som betyr at du drar komponenter rundt søknad er ikke tillatt, unntatt under spesielle omstendigheter, som vi må skrive passende kode. Uavhengig av innstillingen for DragMode-egenskapen, vil komponenten bare bevege seg hvis riktig kode er skrevet for å plassere den på nytt.

instagram viewer

OnDragDrop

Hendelsen som gjenkjenner dra og slippe kalles OnDragDrop-hendelsen. Vi bruker den til å spesifisere hva vi vil skje når brukeren slipper et objekt. Derfor, hvis vi ønsker å flytte en komponent (bilde) til et nytt sted på et skjema, må vi skrive kode for skjemaets OnDragDrop hendelsesbehandler.

Kildeparameteren til OnDragDrop-hendelsen er objektet som slippes. Type kildeparameter er TObject. For å få tilgang til dens egenskaper, må vi kaste den til riktig komponenttype, som i dette eksemplet er TImage.

Aksepterer

Vi må bruke skjemaets OnDragOver-hendelse for å signalisere at skjemaet kan godta TImage-kontrollen vi vil slippe på det. Selv om godta parameter standard til True, hvis en OnDragOver-hendelseshåndterer ikke leveres, avviser kontrollen det slepte objektet (som om Accept-parameteren ble endret til usann).

Kjør prosjektet ditt, og prøv å dra og slippe bildet. Legg merke til at bildet forblir synlig på det opprinnelige stedet mens du drar musepekeren beveger seg. Vi kan ikke bruke OnDragDrop-prosedyren for å gjøre komponenten usynlig mens draingen foregår fordi denne prosedyren blir kalt først etter at brukeren har mistet objektet (om i det hele tatt).

DragCursor

Hvis du vil endre markørbildet som vises når kontrollen dras, bruker du DragCursor-egenskapen. De mulige verdiene for DragCursor-egenskapen er de samme som for Markør-egenskapen. Du kan bruke animerte markører eller hva du vil, for eksempel en BMP-bildefil eller en CUR-markørfil.

BeginDrag

Hvis DragMode er dmAutomatic, begynner draging automatisk når vi trykker på en museknapp med markøren på kontrollen. Hvis du har forlatt verdien av TImages DragMode-egenskap som standard dmManual, må du bruke BeginDrag / EndDrag-metodene for å tillate å dra komponenten. En mer vanlig måte å dra og slippe på er å sette DragMode til dmManual og starte drafaget ved å håndtere nedadrettede hendelser.

Nå bruker vi Ctrl + mousedown tastaturkombinasjon for å la dra finne sted. Sett TImageDragMode tilbake til dmManual og skriv MouseDown-hendelseshåndtereren slik:

BeginDrag tar en boolsk parameter. Hvis vi passerer Sann (som i denne koden), begynner drattingen umiddelbart; hvis det er usant, starter det ikke før vi beveger musen et lite stykke. Husk at det krever Ctrl-tasten.