Drag and drop StringGrid

Signaler
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020
-
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020
-
Bonjour,
Je fais un drag d' Explorer vers StringGrid tout ce passe bien, mais depuis un téléphone
StringGrid refuse le drag
ci-dessous le code que j'utilise.
procedure TFormBackUp.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(StringGrid1.Handle, True);
  Application.OnMessage := TraiteMessage;
  // c'est la procédure TraiteMessage qui va traiter les messages
end;

procedure TFormBackUp.TraiteMessage(var Msg: TMsg; var Handled: Boolean);
var
  NombreDeFichiers, size, i: integer;
  NomDuFichierStr: string;
  NomDuFichier: array [0 .. 255] of char;
begin
  if Msg.message = WM_DROPFILES then
  begin
    NombreDeFichiers := DragQueryFile(Msg.wParam, $FFFFFFFF, NomDuFichier,
      SizeOf(NomDuFichier)); // récupération du nombre de fichiers
    for i := 0 to NombreDeFichiers - 1 do
    begin
      size := DragQueryFile(Msg.wParam, i, NomDuFichier, SizeOf(NomDuFichier));
      // récupération du nom du fichier
      NomDuFichierStr := NomDuFichier;
      // tansformation du tableau de char en STRING

      StringGrid1.RowCount := StringGrid1.RowCount + 1;
      StringGrid1.Cells[0, StringGrid1.RowCount - 1] :=
        ExtractFileDrive(NomDuFichierStr);
      StringGrid1.Cells[1, StringGrid1.RowCount - 1] :=
        ExtractFilePath(NomDuFichierStr);
      StringGrid1.Cells[2, StringGrid1.RowCount - 1] :=
        ExtractFileName(NomDuFichierStr);
      if not FileExists(NomDuFichierStr) then
         StringGrid1.Cells[3, StringGrid1.RowCount - 1] :=
           floattostrf(TailleDossier(NomDuFichierStr,'*.*',faAnyFile) div 1024, ffNumber, 7,0)+' kb'
      else
         StringGrid1.Cells[3, i] :=
                      floattostrf(TailleFichierr(NomDuFichierStr) div 1024, ffNumber, 7,0)+' kb';
    end;
  end;

Jusque là je n'ai pas trouvé ni sur le site ni avec google
connaissez vous une solution ???
merci.

5 réponses

Messages postés
28
Date d'inscription
samedi 5 septembre 2020
Statut
Membre
Dernière intervention
11 septembre 2020
1
Bonjour
Quel type de téléphone ?
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020
7
Android
Messages postés
28
Date d'inscription
samedi 5 septembre 2020
Statut
Membre
Dernière intervention
11 septembre 2020
1
Suis étonné que ce code se compile avec FMX. La gestion des messages est différentes, les codes de messages de Windows n'y sont pas gérés.

Par défaut les plateformes iOS / Android ne gèrent pas le Drag&Drop dans FMX. Il faut redévelopper une partie pour le gérer en interne au programme.

Paul Toth avait écrit un article là-dessus :
http://lookinside.free.fr/delphi.php?FMXBasedDragDrop

Si c'est pour associer une extension de fichier à une application, il faut en revanche utiliser les API de l'OS. Sur Android ça consiste à ajouter des déclarations dans le manifest et gérer un événement au niveau de l'application.
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020
7
je me suis mal exprimé.
c'est pas du fmx.
c'est simplement un drag vcl du téléphone (branché usb)vers ma stringgrid.
Messages postés
28
Date d'inscription
samedi 5 septembre 2020
Statut
Membre
Dernière intervention
11 septembre 2020
1 >
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020

ok, je comprends mieux

il est possible que le système de fichiers ne gère pas le partage du disque d'appareils extérieurs comme il le fait pour des fichiers locaux

est-ce que le message est déclenché ou même pas ?
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020
7
non aucun message , simplement l'icone du drag refusé
Messages postés
28
Date d'inscription
samedi 5 septembre 2020
Statut
Membre
Dernière intervention
11 septembre 2020
1
Donc ça doit être ça : Windows ne déclenche pas le vrai drag&drop et ne le gère que pour lui.
Est-ce que le drag&drop d'une photo depuis le smartphone peut s'ouvrir dans un logiciel de dessin qui accepterait cette opération depuis l'explorateur de fichiers ? Si c'est KO, faut partir du principe que ce n'est pas géré par le driver du téléphone, si c'est OK, il faudrait espionner le système pour voir quels messages transitent.
Messages postés
199
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
10 septembre 2020
7
je viens d'essayer avec XnView qui accepte les drag depuis windows ça marche.
mais depuis le telephone j'ai exactement la même erreur.
bon merci je vais voir comment intercepter le message et la, c'est pas gagné ,merci de t'être intéressé à cette question.