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 :

Comment simuler la chute du curseur ?


Sujet :

Delphi

  1. #41
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut

    @Banban54 : mdr, c'est pour Mord De Rire, dans le meme style tu expldr (EXPLosé De Rire), mdr est l'equivalent de lol en anglais.

    @Archimede : Trop tard Archimede j'ai deja donné la solution et j'ai ete sacré Super King Of Developpez.net !! mais bon je suis bon joueur et je remet mon titre en jeu pour un prochain mini defi

    A++
    Qwaz

  2. #42
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Et bien tout comme Archimède, voilà ce que j'ai pondu (il fait un temps pourri chez moi ce matin):

    J'applique une vitesse initiale au curseur. On peut jouer sur G et E et les vitesses initiales.

    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
     
    unit Unit1;
     
    interface
     
    uses
      SysUtils, Windows, Forms, Classes, Controls, StdCtrls;
     
    type
      TImpact = (iDrop, iTopBottom, iLeftRight);
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
      // Paramètres initiaux: lâcher ou collision
      T0: Cardinal; // Instant initial
      X0: Integer;  // Abscisse initiale
      Y0: Integer;  // Ordonnée initiale
     
      Vx: Extended;  // Vitesse initiale horizontale
      Vy: Extended;  // Vitesse initiale verticale
     
      // Cadre de d'évolution
      LimitX, LimitY: Integer;
     
    const
      G = 9.81 * 50;    // Accélération de la pesanteur
      E = 0.65;         // Coefficient de restitution à la collision
     
    implementation
     
    {$R *.dfm}
    uses
      Math;
     
    procedure InitParams(AImpact: TImpact; const VxI, VyI: Extended);
    begin
      T0 := GetTickCount;
      X0 := Mouse.CursorPos.X;
      Y0 := Mouse.CursorPos.Y;
     
      case AImpact of
        iDrop:
          begin
            Vx := VxI;
            Vy := VyI;
          end;
        iTopBottom:
          begin
            Vx := VxI * E;
            Vy := -VyI * E;
          end;
        iLeftRight:
          begin
            Vx := -VxI * E;
            Vy := VyI * E;
          end;
      end;
    end;
     
    function GetXYPos: TPoint;
    var
      T: Cardinal;
      Vt: Extended;
    begin
      T := GetTickCount - T0;
     
      result.X := Trunc(Vx * (T / 1000) + X0);
      result.Y := Trunc(0.5 * G * Power(T / 1000, 2) + Vy * (T / 1000) + Y0);
     
      Vt := G * (T / 1000) + Vy;
     
      if (result.X <= 0) or (result.X >= LimitX) then
        InitParams(iLeftRight, Vx, Vt)
      else if (result.Y <= 0) or (result.Y >= LimitY) then
        InitParams(iTopBottom, Vx, Vt);
    end;
     
    procedure DropMouse;
    var
      Pt: TPoint;
    begin
      LimitX := GetSystemMetrics(SM_CXSCREEN) - GetSystemMetrics(SM_CXCURSOR);
      LimitY := GetSystemMetrics(SM_CYSCREEN) - GetSystemMetrics(SM_CYCURSOR);
     
      InitParams(iDrop, 300, -400);
      repeat
        Sleep(20);
        Pt := GetXYPos;
        SetCursorPos(Pt.X, Pt.Y);
      until (Abs(Vx) < 2) or (Abs(Vy) < 2);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      DropMouse;
    end;
     
    end.

    Bon Week-end
    @+ Claudius

  3. #43
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    On s'amuse comme des petits fous
    reste à jouer à la baballe. C'est tentant une petite animation avec un ballon...
    bon Wk

    ps: ça a l'air d'être du grand art (structuré et bien écrit) claudius

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Comment simuler EOF au clavier
    Par beloc dans le forum C
    Réponses: 10
    Dernier message: 04/04/2005, 16h29
  2. Comment changer l'aspect du curseur sur un lien ?
    Par Fleep dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/03/2005, 17h30
  3. Réponses: 25
    Dernier message: 17/02/2005, 18h02
  4. Comment simuler un EXCEPT en MySQL ??
    Par orus8 dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/03/2004, 21h19
  5. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09

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