[delphi]Drag/drop naar een container

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:47
Heb zojuist dragdrop geïmplementeerd in mijn 0.0.1-pre-alpha versie. De objecten kunnen netjes gedragged worden en gedropt worden op een TGroupbox. En de gegevens van het object worden netjes verwerkt in de TEdits die in de groepbox staan.

Echter het droppen werkt alleen maar op de groupbox, en niet op de componenten die er op staan.

Is het mogelijk om de child-componenten transparant te kunnen laten zijn voor een drop? Of moet ik alle componenten handmatig danwel programmatisch droptargets maken?

Googlen levert wel wat voorbeelden op van drag en drop, maar niemand schijnt mijn probleem te hebben.

Acties:
  • 0 Henk 'm!

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
kun je de ondragdrop event niet koppelen?

Opensource delphi componenten (http://www.delphi-jedi.org)


Acties:
  • 0 Henk 'm!

Verwijderd

Het moet wel kunnen kan me een component herinneren (alleen de naam niet ;)) die dit mogelijk maakte.
En anders is het iets wat jezelf kan regelen dmv de controls af te lopen in je form (of ander parent control)

misschien deze?:
http://melander.dk/delphi/dragdrop/


edit:

ha, vind dit topic al via google 8)7


edit2:
Deze bedoelde ik: http://www.delphidabbler.com/software?id=dropfiles
(wel verouderd)

[ Voor 22% gewijzigd door Verwijderd op 22-12-2009 23:06 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Mr.Nobody schreef op dinsdag 22 december 2009 @ 22:41:
kun je de ondragdrop event niet koppelen?
Met ^. Volgens mij moet je gewoon de OnDragDrop (of hoe het event ook mag heten) van de componenten een handler geven die het event van de GroupBox aanroept met de argumenten die het component meekreeg. Maak één generieke eventhandler die je koppelt aan alle componenten die de drag/drop moeten ondersteunen en de groupbox, scheelt een boel (dubbel) werk.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:47
Mr.Nobody schreef op dinsdag 22 december 2009 @ 22:41:
kun je de ondragdrop event niet koppelen?
Ja, dat is inderdaad de programmatische oplossing. Ik hoopte op een optie om componenten 'onzichtbaar' te maken. Het nadeel van de programmatische oplossing is dat als er gedropt wordt op de TEDit, ik het event eerst moet doorgeven aan de TGoupbox voor het verwerken ervan. De TEdit kan er namelijk niets mee.
Verwijderd schreef op dinsdag 22 december 2009 @ 22:56:
Het moet wel kunnen kan me een component herinneren (alleen de naam niet ;)) die dit mogelijk maakte.
En anders is het iets wat jezelf kan regelen dmv de controls af te lopen in je form (of ander parent control)

misschien deze?:
http://melander.dk/delphi/dragdrop/

edit:
ha, vind dit topic al via google 8)7


edit2:
Deze bedoelde ik: http://www.delphidabbler.com/software?id=dropfiles
(wel verouderd)
Beide pagina's had ik al gevonden. Maar bij de eerste kan ik niets vinden over containers (zegt nog niets) en de 2e pagina gaat alleen over bestanden.
Reptile209 schreef op dinsdag 22 december 2009 @ 23:12:
[...]

Met ^. Volgens mij moet je gewoon de OnDragDrop (of hoe het event ook mag heten) van de componenten een handler geven die het event van de GroupBox aanroept met de argumenten die het component meekreeg. Maak één generieke eventhandler die je koppelt aan alle componenten die de drag/drop moeten ondersteunen en de groupbox, scheelt een boel (dubbel) werk.
Hier zat ik aan te denken, alhoewel ik eigenlijk neigde naar twee handlers. Eentje voor de container, en eentje voor de genestte componenten. Dat leek me duidelijker

Acties:
  • 0 Henk 'm!

Verwijderd

In de source van de tweede oplossing kan je wel zien hoe de auteur dat daar heeft opgelost.

Twee handlers heb je toch niet nodig, je krijgt toch een Sender mee in je events, die kan je dan gewoon weer mee naar boven sturen.

