Salut,
Je veux créer cette animation avec Delphi:
http://www12.0zz0.com/2013/01/26/22/103816389.gif
Les flèches qui bougent correspondent au courant électriques circulant entre les nœuds.
Avez vous une idée pour faire cela?
Merci d'avance !
Version imprimable
Salut,
Je veux créer cette animation avec Delphi:
http://www12.0zz0.com/2013/01/26/22/103816389.gif
Les flèches qui bougent correspondent au courant électriques circulant entre les nœuds.
Avez vous une idée pour faire cela?
Merci d'avance !
qu'est ce qui te pose problème exactement ?
il te faut
- une procédure pour dessiner une ligne avec des flèches à partir d'une position "p"
- un bitmap offline pour dessiner ton image
- afficher ce bitmap sur la fiche (ou un PaintBox) dans le OnPaint
- un timer pour redessiner le tout en modifiant la position "p" des flèches et invalider la fiche (ou la PaintBox)
On peut penser que le TAnimation de FMX permet de le faire aussi !
Tu peux je crois créer un petit scénario avec un TFloatAnimation et TPathAnimation comme dans la démo AnimationDemoHD
Le déplacement et rotation d'image est un basique de FMX, c'est la 1ère chose que Thierry Laborde a montré en 2011
Tu aurais un début de code à nous proposer que l'on puisse t'aider à le corriger
Le sujet date un peu, mais ça peut en intéresser quelques-uns de connaître la méthode pour faire ça simplement avec l'API LineDDA :
Code:
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 type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); end; procedure AnimLines(X, Y: Integer; lpData: lParam); stdcall; //Une fonction callback. var Form1 : TForm1; Offset : Integer; const AL_HORIZONTAL = 1; AL_VERTICAL = 2; implementation {$R *.dfm} procedure AnimLines(X,Y: Integer; lpData: LParam); var Coord : Integer; begin if lpData=AL_HORIZONTAL then Coord := X else Coord := Y; if (Coord mod 5)=Offset then SetPixelV( Form1.Canvas.Handle, X, Y, clBlack ) else SetPixelV( Form1.Canvas.Handle, X, Y, clWhite ); end; procedure TForm1.Timer1Timer(Sender: TObject); begin if Offset>3 then Offset := 1 else Inc(Offset); LineDDA( 20,20,120,20, @AnimLines, AL_HORIZONTAL ); LineDDA( 20,20,20,120, @AnimLines, AL_VERTICAL ); end; END.
qui dit animation, dit complication :)
je vous propose une démo compilée sous Delphi 6...
Pièce jointe 112405
Pièce jointe 112402
et une idée me vient à l'esprit :
les sources de la démo sont à vendre, soit directement auprès de ma société Execute, soit à la communauté :)
si je totalise 50€ de don pour financer le projet FlashPascal (faire un don), je vous livre les sources ici même :)
Vous n'avez pas remarqué que JeaDeb n'est pas venu vous répondre depuis un mois, il n'est même pas revenu sur le forum depuis son inscription
On peut espérer qu'il a fait son propre code depuis !
Ah quel plaisir de retrouver des posts de Paul Toth, mon maître à penser en Delphi ;)
Merci à toi, c'est grâce à toi que j'ai appris beaucoup en Delphi entre 2000 et 2010 avec ton ancien site.
Sinon avec LineDDA c'est lent, le traçage pixel par pixel.