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

Lazarus Pascal Discussion :

Apprendre le glisser/déposer avec Free Pascal/Lazarus 1/3


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut Apprendre le glisser/déposer avec Free Pascal/Lazarus 1/3
    Nom : BuildwithFreePascal-Lazarus.jpg
Affichages : 2841
Taille : 32,2 Ko

    Si les utilisateurs de Lazarus savent sans doute que leur EDI prend en charge le glisser-déposer (ou Drag and drop en anglais), peut-être n'imaginent-ils pas la richesse des possibilités qui s'ouvrent à eux. Le travail qui suit entend montrer la diversité des approches et la souplesse d'une panoplie d'outils finalement peu utilisés, et encore ne prétend-il pas à l'exhaustivité !

    La première partie expose les techniques de base du glisser-déposer :

    http://gilles-vasseur.developpez.com/tutoriels/draganddrop1-techniques-base/


    Elle sera prochainement suivie de deux autres parties :

    • la personnalisation du glisser-déposer ;
    • la maîtrise du dessin et des gestionnaires d'événements.


    Que pensez-vous de ce tutoriel ?
    Dans quelles circonstances utilisez-vous le glisser-déposer ?
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut Glisser-déposer vers un site
    Bonjour.

    Étant donné un site web où il faut charger une image. Ce site propose deux possibilités : soit cliquer sur un bouton, ce qui affiche un dialogue d'ouverture de fichier permettant de naviguer sur son disque dur jusqu'au fichier souhaité, soit effectuer un glisser-déposer du gestionnaire de fichiers vers une zone de saisie.

    Il y a quelque temps, j'ai donc cherché (sans trouver !) comment utiliser cette deuxième option pour indiquer le fichier à charger à partir d'un programme développé avec Lazarus (le programme détermine à partir d'un certain nombre de critères le chemin complet du fichier).

    Je profite de votre tutoriel sur le glisser-déposer pour reprendre ce sujet. Si vous avez une idée, merci d'avance.

  3. #3
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par thewolf Voir le message
    Étant donné un site web où il faut charger une image.
    Bonjour,

    Vous parlez de bouton à cliquer et de site Web : en quoi est écrit ce site ?
    S'il s'agissait d'une application de bureau Lazarus autonome, il suffirait d'appliquer ce qui est décrit dans la première partie du tutoriel.
    S'il s'agit de HTML (HTML 5 accompagné de JavaScript par exemple), le problème peut (sans doute) être résolu, mais il faudrait plutôt s'adresser au forum adéquat .
    Il se peut aussi que j'aie mal compris le problème...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Bonjour. Merci pour votre réponse.

    Il s'agit d'un site web auquel il faut fournir des images. C'est possible en faisant un glisser-déposer depuis le gestionnaire de fichiers vers une zone du site. Ce site est en HTML5 + javascript et, en ayant "fouillé" dans le code source, il utilise pour ce faire un produit appelé "plupload" mais tout cela n'est pas a priori important.

    En effet, mon raisonnement est le suivant :

    - en faisant un glisser-déposer sur la zone du site prévue à cet effet, le site (plus précisément le plugin "plupload") reçoit l'information suivante : l'utilisateur de l'ordinateur a fait un glisser-déposer en fournissant par exemple l'information suivante : "c:\data\monfichier.jpg".

    - Lazarus sait comment traiter ce genre d'information, c'est l'objet de votre premier chapitre "glisser-déposer depuis le gestionnaire de fichiers" : le programme créé va diagnostiquer qu'il a reçu un signal de cette nature, y réagir et en déterminer le contenu (le chemin du ou des fichiers déposés). Donc il devrait savoir comment le créer.

    - mon souhait est donc, à l'intérieur de mon programme écrit en Lazarus, de pouvoir simuler ce que fait le gestionnaire de fichiers, par exemple : je fais un glisser-déposer depuis un TLabel ou un Bouton vers la zone "sensible" du site et cela envoie la même information que celle fournie par le gestionnaire de fichiers à savoir dans mon exemple précédent "c:\data\monfichier.jpg", sachant que le nom du fichier est déterminé par le programme en fonction de certains critères ("monfichier" pouvant valoir "img2451" ou "img3727" ou ...)

    J'espère avoir été clair.
    Bonne soirée

    PS : je peux vous fournier le nom du site si vous le souhaitez mais ce n'est pas pertinent, le problème étant général (par exemple Google - Recherche par image).

  5. #5
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Bonjour,

    Citation Envoyé par thewolf Voir le message
    mon souhait est donc, à l'intérieur de mon programme écrit en Lazarus, de pouvoir simuler ce que fait le gestionnaire de fichiers, par exemple : je fais un glisser-déposer depuis un TLabel ou un Bouton vers la zone "sensible" du site et cela envoie la même information que celle fournie par le gestionnaire de fichiers à savoir dans mon exemple précédent "c:\data\monfichier.jpg", sachant que le nom du fichier est déterminé par le programme en fonction de certains critères ("monfichier" pouvant valoir "img2451" ou "img3727" ou ...)
    Si j'ai bien compris, voici une unité qui permet de charger une image depuis l'intitulé (Caption) d'un TLabel. La fiche ne contient qu'un TLabel nommé lblFile dont la propriété Caption vaut le nom de l'image (fichier avec son chemin) à afficher et une TImage nommée imgMain dont la propriété Stretch a été mise à True pour l'étirer.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    unit main;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        imgMain: TImage;
        lblFile: TLabel;
        procedure ImgMainDragDrop(Sender, Source: TObject; X, Y: Integer);
        procedure ImgMainDragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.ImgMainDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      Accept := (Source is TLabel);
    end;
     
    procedure TForm1.ImgMainDragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      imgMain.Picture.LoadFromFile((Source as TLabel).Caption);
    end;
     
    end.
    Pour que cela fonctionne, il faut bien sûr mettre la propriété DragMode du TLabel à dmAutomatic.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Bonjour.

    Je suis désolé car je pensais avoir été clair mais ce n'est visiblement pas le cas.

    A priori, dans un drag and drop, il y a une source et une cible. Je veux que la source soit mon programme écrit en Lazarus mais la cible doit être un site internet (plus précisément une zone ad hoc du site).

    Exemple :
    Nom : Image1.jpg
Affichages : 1600
Taille : 20,1 Ko

    Google Images accepte le glisser-déposer (je cite : "Faire glisser une image ici"). Cela fonctionne depuis le gestionnaire de fichiers, également depuis le bureau : au survol, l'apparence du site change et quand on relache, le site charge la photo ...

    Comme écrit précédemment, j'aimerais simuler ce que fait le gestionnaire de fichiers. Je démarre le drag and drop de mon programme (le TLabel dans votre exemple) mais je veux relâcher sur le site (Google Images dans mon exemple) et non sur un autre contrôle du programme (TImage dans votre exemple). Mais le "dragover" n'est même pas diagnostiqué par le navigateur. De plus, je ne vois pas comment intégrer l'information à transmettre au départ.

    Donc, en résumé, je veux démarrer un glisser-déposer depuis mon programme et que, quand je vais relâcher au-dessus d'un navigateur (Google Images dans mon exemple mais cela doit fonctionner avec tout site qui l'accepte), il soit reconnu par le site et transmette une information particulière (ici une chaine de caractères représentant le chemin d'un fichier image). Exactement ce qui se passe si je fais un glisser-déposer du gestionnaire de fichiers vers le navigateur.

    Encore merci.

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut Précisions
    Bonsoir,

    je trouve le § "III-A Travail entre deux contrôles" pas très clair...

    1re phrase, pas grand chose, il manque juste "de" : "depuis le gestionnaire fichiers"

    2e phrase c'est plus ennuyeux car on dirait qu'il manque des mots au tout début.
    Pour moi, Le contrôle dont le contenu doit être autorisé à le faire me fait poser la question "faire quoi ?", alors j'improvise ça :
    Le contrôle dont le contenu "va être tiré" doit être autorisé à le faire en vérifiant que sa propriété DragKind est bien à sa valeur par défaut,
    tiré ou déplacé ou lâché, etc.

    3e phrase, je me demande si ça n'est pas l'inverse :
    Du côté du contrôle qui va accepter de déposer du contenu, --> Du côté du contrôle qui va accepter de recevoir du contenu,
    Si je me trompe, alors peut-être remplacer "déposer" par "exporter" afin de lever toute ambiguïté ?

  8. #8
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Bonjour Jipété,

    Citation Envoyé par Jipété Voir le message
    Bonsoir,
    je trouve le § "III-A Travail entre deux contrôles" pas très clair...
    Tu es trop indulgent, car ce début de chapitre est devenu illisible par ma faute, je le confesse . Claude Leloup avait tout revu et corrigé avec la rigueur qu'on lui connaît et j'ai fait une mauvaise manipulation qui a gommé certaines des corrections.

    J'espère que la mise à jour proposée convient à présent.

    Merci

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  9. #9
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Salut salut, Gilles,
    Citation Envoyé par gvasseur58 Voir le message
    J'espère que la mise à jour proposée convient à présent.
    Ça change la vie des lecteurs, didou dis donc !

Discussions similaires

  1. [Lazarus] Apprendre à internationaliser une application avec Free Pascal/Lazarus
    Par gvasseur58 dans le forum Lazarus
    Réponses: 7
    Dernier message: 12/02/2017, 11h12

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