Composant graphique dessin avec animation

Soyez le premier à donner votre avis sur cette source.

Vue 26 724 fois - Téléchargée 1 862 fois

Description

Bon j'ai longtemps hésité a m'exposer aux critiques car en fait on y gagne pas grand chose sinon a se faire mal ... mdr..
Pour installer le composant il faut installer le fichier Tapis.pas en fait c'est le composant fini parmi les deux installés.
Le fichier Aled n'est pas de moi mais il est necessaire donc je l'ai joint avec le copyright de l'auteur.
Ce composant est utilisé dans un programme de simulation de GRAFCET avec d'autres composants graphiques tel que vérins portique et station d'embouteillage je peux éventuellement donné une adresse pour essayer programme ... l'image donne une idée de tout ca ...

Le seul mais gros probleme que je rencontre souvent est le scintillement ! le doublebuffered machin chose change rien au probleme ou je sais pas l'utiliser !

voila a vos plumes trempées dans le sang venimeux de vos critiques acerbes .. mdr ...

Conclusion :


il n'y aura pas de mises a jour .. cependant je me reservele droit d'utiliser vos astuces de programmation .. si elle me semblent bénéfiques sur le point vitesse et ou optimisation du scintillement

merci.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
234
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 !
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 ...
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 ...
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 ...
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
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é.
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.