IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Le drag&drop fonctionne-t-il sur Sidney ? [Android]


Sujet :

Composants FMX Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Le drag&drop fonctionne-t-il sur Sidney ?
    Bonjour,

    je relance ce sujet qui date déjà un peu, je travaille sous Seattle qui date également un peu , alors ma première question:
    Est ce que vous savez si le dragNdrop est désormais géré sous Android pour les nouvelles version Sydney?

    j'ai utilisé l'unité a Paul Toth: "Execute.FMXBasedDragDrop" sur un projet Android.
    ça marche parfaitement sur un écran 7 pouces.
    par contre sur un téléphone 5 pouces android 9, la taille de l'image Shadow ombrée de l'objet a dragger est beaucoup plus grande que l'objet lui même...

    est ce que vous avez ce même problème?
    il doit y avoir un truc a faire du coté de la fonction mais je sèche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    procedure TFMXDragDrop.BeginDragDrop(AForm: TCommonCustomForm; const Data: TDragObject; ABitmap: TBitmap);
    var
      Mouse: IFMXMouseService;
    begin
      if FImage = nil then
      begin
        // the mouse position is not available, TCommonCustomForm.FMousePos would be a good candidate if it was not private
        // request the IFMXMouseService on the TForm to see if it is provided
        if IInterface(AForm).QueryInterface(IFMXMouseService, Mouse) <> 0 then
        begin
          // now request the TPlatform, but this ony is not updated when MouseDown occurs and the first image position will be wrong
          if not TPlatformServices.Current.SupportsPlatformService(IFMXMouseService, IInterface(Mouse)) then
            Exit;
        end;
        FImage := TDragImage.Create(nil);
        FImage.FMouse := Mouse;
      end;
     
      FImage.Parent := AForm;
      FImage.FData := Data;
      FImage.FOrigin := FImage.FMouse.GetMousePos(); // AForm.FMousePos would be great
     
      FImage.SetBounds(
        FImage.FOrigin.X - ABitmap.Width/2,
        FImage.FOrigin.Y - ABitmap.Height/2,
        ABitmap.Width,
        ABitmap.Height
      );
      FImage.Bitmap.Assign(ABitmap);
      FImage.Opacity := 0.5;
     
      FImage.FOrigin.X := FImage.Position.X - FImage.FOrigin.X;
      FImage.FOrigin.Y := FImage.Position.Y - FImage.FOrigin.Y;
     
      TOpenForm(AForm).SetCaptured(FImage); // need an access to TCommonCustoForm.FCaptured
    end;

  2. #2
    Membre émérite Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 1 106
    Points : 2 348
    Points
    2 348
    Par défaut
    Bonjour

    Concernant le Drag&Drop, n'étant pas un truc standard sur les plateformes mobiles, ça n'est pas pris en charge par défaut. Le code proposé par Paul fonctionne toujours très bien.

    Concernant la taille de l'image, c'est lié à une autre problématique qui n'a rien à voir. Je te recommande d'ouvrir une nouvelle discussion. C'est lié à la profondeur des pixels : un pixel logique peut correspondre à plusieurs pixels physiques. Ca a été mis en place avec le Retina par Apple et ça s'est généralisé sur tous les appareils récents.

    FireMonkey le prend en charge. Il y a eu des évolutions sur ce point pour Windows dans les versions récentes (et il y en aura d'autres disponibles très prochainement).
    Pour les smartphones il faut jeter un oeil à la propriété BitmapScale qui est alimentée uniquement sur les TBitmap attachés à un composant visuel présent sur l'écran. C'est à 1 par défaut partout ailleurs.

    Sur le Samsung dont tu parles la taille de l'image copiée est plus grande que l'autre probablement car il y a copie d'une capture de la zone de départ sans tenir compte de ce facteur d'échelle qui n'existait pas à l'époque.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pprem pour ta réponse.
    Du coup je m'en suis sorti en déposant une image avec plusieurs résolutions différentes.
    Je test le scale utilisé par l'appli sur cette image afin de connaitre le redimensionnement nécessaire pour mon image shadow.

    ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [...]
    scale:=round(fConfigSyno.Image1.Bitmap.BitmapScale); // récupération de l'échelle utilisé par l'appli sur une image avec plusieurs résolutions, en fonction de la dimension de l'écran
    [...]
    //je prend en compte le scale obtenu dans le calculs des bounds
    FImage.SetBounds(
        FImage.FOrigin.X - (ABitmap.Width/2)/scale, 
        FImage.FOrigin.Y - (ABitmap.Height/2)/scale, 
        ABitmap.Width/scale,                         
        ABitmap.Height/scale                         
      );
    Peu être pas la meilleure méthode car il faut déposer une image dont on a pas forcément besoin mais ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire un Drag & Drop qui fonctionne sur mobile en Javascript
    Par nadfri2019 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/06/2020, 12h08
  2. Drag & Drop, détecté si déplacer sur un input.
    Par blumax dans le forum jQuery
    Réponses: 2
    Dernier message: 08/06/2012, 23h42
  3. Drag drop et double click sur une listview
    Par mr_keyser dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/12/2007, 16h45
  4. Drag&Drop sur l'icone de mon appli
    Par Laskar dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2004, 15h53
  5. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo