PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → WD Objets graphiques --> Insérer un fil
WD Objets graphiques --> Insérer un fil
Débuté par Jérôme L., 17 déc. 2019 23:38 - 5 réponses
Posté le 17 décembre 2019 - 23:38
Bonjour à tous,

J'utilise l'exemple WD Objets graphiques pour "dessiner" un schéma d'une infrastructure informatique.
J'ai ajouté des logos, et je cherche maintenant insérer un fil entre 2 logos.

Cela fait plusieurs jours que j'essaie avec "Champcrée" mais sans résultats.
Savez-vous si cela est possible ? Si oui, auriez-vous une piste à me donner svp?

Merci d'avance !
Posté le 18 décembre 2019 - 08:26
Bonjour,

Je fais ce type de projet pour cartographier les applications et les flux.
J'utilise champcree :

MonFil est un Champ

MonFil <- ChampCrée(sWnom_lien, typFil)
MonFil..ChampDépart = wchamp_depart
MonFil..ChampArrivée = wchamp_arrivee
MonFil..NbMaxSegment=wnd_seg
MonFil..Epaisseur=5
MonFil..Couleur=wcouleur
MonFil..FormeExtrémitéDépart = formeAucune
MonFil..FormeExtrémitéArrivée = formeFlèche
MonFil..FormeExtrémitéTaille = 20
MonFil..Altitude = 0
MonFil..Traitement[trtBoutonGaucheDoubleClic] = CLIC_LIEN
MonFil..Traitement[trtBoutonDroitRelâché] = CLIC_DROIT_LIEN

MonFil..Altitude=100

CDLT

PH
Membre enregistré
10 messages
Posté le 18 décembre 2019 - 13:15
Bonjour Patrice,

Merci pour votre réponse.

Stockez-vous ces ligne dans une procédure locale? Appelée par un bouton?
Je ne comprends pas comment récupérer les références des objets à "relier".

Merci d'avance.
Membre enregistré
10 messages
Posté le 18 décembre 2019 - 23:33
Bon, j'ai réussi à créer le fil. Je ne sais pas si c'est très "académique" mais ça fonctionne.

Traitement du bouton "Insérér flêche" dans la fenêtre principale :
// Pas de document courant
SI CFI_DOCUMENT..FenêtreSource = "" ALORS RETOUR
FenEdActive(CFI_DOCUMENT.MGREspace,Vrai)
sSelection est une chaîne = CFI_DOCUMENT.JL_IdentifieSelection()


Procédure locale JL_IdentifieSelection() dans la fenêtre interne
Procedure JL_IdentifieSelection()

sSelection est une chaîne
// Il faut au moins un champ sélectionné pour gérer la duplication
SI PAS FenEdSelectOccurrence(MGREspace) >= 1 ALORS
ErreurDéclenche(500, "Aucune sélection courante")
RENVOYER Faux
FIN

// Enumération
SI FenEdSelectOccurrence(MGREspace)<>2 ALORS
ToastAffiche("Vous devez sélectionner 2 images")
RENVOYER Faux
FIN

sChampDepart est un Champ <- FenEdSelect(MGREspace, 1)
sChampArrivee est un Champ <- FenEdSelect(MGREspace, 2)
sNomFil est une chaîne = sChampDepart..Nom + "-" + sChampArrivee..Nom

JL_CréeFil(sNomFil,sChampDepart,sChampArrivee)

RENVOYER Vrai


Et enfin Procédure locale JL_CréeFil()
Procedure JL_CréeFil(sWnom_lien,wchamp_départ,wchamp_arrivee est un Champ)

// Création et initialisation d'un fil entre le bouton et le champ3
MonFil est un Champ

MonFil <- ChampCrée(sWnom_lien, typFil)
MonFil..ChampDépart = wchamp_départ
MonFil..ChampArrivée = wchamp_arrivee
MonFil..NbMaxSegment=3
MonFil..Epaisseur=1
MonFil..Couleur=iNoir
MonFil..FormeExtrémitéDépart = formeAucune
MonFil..FormeExtrémitéArrivée = formeAucune
MonFil..Altitude=100


Donc là ça fonctionne plutôt pas mal... sauf que je rencontre 2 nouveaux problèmes :
- lorsque j'enregistre, le fil devient transparent. Je peux néanmoins le sélectionner.
- lorsque je tente de le supprimer j'ai une erreur :

Une assertion n'est pas vérifiée à la ligne 44 du traitement 'FI_ESPACE_TRAVAIL.PROCEDURE.__MGRObjetSupprime'.

Pile :
Procédure locale __MGRObjetSupprime (FI_ESPACE_TRAVAIL.PROCEDURE.__MGRObjetSupprime), ligne 44
Procédure interne __SuppressionDepuisProps (FI_ESPACE_TRAVAIL.PROCEDURE.__MGRExécuteSuppressionDepuisProps), ligne 33
Procédure locale __MGRExécuteSuppressionDepuisProps (FI_ESPACE_TRAVAIL.PROCEDURE.__MGRExécuteSuppressionDepuisProps), ligne 18
Procédure locale __MGRExécuteSupprimeSélectionCourante (FI_ESPACE_TRAVAIL.PROCEDURE.__MGRExécuteSupprimeSélectionCourante), ligne 33
Procédure locale MGRSupprimeSélection (FI_ESPACE_TRAVAIL.PROCEDURE.MGRSupprimeSélection), ligne 19
Clic sur BTN_SUPPR (FI_ESPACE_TRAVAIL.FI_ESPACE_TRAVAIL.BTN_SUPPR), ligne 3


Cette erreur n'apparaît pas si j'enregistre avant et que le fil devient transparent.

Une idée?
Membre enregistré
10 messages
Posté le 20 décembre 2019 - 21:02
Bon, j'ai trouvé pour la suppression. Voici le code de la procédure modifiée.

Procedure JL_CréeFil(sWnom_lien,wchamp_départ,wchamp_arrivee est un Champ)

MonFil est un Champ
MonFil <- ChampCrée(sWnom_lien, typFil)
MonFil..ChampDépart = wchamp_départ
MonFil..ChampArrivée = wchamp_arrivee
MonFil..NbMaxSegment=3
MonFil..Epaisseur=1
MonFil..Couleur=iNoir
MonFil..FormeExtrémitéDépart = formeAucune
MonFil..FormeExtrémitéArrivée = formeAucune
//MonFil..FormeExtrémitéTaille = 5
MonFil..Altitude = 0
//MonFil..Traitement[trtBoutonGaucheDoubleClic] = CLIC_LIEN
//MonFil..Traitement[trtBoutonDroitRelâché] = CLIC_DROIT_LIEN
MonFil..Altitude=100

// Déclare l'action et crée l'objet
FenEdDo(MGREspace, __CréeObjet)
PROCEDURE INTERNE __CréeObjet()

Empile(PileActions, "Créer")

// Ajoute l'objet au document
MGRObjetAjoute(MonFil)
sNom est une chaîne = MonFil..Nom

FenEdDéclareUndo(__AnnuleCréeObjet)
PROCEDURE INTERNE __AnnuleCréeObjet()

Dépile(PileActions)

// Supprime
__MGRObjetSupprime(sNom)
FIN

RENVOYER Vrai
FIN

RENVOYER MonFil


Reste que j'ai toujours le fil qui disparaît quand j'enregistre.
Membre enregistré
10 messages
Posté le 07 janvier 2020 - 20:53
Personne n'a d'idée?