COMPOSANT GRAPHIQUE DESSIN AVEC ANIMATION

Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010
- - Dernière réponse : blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
- 12 oct. 2008 à 12:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39102-composant-graphique-dessin-avec-animation

blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
Si tu veux gérer ton scintillement, il y a la technique dîte du buffering :

Dans l'évènement OnPaint (ou en surchargeant Paint;), au lieu de dessiner sur le Canvas du TControl ou de la TForm, dessine le sur un TBitmap séparé, et ensuite dessine le TBitmap... : plus de scintillement !
cs_jfs59
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010
-
une petite idée de d'une des procédures réentrente de gestion du GRAFCET

Function TDrawGrafcet.ActiveSuivante(NCol,NRow,PCol,PRow :Integer):boolean;
var test1,test2 :boolean ; x,y: integer;
Begin
result := false;
Case TableauType[NCol,NRow].Gtype of
0: // Rien
result := false;
1..2: // Etape
Begin
TableauType[NCol,NRow].AActive := true;
result := true;
End;
3: // Transition
Begin
if ValideTransition(NCol,NRow)and (TableauType[NCol,NRow -1].Gtype < 16 )then result := ActiveSuivante(NCol,NRow+1,NCol,NRow) else if
ValideTransition(NCol,NRow)and (TableauType[NCol,NRow -1].Gtype > 15 )and VerifierPrecedentes(NCol,NRow-1,NCol,NRow-1)then result := ActiveSuivante(NCol,NRow+1,NCol,NRow) else result := false;

End;
4: // Depart
Begin
For x := 0 to ColCount - 1 do
for y := 0 to RowCount- 1 do
If ((TableauType[x,y].Gtype = 1) or (TableauType[x,y].Gtype = 2)) and (TableauType[x,y].Numero = TableauType[NCol,NRow].Numero) then
Begin
ActiveSuivante(x,y,NCol,NRow);
Result := true;
Exit;
End;
End;
5: // Arrivée
Begin
result := true;
End;
6: // Coude droit bas
Begin
if NCol = PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow +1,NCol,NRow);
End;
7: // Coude gauche bas
Begin
if NCol = PCol Then result := ActiveSuivante(NCol-1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow+1,NCol,NRow);
End;
8: // Coude droit haut
Begin
if NCol = PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow -1,NCol,NRow);
End;
9: // Coude gauche haut
Begin
if NCol = PCol Then result := ActiveSuivante(NCol-1,NRow,NCol,NRow)else if NRow = PRow
then result := ActiveSuivante(NCol,NRow-1,NCol,NRow);
End;
10: // Horizontale haut
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End Else
If PCol > NCol Then
Begin
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
End Else
If PCol < NCol Then
Begin
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
End;
end;
11: // Horizontale bas
Begin
If PCol > NCol Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol,NRow+1,NCol,NRow)) or Test1;
End Else
If PCol < NCol Then
Begin
Test1 := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol,NRow+1,NCol,NRow)) or Test1;
End;
end;
12,13: // Simple descente et Simple montée
Begin
if NRow > PRow Then result := ActiveSuivante(NCol,NRow+1,NCol,NRow)else if NRow < PRow
then result := ActiveSuivante(NCol,NRow-1,NCol,NRow);
End;

14: // Branche Horizontale
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End
Else If PCol > NCol Then Result := (ActiveSuivante(NCol,NRow +1,NCol,NRow));
end;
15: // Horizontale simple
Begin
if NCol > PCol Then result := ActiveSuivante(NCol+1,NRow,NCol,NRow)else if NCol < PCol
then result := ActiveSuivante(NCol -1 ,NRow,NCol,NRow);
End;
16: // Double Centre
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Test2 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1 or test2;
End Else
If PCol > NCol Then
Begin
test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow))or test1;
End Else
If PCol < NCol Then
Begin
test1 := (ActiveSuivante(NCol,NRow+1,NCol,NRow));
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or test1;
End;
end;

17: // Double Haut
Begin
if NRow > PRow Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
Result := (ActiveSuivante(NCol+1,NRow,NCol,NRow)) or Test1;
End Else
If PCol > NCol Then
Begin
result := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
End Else
If PCol < NCol Then
Begin
result := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
End;
end;

18: // Double Bas
Begin
If PCol > NCol Then
Begin
Test1 := (ActiveSuivante(NCol-1,NRow,NCol,NRow));
result := (ActiveSuivante(NCol,NRow+1,NCol,NRow))or test1;
End Else
If PCol < NCol Then
Begin
Test1 := (ActiveSuivante(NCol+1,NRow,NCol,NRow));
result := (ActiveSuivante(NCol,NRow+1,NCol,NRow))or test1;
End;
end;

Else result := false; // Autre valeur
End; // fin case of
End;


le nombre de possibilité est assez importants d'autant que
VerifierPrecedentes est aussi réentrentes comme plusieurs autres .. a la fin le cerveau commence a fumer ...
cs_jfs59
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010
-
donc pour revenir a nos moutons ...
des composants type interrupteur, lampe, moteurcontacteur etc ... peuvent se placer sur la feuille et on les connecte avec des fils ! quand on ferme l'inter la lampe s'allume ... pas trop difficile a faire sauf si on veut vraiment gerer tous les cas .. alors la l'intelligence de fonctionnement sera pas facile a ecrire ...
cs_jfs59
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010
-
oui j'ai ca dans la tete aussi .. j'ai fait un editeur de schema avec des composants electriques mais c'est juste pour faire du dessin .. d'ailleur c'est lié a un editeur de circuits imprimé multicouches (sans routeur celui que j'avais ecris faisait du tricotage ) mais la dedans rien ne bouge tout seul ...
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
OH!
ça m'a l'air pas mal du tout! source interressante car j'ai en projet un editeur de shema electrique interactif ... ça pourrait etre lié.