[ Voor 42% gewijzigd door Verwijderd op 22-12-2009 23:24 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

jvdmeer schreef op dinsdag 22 december 2009 @ 23:20:
[...]
Hier zat ik aan te denken, alhoewel ik eigenlijk neigde naar twee handlers. Eentje voor de container, en eentje voor de genestte componenten. Dat leek me duidelijker
Is ook een punt. Aan de andere kant doen de componenten er ook niks bijzonders mee, dus kan het ook logisch zijn om alles juist naar één handler te laten wijzen. Als je later naar je code van de edit gaat kijken, zie je een handler die doorverwijst naar een andere handler, is weer een (kleine) extra moeite om de flow te volgen.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
jvdmeer schreef op dinsdag 22 december 2009 @ 23:20:
[...]

Ja, dat is inderdaad de programmatische oplossing. Ik hoopte op een optie om componenten 'onzichtbaar' te maken. Het nadeel van de programmatische oplossing is dat als er gedropt wordt op de TEDit, ik het event eerst moet doorgeven aan de TGoupbox voor het verwerken ervan. De TEdit kan er namelijk niets mee.
[...]
heeft een tedit een dragdrop handler? zo ja dan hoeft tedit1.ondragdrop natuurlijk alleen maar te verwijzen naar tgroupbox1.ondragdrop, daar hoef je geen regel code voor te schrijven, alleen ff klikken.

maar misschien volg ik je niet goed :) , hoe wilde jij het den?

[ Voor 0% gewijzigd door Mr.Nobody op 22-12-2009 23:33 . Reden: 2 typo's ]

Opensource delphi componenten (http://www.delphi-jedi.org)


Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:47
Mr.Nobody schreef op dinsdag 22 december 2009 @ 23:31:
[...]


heeft een tedit een dragdrop handler? zo ja dan hoeft tedit1.ondragdrop natuurlijk alleen maar te verwijzen naar tgroupbox1.ondragdrop, daar hoef je geen regel code voor te schrijven, alleen ff klikken.

maar misschien volg ik je niet goed :) , hoe wilde jij het den?
Ja, de TEdit heeft ook een dragdrop-handler. Maar de TEdit kan niets met het gedropte object. De bedoeling is dat je een eerder ingevuld formulier met klantgegevens sleept op een nieuw formulier en dat een deel van de de velden alvast juist wordt ingevuld.

Dit wordt nu bewerkstelligd door het gedropte object via een loop aan de TEdits te geven die ieder hun eigen gegevens eruit halen. Dus bij het droppen op een TEdit moet het object eigenlijk aan de groupbox worden gegeven zodat deze alle componenten langs kan gaan om hem aan te bieden.

Voordeel van twee aparte handlers is dat bij het doorgeven naar de tweede het target-object kan worden aangepast naar het juiste target (de groupbox in dit geval).

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-09 16:19

alienfruit

the alien you never expected

Gewoon, simpel. Tijdens het aanmaken van de formulier of anders even Components doorlopen en de OnDragDrop e.d. instellen voor de tekstvelden en vervolgens een functie maken OnFormDragDrop koppelen en dan:

procedure OnFormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is FormulierData then
begin
{ afhandelen van de formulier data }
end
end

Acties:
  • 0 Henk 'm!

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
idd, dat bedoelde ik al met min 1e post.

TS: als je wil kan ik wel een voorbeeld mailen

Opensource delphi componenten (http://www.delphi-jedi.org)


Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:47
Mr.Nobody schreef op woensdag 23 december 2009 @ 19:13:
idd, dat bedoelde ik al met min 1e post.

TS: als je wil kan ik wel een voorbeeld mailen
Bedankt voor het aanbod. Zoals ik in mijn startpost vermeldde, was alles al werkend alleen nog niet op de subcomponenten. Ik wilde een makkelijke manier door de TComponenten te laten "verdwijnen".
Het doorlinken vanaf de subcomponenten zal wel lukken.

Nu ik dit zo even zit te denken, kan ik natuurlijk ook de subcomponent echt laten "verdwijnen" en daar tijdelijk tijdens ondragstart een vers gegenereerd png'tje tonen. (nee, laat maar, ik denk dat het doorlinken eenvoudiger is)
Pagina: 1