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

Delphi Discussion :

création d'évenements en dynamique


Sujet :

Delphi

  1. #1
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut création d'évenements en dynamique
    bonsoir, je débute sur delphi 10.3, et je désire créer des composants en dynamique, avec des propriétés et éventements dédiés.
    Pour les proprités, cela fonctionne. En revanche pour les événements, "OnDragOver" résiste en indiquant que les listes de paramètres diffèrent, entre l'événement initial et la procédure que je cherche à déclencher. Pourtant les listes de paramètres me semblent identiques.
    Sur mon bout de programme test, le "OnClick" est ok, mais pas le "OnDragOver", qui doit modifier théoriquement la taille du bouton.
    et qui ne fonctionne pas. (désactivée par "//" comme devant).
    Merci pour vos idées si cela vous saute au yeux?...


    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    unit clic_et_entrer;
     
    interface
     
    uses
     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
       jpeg, Vcl.Imaging.pngimage, Vcl.ExtCtrls, Vcl.StdCtrls ;
     
     
    type
      TForm7 = class(TForm)
     
          procedure monclic (sender : tobject);
     
          procedure mondragover (sender, source : tobject; X,Y : integer;
                                  state : tdragstate; accept : boolean);
        procedure FormClick(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form7: TForm7;
               var monbouton : tbutton;
     
    implementation
     
    {$R *.dfm}
     
              procedure tform7.monclic (sender : tobject);
                begin
                  showmessage (' je clique');
     
                end;
     
              procedure tform7.mondragover (sender, source : tobject; X,Y : integer; state : tdragstate ; accept : boolean);
                  begin
                    monbouton.Height := 30;
                  end;
     
     
     
     
     
     
    procedure TForm7.FormClick(Sender: TObject);
    begin
           with monbouton do
                     begin
             monbouton := tbutton.Create (form7);
               parent:= form7;
                          height:= 300;
                          width := 150;
                          top := 50;
                           monbouton.OnClick := monclic ;
                          // monbouton.OnDragOver := mondragover;
     
                     end;
     
    end;
     
     
    end.

  2. #2
    Membre expérimenté Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 325
    Par défaut
    Bonjour,
    L’événement OnDragOver se produit quand tu déplaces un objet au dessus du contrôle (Drag and Drop).
    Si tu veux tester avec la souris, utilise OnMouseMove...

    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
     
    unit uTest;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        MonBouton: TButton;
        procedure MonBoutonClick(Sender: TObject);
        procedure MonBoutonMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.MonBoutonClick(Sender: TObject);
    begin
     ShowMessage('Je clique');
    end;
     
    procedure TForm1.MonBoutonMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      MonBouton.Height := 30;
    end;
     
    end.
    Ce sera la même chose en créant ton bouton dynamiquement.
    Bon courage...

  3. #3
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 180
    Par défaut
    Citation Envoyé par patdu26 Voir le message
    bonsoir, je débute sur delphi 10.3, et je désire créer des composants en dynamique, avec des propriétés et éventements dédiés.
    Pour les proprités, cela fonctionne. En revanche pour les événements, "OnDragOver" résiste en indiquant que les listes de paramètres diffèrent, entre l'événement initial et la procédure que je cherche à déclencher. Pourtant les listes de paramètres me semblent identiques.
    Sur mon bout de programme test, le "OnClick" est ok, mais pas le "OnDragOver", qui doit modifier théoriquement la taille du bouton.
    et qui ne fonctionne pas. (désactivée par "//" comme devant).
    Merci pour vos idées si cela vous saute au yeux?...


    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    unit clic_et_entrer;
     
    interface
     
    uses
     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
       jpeg, Vcl.Imaging.pngimage, Vcl.ExtCtrls, Vcl.StdCtrls ;
     
     
    type
      TForm7 = class(TForm)
     
          procedure monclic (sender : tobject);
     
          procedure mondragover (sender, source : tobject; X,Y : integer;
                                  state : tdragstate; accept : boolean);
        procedure FormClick(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form7: TForm7;
               var monbouton : tbutton;
     
    implementation
     
    {$R *.dfm}
     
              procedure tform7.monclic (sender : tobject);
                begin
                  showmessage (' je clique');
     
                end;
     
              procedure tform7.mondragover (sender, source : tobject; X,Y : integer; state : tdragstate ; accept : boolean);
                  begin
                    monbouton.Height := 30;
                  end;
     
     
     
     
     
     
    procedure TForm7.FormClick(Sender: TObject);
    begin
           with monbouton do
                     begin
             monbouton := tbutton.Create (form7);
               parent:= form7;
                          height:= 300;
                          width := 150;
                          top := 50;
                           monbouton.OnClick := monclic ;
                          // monbouton.OnDragOver := mondragover;
     
                     end;
     
    end;
     
     
    end.
    C'est un peu normal que ça ne marche pas, car la déclaration de l'évément OnDragOver doit se présenter comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure Button1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    Note bien le mot clé "var" en rouge que tu as omis dans ta déclaration
    C'est important car il permet de renvoyer une valeur pour la paramètre "Accept" (True ou False) suivant que ton composant accepte le Drag ou pas provenant de la source
    Après comme le dit patdu26, le OnDragOver n'est forcement le plus approprié pour ce que tu veux faire

  4. #4
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut
    Merci beaucoup! J'ai bien oublier le "VAR" avant accept. Je ne le voyais pourtant pas....
    Merci d'avoir pris en compte mon message avec une telle réactivité et une telle attention!!
    A bientôt pour d'autres questions je le crains...

  5. #5
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut "Ondragover" pour "droit de survol"?...
    Bonjour Galet,

    pour ma part, j'interprète l'événement "ondragover", comme une "autorisation de survol", d'un objet source, sur une forme visible, dans le but pour ma part, de pouvoir ensuite le lâcher, afin qu'il se dépose sur cette forme destinataire.
    Or, quand je crée de manière dynamique une forme pour recevoir cet élément que je déplace, le "accept" du "ondragover" de la forme de réception semble par défaut sur "false", et interdit donc, le survol par un autre objet.
    Il me semble donc nécessaire de créer un événement dynamique "ondragover" sur la forme destinataire, pour simplement valider son paramètre "accept" sur "true".
    Ai-je bien raison de procéder ainsi?...

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 555
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 555
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Ai-je bien raison de procéder ainsi?...
    Je n'ai pas le temps de répondre extensivement donc je dirais que non, vous vous compliquez l'existence.
    Les explications à ma réponse plus tard, si j'y pense

  7. #7
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut
    Bonsoir Sergio, merci de votre passage éclair, même laconique, car même si je galère, je suis rassuré d'apprendre que je me complique la vie.
    En effet je passe beaucoup de temps pour des résultats encore pour le moins modestes et j'espère améliorer mon approche au fil du temps.
    Cela dit, je continue à tester et à découvrir pour avancer doucement..
    Au plaisir de vous croiser à nouveau car j'aurai certainement besoin d'aide très bientôt..

  8. #8
    Membre expérimenté Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 325
    Par défaut
    Bonjour Patdu26,
    La question est "que cherches-tu à effectuer ?"
    - Augmentation de la taille du bouton au passage de la souris ?
    - Création dynamique ?
    - Drag and drop ?

    Tu trouveras une mine d'or ici...à condition d'exprimer la question la plus claire possible.....
    Cordialement,

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 555
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 555
    Billets dans le blog
    65
    Par défaut
    Les explications à ma réponse plus tard,
    Choses promises

    Voilà ma vision du dragdrop dans un petit programme
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    unit Unit96;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
      System.ImageList, Vcl.ImgList;
     
    type
      TForm96 = class(TForm)
        Button1: TButton;
        Panel1: TPanel;
        Panel2: TPanel;
        ImageList1: TImageList;
        procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure Panel2DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
        procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure Panel2DragDrop(Sender, Source: TObject; X, Y: Integer);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form96: TForm96;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm96.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
    if Source is TButton then
      begin
        TButton(Source).Parent:=TForm(Sender);
        TButton(Source).Top:=Y;
        TButton(Source).Left:=X;
      end;
    end;
     
    procedure TForm96.FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
    Accept:=Source is TButton;
    end;
     
    procedure TForm96.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
    Accept:=False;
    end;
     
    procedure TForm96.Panel2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
    if Source is Tbutton then
     begin
      TButton(Source).Parent:=TPanel(Sender);
      TButton(Source).Top:=Y;
      TButton(Source).Left:=X;
     end;
    end;
     
    procedure TForm96.Panel2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
    Accept:=Source is Tbutton;
    end;
     
    end.
    dfm
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    object Form96: TForm96
      Left = 0
      Top = 0
      Caption = 'Form96'
      ClientHeight = 523
      ClientWidth = 460
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnDragDrop = FormDragDrop
      OnDragOver = FormDragOver
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 32
        Top = 32
        Width = 75
        Height = 25
        Caption = 'Button1'
        DisabledImageIndex = 2
        DragCursor = crMultiDrag
        DragMode = dmAutomatic
        HotImageIndex = 0
        ImageIndex = 1
        Images = ImageList1
        SelectedImageIndex = 0
        StylusHotImageIndex = 2
        TabOrder = 0
      end
      object Panel1: TPanel
        Left = 32
        Top = 104
        Width = 185
        Height = 185
        Caption = 'Panel1'
        TabOrder = 1
        OnDragOver = Panel1DragOver
      end
      object Panel2: TPanel
        Left = 32
        Top = 312
        Width = 185
        Height = 185
        Caption = 'Panel2'
        TabOrder = 2
        OnDragDrop = Panel2DragDrop
        OnDragOver = Panel2DragOver
      end
      object ImageList1: TImageList
        ColorDepth = cd32Bit
        DrawingStyle = dsTransparent
        Height = 24
        Width = 24
        Left = 328
        Top = 32
        Bitmap = {
          494C010103000800040018001800FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
          0000000000003600000028000000600000001800000001002000000000000024
          000000000000000000000000000000000000605649CF93846FFF93846FFF9384
          6FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF9384
          6FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF9384
          6FFF93846FFF93846FFF93846FFF605649CF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFEAE6E2FFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFEAE6E2FF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFF8EFE3FFF7ED
          E1FFF7EDE0FFF7EBDEFFF7EADDFFF6EADCFFF6E9DAFFF6E9D9FFF6E7D8FFF4E7
          D7FFF4E6D5FFF4E5D4FFF4E5D3FFF4E3D3FFF3E3D1FFF3E2D0FFF3E2CFFFF3E1
          CEFFF2E0CCFFF3E2CFFFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFF8EEE3FFF8EE
          E2FFF7EDE1FFF2E7DAFFE9DED1FFE1D5CAFFDED3C6FFDED1C5FFDED1C4FFDED0
          C2FFDDD0C1FFDDCFC0FFDDCEBFFFE0D0C0FFE3D4C5FFEADCCAFFF0E0CEFFF3E2
          CFFFF3E1CEFFF2E0CCFFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFF8EFE5FFF8EE
          E3FFF8EEE2FFEEE3D9FFDAD0C5FFC6BCB2FFB7ADA4FFB0A79DFFB0A69CFFB4AB
          9FFFBDB2A6FFBDB4A6FFB7AC9FFFB6AA9EFFBDB1A4FFCCBFB0FFE0D0C0FFEEDD
          CCFFF3E2CFFFF3E1CEFFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFF8EFE6FFF8EF
          E5FFF8EEE3FFAC8671FFA9816DFF9D6B54FF9E6348FFA7694DFFB57557FFBB86
          6CFFC18A6FFFCA8868FFBF8264FFB1836BFF9F8674FFA99E91FFBFB2A5FFDCCE
          BDFFEFDECCFFF3E2CFFFFFFFFFFF93846FFF0000000000000000000000000000
          000000000000533A2DBF7A584ADF9D6B54FF9E6348FFA7694DFFB57557FFBB86
          6CFFC18A6FFFCA8868FF935E45DF54382AAF160F0B6000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000006C6C6CBF979797DFC2C2C2FFBEBEBEFFC1C1C1FFC6C6C6FFCDCD
          CDFFCFCFCFFFCECECEFF9A9A9ADF5E5E5EAF1B1B1B6000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFAF0E7FFF8EF
          E6FFF8EFE5FFF8EEE3FFF0E2D5FF99674FFF99593EFFA76343FFB07357FFB0A1
          95FFCCB7A7FFCEA38BFFCC815EFFBD6F4DFFB87557FFA57D68FFA39689FFC5B7
          AAFFE6D8C6FFF3E2D0FFFFFFFFFF93846FFF0000000000000000000000000000
          000000000000000000000000001083553FEF99593EFFA76343FF9B634AEF0201
          0020040201305A3F33AFCC815EFFBD6F4DFFB87557FF5E4335BF000000100000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000010A6A6A6EFB9B9B9FFBDBDBDFFACACACEF0202
          022006060630616161AFCBCBCBFFC3C3C3FFC6C6C6FF6F6F6FBF000000100000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFAF2E9FFFAF0
          E7FFF8EFE6FFF8EFE5FFF8EEE3FFA1765FFF91553BFF9E5C40FFA0725BFFBBB1
          A7FFE3D9CBFFF6E9DAFFC1967DFFB16848FFA56242FF9E6145FF9C7D6BFFB6AA
          9DFFE1D0C1FFF3E3D1FFFFFFFFFF93846FFF0000000000000000000000000000
          00000000000000000000000000004E3124BF91553BFF9E5C40FF5A392ABF0000
          0000000000000000000052382BAFB16848FFA56242FF9E6145FF31221B8F0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000676767BFB7B7B7FFBBBBBBFF6B6B6BBF0000
          000000000000000000005E5E5EAFC0C0C0FFBDBDBDFFBDBDBDFF3C3C3C8F0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFAF2EAFFFAF2
          E9FFFAF0E7FFF8EFE6FFF8EFE5FF9F755FFF884F36FF93563BFF9C6F59FFBBB2
          A9FFE5D9CCFFF6EADCFFCFB4A3FFA56548FF99593EFF8F533AFF92664FFFB4A7
          9CFFE0D0C0FFF4E3D3FFFFFFFFFF93846FFF0000000000000000000000000000
          00000000000000000000000000004C3023BF884F36FF93563BFF553729BF0000
          000000000000000000000E090650A56548FF99593EFF8F533AFF6E4937DF0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000676767BFB4B4B4FFB8B8B8FF6A6A6ABF0000
          0000000000000000000012121250BFBFBFFFB9B9B9FFB6B6B6FF8F8F8FDF0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFAF3EAFFFAF2
          EAFFFAF2E9FFFAF0E7FFF8EFE6FF9F755FFF824C34FF874F36FF936954FFBBB4
          AAFFE5DACEFFF6E9DCFFCAB2A1FF985D42FF8C5238FF844D35FF92624BFFBFB4
          A6FFE5D7C7FFF4E5D3FFFFFFFFFF93846FFF0000000000000000000000000000
          00000000000000000000000000004C3023BF824C34FF874F36FF503225BF0000
          0000000000000000000008040340985D42FF8C5238FF844D35FF92624BFF0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000676767BFB3B3B3FFB4B4B4FF686868BF0000
          000000000000000000000B0B0B40BBBBBBFFB6B6B6FFB3B3B3FFBDBDBDFF0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFAF3EBFFFAF3
          EAFFFAF2EAFFFAF2E9FFFAF0E7FF9F755FFF824C34FF824C34FF8C634EFFB5AD
          A5FFD5CBC1FFDED4C9FFAF8F7DFF875038FF824C34FF834D36FF9E7866FFD5CA
          BBFFEEE0D0FFF4E5D4FFFFFFFFFF93846FFF0000000000000000000000000000
          00000000000000000000000000004C3023BF824C34FF824C34FF4B2E21BF0000
          0000000000000000000030201A8F875038FF824C34FF834D36FF452F24AF0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000676767BFB3B3B3FFB3B3B3FF666666BF0000
          000000000000000000003C3C3C8FB5B5B5FFB3B3B3FFB3B3B3FF595959AF0000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFBF4EDFFFAF3
          EBFFFAF3EAFFFAF2EAFFFAF2E9FF9F7561FF824C34FF824C34FF8C624DFFAAA3
          9AFFBCB5ABFFAF9C8FFF90614AFF824C34FF865139FF9E735EFFC9B6A7FFEBDE
          CFFFF3E6D5FFF4E6D5FFFFFFFFFF93846FFF0000000000000000000000000000
          00000000000000000000000000004C3023BF824C34FF824C34FF4B2E20BF0000
          000000000000080504407D513DEF824C34FF865139FF8A624FEF050303300000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000676767BFB3B3B3FFB3B3B3FF666666BF0000
          0000000000000B0B0B40A4A4A4EFB3B3B3FFB5B5B5FFACACACEF060606300000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFBF4EEFFFBF4
          EDFFFAF3EBFFFAF3EAFFFAF2EAFFA6806BFF88533CFF824C34FF8A5842FFA17E
          6CFF986B56FF8C5A43FF834E36FF90624DFF9C7D6CFFB4A598FFDACEC1FFEFE2
          D4FFF6E7D8FFF4E7D7FFFFFFFFFF93846FFF0000000000000000000000000000
          000000000000000000000000000051372BBF88533CFF824C34FF784A37EF5840
          34BF704A39DF8C5A43FF834E36FF6C4534DF2E20198F02010020000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000006A6A6ABFB6B6B6FFB3B3B3FFA1A1A1EF6F6F
          6FBF909090DFBABABAFFB4B4B4FF8E8E8EDF3C3C3C8F02020220000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFBF6EFFFFBF4
          EEFFFBF4EDFFFAF3EBFFFAF3EAFFAD8A76FF9F745FFF986A54FF926752FFAA90
          82FFB0907EFF93654EFF845038FF91614AFF987C6CFFA5988FFFC1B8ACFFE3D8
          CBFFF4E7D8FFF6E7D8FFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000573D31BF9F745FFF986A54FF6E4A39DF271D
          18803B29219F7E523EEF845038FF7E513DEF2519148000000010000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000006D6D6DBFC6C6C6FFC1C1C1FF909090DF3131
          31804A4A4A9FA4A4A4EFB5B5B5FFA4A4A4EF2F2F2F8000000010000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFBF7F0FFFBF6
          EFFFFBF4EEFFFBF4EDFFFAF3EBFFAD8A76FF9F745FFF9F745FFF9C7664FFBCB5
          AFFFE6DED4FFE5D3C5FF93644EFF844E37FF88543DFF9D7967FFAFA69DFFD8CE
          C1FFF2E5D7FFF6E9D9FFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000573D31BF9F745FFF9F745FFF553C2FBF0000
          0000000000000503033093644EFF844E37FF88543DFF584034BF000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000006D6D6DBFC6C6C6FFC6C6C6FF6C6C6CBF0000
          00000000000006060630BEBEBEFFB4B4B4FFB7B7B7FF6F6F6FBF000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFCF7F2FFFBF7
          F0FFFBF6EFFFFBF4EEFFFBF4EDFFAD8A77FF9F745FFF9F745FFF9C7765FFBDB6
          AFFFE6DED5FFF8EFE5FFB28F7CFF9F745FFF9D725CFFA47A67FFA39286FFD7CB
          C0FFF0E5D7FFF6E9DAFFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000573D31BF9F745FFF9F745FFF553C2FBF0000
          000000000000000000005A4237BF9F745FFF9D725CFFA47A67FF040201300000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000006D6D6DBFC6C6C6FFC6C6C6FF6C6C6CBF0000
          000000000000000000006F6F6FBFC6C6C6FFC5C5C5FFC9C9C9FF060606300000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFCF8F3FFFCF7
          F2FFFBF7F0FFFBF6EFFFFBF4EEFFAD8A76FF9F745FFF9F745FFF9C7765FFBDB7
          B0FFE5DDD4FFEFE6DEFFB19180FF9F745FFF9F745FFFA7806CFFA99587FFDED4
          C9FFF4E7DAFFF6EADCFFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000573D31BF9F745FFF9F745FFF553C2FBF0000
          000000000000000000004B382EAF9F745FFF9F745FFFA7806CFF080403400000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000006D6D6DBFC6C6C6FFC6C6C6FF6C6C6CBF0000
          000000000000000000005E5E5EAFC6C6C6FFC6C6C6FFCBCBCBFF0B0B0B400000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFCF8F4FFFCF8
          F3FFFCF7F2FFF7F3EDFFEDE7E2FFAA8673FF9F745FFF9F745FFF9A7765FFB5AF
          A9FFD0C9C1FFCCC0B7FFA6826EFF9F745FFF9F745FFFA7806DFFCABDB2FFEBE1
          D5FFF7EBDEFFF7EADDFFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000573D31BF9F745FFF9F745FFF553C2FBF0000
          000000000000000000107D5E4FDF9F745FFF9F745FFF926E5DEF000000100000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000006D6D6DBFC6C6C6FFC6C6C6FF6C6C6CBF0000
          000000000000000000109A9A9ADFC6C6C6FFC6C6C6FFB1B1B1EF000000100000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFCFAF6FFFCF8
          F4FFFCF8F3FFF4EFEAFFD9D1CBFFA37A67FF9F745FFF9F745FFFA07C69FFBBB6
          AFFFB29F93FFB49584FFA17764FF9F7561FFA9826EFFC2AB9EFFEAE1D5FFF4EA
          DEFFF7EDE0FFF7EBDEFFFFFFFFFF93846FFF0000000000000000000000000000
          00000000000000000000000000108C6856EF9F745FFF9F745FFF553C2FBF0000
          000008040340745B50CFA17764FF9F7561FFA9826EFF17110E60000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000010AFAFAFEFC6C6C6FFC6C6C6FF6C6C6CBF0000
          00000B0B0B40898989CFC8C8C8FFC6C6C6FFCCCCCCFF1C1C1C60000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFEFAF7FFFCFA
          F6FFFCF8F4FFB28F7CFFB59181FFA67E6AFF9D715BFF9D715BFF9F745FFFA479
          66FFAC8774FFA47A67FFA57D69FFB69583FFD1BFB1FFF0E7DDFFF7EDE2FFF8EE
          E2FFF7EDE1FFF7EDE0FFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000003622199F836557DFA67E6AFF9D715BFF9D715BFF9F745FFFA479
          66FFAC8774FFA47A67FF8D6857EF4B382EAF0906044000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000004747479F9D9D9DDFCACACAFFC4C4C4FFC4C4C4FFC6C6C6FFC9C9
          C9FFCECECEFFC9C9C9FFAFAFAFEF5E5E5EAF0B0B0B4000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFEFBF8FFFEFA
          F7FFFCFAF6FFFCF8F4FFFCF8F3FFFCF7F2FFFBF7F0FFFBF6EFFFFBF4EEFFFBF4
          EDFFFAF3EBFFFAF3EAFFFAF2EAFFFAF2E9FFFAF0E7FFF8EFE6FFF8EFE5FFF8EE
          E3FFF8EEE2FFF7EDE1FFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFFFFFFFFFFEFBFAFFFEFB
          F8FFFEFAF7FFFCFAF6FFFCF8F4FFFCF8F3FFFCF7F2FFFBF7F0FFFBF6EFFFFBF4
          EEFFFBF4EDFFFAF3EBFFFAF3EAFFFAF2EAFFFAF2E9FFFAF0E7FFF8EFE6FFF8EF
          E5FFF8EEE3FFF8EFE3FFFFFFFFFF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          00000000000000000000000000000000000093846FFFEAE6E2FFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFEAE6E2FF93846FFF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000605649CF93846FFF93846FFF9384
          6FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF9384
          6FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF93846FFF9384
          6FFF93846FFF93846FFF93846FFF605649CF0000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000424D3E000000000000003E000000
          2800000060000000180000000100010000000000200100000000000000000000
          000000000000000000000000FFFFFF0000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          000000000000}
      end
    end
    mon seul regret, que cela soit VCL, FMX ouvre tellement plus de posssibilité dont, entre autre, une 'image' de drag autre qu'u curseur.
    Cela dit, c'est peut-être possible en VCL ...

    Note : dans cet exemple j'aurais pu utilisé du docking plutôt que du drag

  10. #10
    Membre chevronné Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    mon seul regret, que cela soit VCL, FMX ouvre tellement plus de posssibilité dont, entre autre, une 'image' de drag autre qu'u curseur.
    Cela dit, c'est peut-être possible en VCL ...
    Oui c'est possible
    TDragObject.GetDragImages

    Mais du coup, il vaut mieux gérer en DragManual et créer son propre TDragObject.

  11. #11
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut merci pour votre retour
    merci pour ce code que je vais pouvoir le décortiquer tranquillement pour intégrer la gestion des événements dynamiques que je ne maitrise pas encore.
    je reviendrais vers vous je pense, dans quelques jours, après digestion de votre exemple.
    Encore merci.

  12. #12
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut petites questions...
    bonjour à tous, me revoilà après quelques jours d'embuches nouvelles.
    je cherche à créer un quizz, sous la forme d'images à déplacer à la souris, à partir d'une aire de départ à gauche, sur des emplacements à droite.
    Les images ne doivent pouvoir se poser que sur les emplacements dédiés, sinon, elles retournent sur l'aire de départ, au lâcher de la souris.

    Pour l'instant, à l'écran j'ai çà :Nom : rendu_écran.png
Affichages : 542
Taille : 147,4 Ko
    mon répertoire d'images ressemble à ça :Nom : dossier images.png
Affichages : 487
Taille : 47,9 Ko

    le code est :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    unit clic_et_entrer;
     
    interface
     
    uses
     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
       jpeg, Vcl.Imaging.pngimage, Vcl.ExtCtrls, Vcl.StdCtrls ;
     
     
    type
      TForm7 = class(TForm)
        départ: TShape;
        Label1: TLabel;
        arrivée: TShape;
        Label2: TLabel;
     
     
     
          procedure mondragdrop (sender, source : tobject; x, y : integer);
          procedure mondragover (sender, source : tobject; X,Y : integer;
                                  state : tdragstate; var accept : boolean);
          procedure FormCreate(Sender: TObject);
          procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
     
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
     
         trécept = class (tshape)
     
               end;
    var
      Form7: TForm7;
     
         var   shape : array [1..4] of trécept;
               image : array[1..4] of timage;
               hauteur_image : integer = 150 ;
               largeur_image : integer =150;
               intervalle_hauteur_image : integer=200;
               décalage_x, décalage_y : integer; // centrage images sur curseur
     
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm7.FormDragOver(Sender, Source: TObject; X, Y: Integer;
                     State: TDragState; var Accept: Boolean);
                          begin
                          accept:= true ;
     
                          timage(source).Left := mouse.CursorPos.x;//-décalage_x;
                          timage (source).Top := mouse.CursorPos.Y;//-décalage_y;
                          end ;
     
     
              procedure tform7.mondragover (sender, source : tobject; X,Y : integer;
               state : tdragstate ; var accept : boolean);
     
                  begin
                          accept:= true;
     
                          timage (source).Left :=  mouse.CursorPos.x;//-décalage_x;
                          timage (source).Top :=   mouse.CursorPos.Y;//-décalage_y;
                  end;
     
               procedure tform7.mondragdrop (sender, source : tobject; x, y : integer);
                var  i,j : integer;
     
              begin
                  if sender is trécept then
                  begin
                     for i := 1 to 4 do
                          begin
     
                            if source = image[i] then
                                begin
                                  // showmessage (' image '+ inttostr(i));
                                   for j := 1 to 4 do
                                       begin
                                         if sender = shape[j] then
                                           begin
                                             // showmessage (' shape '+ inttostr(j));
                                             image[i].Top := shape[j].Top;
                                             image[i].Left := shape[j].Left;
                                           end
     
     
                                       end;
                                end;
                           end
                  end
     
                  else
                         begin
                           for I := 1 to 4 do
                                begin
                                   if source = image[i] then
                                         begin
                                          // showmessage (' de retour...');
                                           image[i].Top := (intervalle_hauteur_image*i);
                                           image[i].Left := 20;
                                           end;
                                 end;
     
                          end;
     
              end;
     
     
    { CREATION }    procedure TForm7.FormCreate(Sender: TObject);
                  var i : integer ;
        begin
     
           for i := 1 to 5 do
     
                   begin
                     shape[i] := trécept.Create (form7);
                        with shape[i] do
                           begin
                          parent:= form7 ;
                          height:= 150;
                          width := 150;
                          anchors := [akright, aktop] ;
                          left := 750 ;
                          top := 50+20*i+150*(i-1);
     
                          ondragdrop := mondragdrop;
                          ondragover := mondragover;
                         end;
                   end;
     
     
               for i := 1 to 4 do     // on charge les images
               begin
                 image[i]:=timage.Create(form7);
                 image[i].Height := hauteur_image;
                 image[i].Width := largeur_image;
                  image[i].Parent := form7;
                  image[i].DragMode := dmautomatic;
                  image[i].top :=(intervalle_hauteur_image*i) ;
                  image[i].left:=(20);
                  image[i].Picture.LoadFromFile('D:\quizz\Q1\image'+inttostr(i)+'.png');
                end;
     
                décalage_x := largeur_image div 2;
                décalage_y := hauteur_image div 2;
         end;
    end.

    mes question sont les suivantes :
    1/ le déplacement des images de 150x150 est assez fluide sans corriger le centrage de la souris sur l'image. Si je cherche à corriger cela modifiant la position de l'image par rapport au curseur sur le dragover, en effectuant mouse.cursorpos.X - la moité de la largeur, la fuidité devient insuffisante et le mouvement saccadé. Cela peut-il être corrigé ou dois-je rester un peu décentré?

    2/ Je crée un type "récept", qui permet le dépôt des images en déplacement uniquement sur les cases de réception, en forçant un retour sur l'aire de départ dans les autres cas. Je souhaite profiter de cette déclaration pour instaurer par défaut les propriétés utiles de ces "récept", sans avoir à le faire ensuite dans l’implémentation (widht et heiht par exemple, prédéfinis une fois pour toute à 150x150 dans la classe récept.). Comment est-ce possible?

    3/ Comment peut-on tester notre application VCL, tout en ayant la console active en arrière plan pour afficher des valeurs et débugger plus facilement?

    4/ En mode conception graphique, on peut déposer directement des objets graphiques sur la fiche. Cependant, la fiche occupe une petite partie de l'écran car ce n'est pas la fenêtre principale, et travailler ainsi est très difficile. Peut-on afficher, en conception, la fiche en taille réelle ou presque, pour avoir une vision suffisante de la position des objets sur la fiche pendant l'exécution??

    Merci à tous ceux qui prendront un peu de temps pour répondre à mes questions ou pour donner leur avis sur mon code, forcément perfectible.....

  13. #13
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 969
    Par défaut
    Votre extrait est particulièrement mal écrit, les indentations ce n'est pas votre fort.

    Pour le déplacement via un TImage, voir un DoubleBuffered car en fait le TImage n'existe pas (d'un point vue Windows), c'est un dessin par dessus son parent
    J'aurais pour ma part mis le TImage dans un TPanel car le TWinControl et le TGraphicControl n'ont pas le même comportement


    Pour votre type TRecept (éviter l'accent même si c'est possible) ... faudra juste apprendre la programmation objet en Delphi pour enrichir le TShape ancêtre, le constructeur par exemple


    un AllocConsole permet d'afficher une fenêtre, c'est effectivement une pratique de débogage, mais une TMemo fait aussi bien l'affaire ou alors OutputDebugString et le journal d'évènement de Delphi
    Cela sera à vous de faire l'affichage de ce que vous souhaitez monitorer


    Passer en mode flottant et concepteur non incorporé, vous aurez le Design Time comme le Run Time, sur les Delphi récent à cause de FMX l'option a été retiré mais il y a encore la base de registre
    Sinon Align, Anchors ... vous pouvez travailler sur une petite fenêtre en Design et un comportement que l'on appellerait "responsive" en RunTime.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  14. #14
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 180
    Par défaut
    Citation Envoyé par patdu26 Voir le message
    mes question sont les suivantes :
    1/ le déplacement des images de 150x150 est assez fluide sans corriger le centrage de la souris sur l'image. Si je cherche à corriger cela modifiant la position de l'image par rapport au curseur sur le dragover, en effectuant mouse.cursorpos.X - la moité de la largeur, la fuidité devient insuffisante et le mouvement saccadé. Cela peut-il être corrigé ou dois-je rester un peu décentré?
    L'astuce consiste à travailler avec "une vignette" pendant le déplacement, une image de qualité volontairement plus basse, par exemple une grosse compression (même avec perte) si tes images sont du JPEG et une palette de couleurs réduite (16 bits) par exemple. Ça rend le dessin de l'image plus rapide pendant le déplacement...

    Il faut créer une vignette pour chaque image et interchanger l'image haute définition avec la vignette en début de déplacement et interchanger la vignette avec l'image haute définition en fin de déplacement...

  15. #15
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut Merci à ShaiLeTroll et sergio_is_back
    Merci pour votre réactivité et la pertinence de vos interventions.
    Je prends conscience du manque de connaissance pour m'attaquer à un "simple" quizz, mais qui en fait, fait appel à de nombreuses connaissances que je ne maitrise pas suffisamment.
    Je vais donc suivre vos conseils et travailler la notion "d'objet" dont je pressens le potentiel sans en maitriser l'usage.
    Je retourne donc à la table de travail (ou plutôt le pc) et je reviendrais avec un programme mieux structuré et plus efficace j'espère, très bientôt.
    Bonne soirée à vous!

  16. #16
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut questions suite
    1/ j'utilise sur vos conseils, un objet de Tmémo pour débugger mes morceaux de programmes.
    Dans les morceaux concernés, j'affecte la valeur sous surveillance, sur une ligne de la box (par exemple line[5] := i
    Cela fonctionne mais..... par défaut, l'objet est vide, et donc, ses lignes sont vides. Si je demande l'affichage de plusieurs lignes, seules la 0 et la 1 apparaissent.
    Si j'affecte au début dans l'objet, des contenus sur les lignes, pour les faire exister simplement, par exemple, lignes de 0 à 8, toutes apparaissent et se mettent à jour dans l'affichage, donc c'est fonctionnel.
    Mais pourquoi ce ligne 0 et 1 uniquement si pas de contenu au départ?

    2/ J'ai regardé des aides sur la création de classes, qui est une procédure très riche, mais encore complexe pour moi. Je n'ai pas vraiment trouvé la réponse à mon attente.
    En effet, une classe peut être créer en modifiant une classe existante proche de notre besoin, en l'adaptant simplement quelque peu à nos impératifs.
    On hérite donc, de tous les membres de la classe mère, et notamment ses propriétés.
    Ma question est la suivante.
    Peut-on dans cette définition de classe, pré-affecter une valeur, qui sera une valeur par défaut pour toutes les instances de cette classe, à une propriété héritée?
    (par exemple, tous les boutons seront de la taille 100x100)?
    Peut-on donc figer, avant même la création de l'objet, les valeur numériques des propriétés height et width, ou bien, ces propriétés,doivent-elles d'abord exister comme telles, dans un objet instancié, que l'on modifiera à loisir ensuite, comme pour tout objet, mais qui devra être renouvelé à chaque création de manière identique, et donc renouvelée pour pas grand chose.....

    Merci à ceux qui comprendront mes questions et qui prendront la peine d'y répondre!...

  17. #17
    Membre chevronné Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Par défaut
    Citation Envoyé par patdu26 Voir le message
    2/ J'ai regardé des aides sur la création de classes, qui est une procédure très riche, mais encore complexe pour moi. Je n'ai pas vraiment trouvé la réponse à mon attente.
    En effet, une classe peut être créer en modifiant une classe existante proche de notre besoin, en l'adaptant simplement quelque peu à nos impératifs.
    On hérite donc, de tous les membres de la classe mère, et notamment ses propriétés.
    Ma question est la suivante.
    Peut-on dans cette définition de classe, pré-affecter une valeur, qui sera une valeur par défaut pour toutes les instances de cette classe, à une propriété héritée?
    (par exemple, tous les boutons seront de la taille 100x100)?
    Peut-on donc figer, avant même la création de l'objet, les valeur numériques des propriétés height et width, ou bien, ces propriétés,doivent-elles d'abord exister comme telles, dans un objet instancié, que l'on modifiera à loisir ensuite, comme pour tout objet, mais qui devra être renouvelé à chaque création de manière identique, et donc renouvelée pour pas grand chose.....

    Merci à ceux qui comprendront mes questions et qui prendront la peine d'y répondre!...
    Tu as la possibilité par exemple d'affecter des valeurs par défaut dans le constructeur de ta classe.
    Cela donnerait pour une petite classe toute simple :
    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
      TUnFruit = class(TObject)
      private
        FNom: String;
      public
        constructor Create;
        property Nom:String read FNom write FNom;
      end;
     
     
    implementation
     
    constructor TUnFruit.Create;
    begin
      inherited;
      FNom := 'Pamplemousse';
    end;
    Et pour tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var unFruit:TUnFruit;
    begin
        unFruit:=TUnFruit.Create;
        ShowMessage('Nom : '+unFruit.Nom);
        unFruit.Free;
    end;

    Ensuite il existe d'autres choses concernant les "properties", mais ce sera dans le cas de la création de composants. Et je n'ai pas encore bien compris ce que tu cherches à réaliser.

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

Discussions similaires

  1. Création d'un tableau dynamique avec XSL-FO
    Par lionelbrizuela dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/01/2006, 11h04
  2. Réponses: 10
    Dernier message: 31/12/2005, 20h10
  3. Création d'un ensemble "dynamique"
    Par petitcoucou31 dans le forum Langage
    Réponses: 3
    Dernier message: 29/12/2004, 18h05
  4. création d'une librairie dynamique
    Par bilo2000 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/08/2004, 15h17
  5. [Plugin] Création d'une vue dynamiquement
    Par The Bonze dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 15/06/2004, 13h23

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