Avatar billede mickni33 Nybegynder
09. oktober 2002 - 09:12 Der er 9 kommentarer og
1 løsning

Drag and drop

Jeg har et icon i en Panelnr1.
Nu vil jeg gerne flytte det over i en anden Panelnr2.
Det vil det også godt (med drag/dock) men hvis jeg så klikker en gang på iconet så åbner det ligesom i et lille bitte vindue for sig selv. Altså det sidder ikke fast på panelet hvis man kan sige det sådan.

Er der nogen der kan forstå hvad jeg mener ???
Avatar billede soepro Nybegynder
09. oktober 2002 - 09:26 #1
Vi skal vist have lidt mere information: Er det MVC eller BCB ? Hvordan ser dine StartDrag, DropOver og EndDrop handlers ud ?
Avatar billede mickni33 Nybegynder
09. oktober 2002 - 09:39 #2
Nåå ja selfølgelig. Builder

Det eneste kode er, at jeg har lavet en Accept=true ved en DropOver event på PanelNr2

Ellers har jeg kun indstillet den i Object Inspectoren

Icon er sat til :
DragKind = dkDock
DragMode = Automatic

Modtager Panel har en Event:
OnDockDrop

Det virker også godt nok
Men hvis jeg nu klikker en gang på iconet så kommer der en lille blå bar frem øverst på iconet ligesom den man kender fra "minimer maximer eller luk"

Når jeg så klikker på iconet igen bliver alt normalt
Avatar billede mickni33 Nybegynder
09. oktober 2002 - 10:13 #3
Mit icon som jeg flytter er en Image component
Avatar billede soepro Nybegynder
09. oktober 2002 - 12:52 #4
mickni33 >> Jeg prøver lige at brygge et eksempel. Jeg vil tro at problement er at TImage ikke har nogen Parent mere efter den er blevet droppet.
Avatar billede soepro Nybegynder
09. oktober 2002 - 13:09 #5
Så har jeg også fået lavet eksemplet - og ja, det er korrekt at et enkelt-klik som default betyder at komponenten bliver et selvstændigt vindue. Det er standard funktionalitet, og skyldes at du jo kan droppe komponenten uden for "DockSites" også - sådan som du kender det fra f.eks. PaintShop PRO.

Hvad er det du ønsker ? Skal man kun kunne drag-og dock komponenten mellem to DockSites ? (Jeg prøver lige at finde en løsning på dette.)
Avatar billede mickni33 Nybegynder
09. oktober 2002 - 13:35 #6
Tror det er meget smart at den kan blive et selvstændigt vindue hvis man dropper den uden for panelet.Hmmmmm.

Men det skal ikke blive et vindue hvis den er over et panel.
Har gjort sådan, når den droppes på en panel så skifter den til Image4->DragMode=dmManual;

Så sidder den fast på panelet, men nu kan den så ikke flyttes mere....

Aaaahhh
Man kunne måske gøre sådan at hvis man klikker på Iconet igen Så lader jeg den skifter til Image4->DragMode=dmAutomatic

Prøver lige lidt igen
Avatar billede soepro Nybegynder
09. oktober 2002 - 13:36 #7
Du skal skrive en OnUndock event-handler til dine paneler, hvor du simpelthen afviser at un-docke til andet end et panel:

void __fastcall TForm1::Panel1UnDock(TObject *Sender, TControl *Client,
      TWinControl *NewTarget, bool &Allow)
{
  if (!NewTarget->ClassNameIs("TPanel"))
    Allow = false;       
}
Avatar billede soepro Nybegynder
09. oktober 2002 - 13:37 #8
Husk at tilknytte event-handleren til ALLE de paneler som kontrollen kan risikere/tillades at dock på.
Avatar billede mickni33 Nybegynder
09. oktober 2002 - 13:40 #9
Åhhh smart
Avatar billede soepro Nybegynder
09. oktober 2002 - 13:43 #10
NewTarget er tilsyneladende ikke altid sat, så event handleren skal rettes til:

void __fastcall TForm1::PanelUnDock(TObject *Sender, TControl *Client,
      TWinControl *NewTarget, bool &Allow)
{
  if (NewTarget == NULL
  || !NewTarget->ClassNameIs("TPanel"))
    Allow = false;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester