FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Planétarium virtuel.
par Pedro Alvarez Hier à 16:57

» Roues dentées
par jean_debord Hier à 10:40

» Attention arnaque !
par mindstorm Jeu 19 Juil 2018 - 19:18

» Qui fait quoi ?
par silverman Mer 18 Juil 2018 - 15:21

» ITEM_SELECT N,L pour synedit
par silverman Mer 18 Juil 2018 - 15:20

» Boussole
par jean_debord Mer 18 Juil 2018 - 11:06

» Roue à n faces
par Marc Dim 15 Juil 2018 - 22:16

» Exemple d'une nouvelle version d'un GRID
par Jean Claude Ven 13 Juil 2018 - 10:32

» Une simple question
par Oscaribout Sam 7 Juil 2018 - 23:20

» BUG sur l'objet TAB
par Jack Sam 7 Juil 2018 - 21:12

» Monopoly moderne
par jjn4 Sam 7 Juil 2018 - 15:06

» Récapitulatif ludothèque panoramic jjn4
par jjn4 Ven 6 Juil 2018 - 17:41

» Lignes ondulées
par JL35 Ven 6 Juil 2018 - 17:39

» bug off_activate 0 : sans d'effet
par silverman Ven 6 Juil 2018 - 13:02

» Position des objets d'un conteneur dans FBPano et Panoramic
par Navigateur Ven 6 Juil 2018 - 12:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2018
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Un essai de construction d'organigramme par Panoramic

Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant
AuteurMessage
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 18:57

Nouvelle version:
Dans tous les panels de propriétés où l'on peut choisir la couleur (Start, Action, Condition, Selector, End, Link), il y a maintenant un bouton coloré juste à côté du champ qui montre le code hexa de la couleur. Ce bouton prend automatiquement la couleur de l'objet choise (celle indiquée dans le champ à côté, donc la couleur normale de l'objet, pas la couleur de sélection ! ).

Un clic sur de bouton coloré ouvre le sélecteur de couleurs Windows, avec toutes ses fonctionnalités. Ainsi, le choix des couleurs est nettement facilité.

La nouvelle DLL est dans le WebDav, dossier DLLs. Et voici le programme:
Code:
' FlowChartDesigner.bas

labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
   
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0 
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_AnnSel%
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
   
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))   
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
       
        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
'            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
'            text no_Start_Couleur%,right$(hex$(ccc%),6)
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
'            text no_End_Couleur%,right$(hex$(ccc%),6)
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
       
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

selectionner:
  selectionner()
  return
 
valider_connector:
  valider_connector()
  return
 
valider_action:
  valider_action()
  return
 
valider_Condition:
  valider_Condition()
  return
 
annulerselection:
  annulerselection()
  return
 
supprimerliens:
  supprimerliens()
  return
 
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
 
valider_end:
  valider_end()
  return
 
valider_Link:
  valider_Link()
  return
 
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
 
enregistrerprojet:
  enregistrerprojet()
  return
 
enregistrersousprojet:
  enregistrersousprojet()
  return
 
lier:
  lier()
  return
 
annulerlier:
  annulerlier()
  return
 
tracer:
  tracer()
  return
 
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
 
annulerSelLien:
  annulerSelLien()
  return
 
supprimerLien:
  supprimerLien()
  return
 
SelCouleurAction:
  SelCouleurAction()
  return
 
SelCouleurCondition:
  SelCouleurCondition()
  return
 
SelCouleurSelection:
  SelCouleurSelection()
  return
 
SelCouleurStart:
  SelCouleurStart()
  return
 
SelCouleurEnd:
  SelCouleurEnd()
  return
 
SelCouleurLink:
  SelCouleurLink()
  return 
 
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label selectionner, annulerselection, supprimerliens, UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerLien
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_AnnSel%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%
  dim no_AnnSelLink%, no_DelLink%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
 
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,350
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
 
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
 
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sélectionner"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionner
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSel% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerselection
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,left(no%-1) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                   
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLink% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerLien

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
   
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
'  show no_AttributsConnector%
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu% 
  annulerselection()
'  show no_AttributsAction%
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu% 
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
'  show no_AttributsCondition%
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu% 
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
'  show no_AttributsSelection%
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsStart%
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsEnd%
end_sub

sub selectionner()
  show no_info%
  clear no_infotext%
  text no_infotext%,"Sélectionner un élément en cliquant dessus..."
  DoPoints% = 4
  active no_AnnSel%
  active no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_AnnSel%
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message("Ce fichier n'existe pas."
    exit_sub
  end_if
 
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if 
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0   
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))   
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
 
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5) 
  active no_AnnSelLink%
  active no_DelLink%
end_sub
 
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLink%
  hide no_info%
  hide no_info%
end_sub
 
sub supprimerLien()
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 19:58

Bonsoir Klaus !

Dis moi au lieu de rentrer les codes des couleurs, il me semble que tu avais créé l'interface couleur dans KGF
qui était l'interface de Windows. Est ce que tu vois de quoi je parle ? Est ce que çà serait pas mieux ?!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 20:53

As-tu lu mon post juste au-dessus ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 21:06

Ben non pourquoi ?

lol! lol! lol! lol! lol!

Tu vois, on a les mêmes idées... Wink

Au fait je viens de tester, c'est vraiment plus simple et plus pro.
Par contre, je pense qu'il y a une amélioration a apporter. Je t'explique...

1/ tu sélectionnes un objet
2/ tu change sa couleur avec le selecteur
3/ tu désélectionnes l'objet
Et bien il reprends sa couleur de départ... C'est magique non ?! Suspect drunken geek
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 21:16

Normal - tu n'as pas validé les propriétés... et tu peux même modifier les couleurs des liens, avec ça !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 21:29

Citation :
Normal - tu n'as pas validé les propriétés...
Ben oui je sais, mais j'ai trouvé ça bizarre... mais bon ton principe se défends.
Disons que j'ai rien dis alors... Laughing

Citation :
et tu peux même modifier les couleurs des liens, avec ça !
Oui j'ai vu.

Encore une bizarrerie,
Après avoir changer les couleurs d"un objet SELECTION j'ai eu les connecteurs qui sont apparus en jaunes.
Je sais que tu as parlé de quelque chose à ce sujet mais j'ai pas trop compris...
C'est quand même bizarre !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 21:35

Citation :
Après avoir changer les couleurs d"un objet SELECTION j'ai eu les connecteurs qui sont apparus en jaunes
Oui, c'est une anomalie et il faut que je la corrige.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 21:44

Citation :
Oui, c'est une anomalie et il faut que je la corrige.

Ok Klaus. Au fait as tu étudié le principe du plan avec les points magnétiques ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Lun 19 Mar 2018 - 21:48

Bon, c'est corrigé. Recharge la DLL du WebDav - le programme est inchangé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mar 20 Mar 2018 - 0:53

Et une nouvelle version:
Il y a maintenant un bouton "Supprimer tous les liens" (qui fait ce qu'il dit). La nouvelle version de la DLL est dans le WebDav, dossier DLLs. Et voici le programme:
Code:
' FlowChartDesigner.bas

labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
   
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0 
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_AnnSel%
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
   
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))   
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
       
        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
'            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
'            text no_Start_Couleur%,right$(hex$(ccc%),6)
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
'            text no_End_Couleur%,right$(hex$(ccc%),6)
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
       
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

selectionner:
  selectionner()
  return
 
valider_connector:
  valider_connector()
  return
 
valider_action:
  valider_action()
  return
 
valider_Condition:
  valider_Condition()
  return
 
annulerselection:
  annulerselection()
  return
 
supprimerliens:
  supprimerliens()
  return
 
supprimerTousLiens:
  supprimerTousLiens()
  return
 
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
 
valider_end:
  valider_end()
  return
 
valider_Link:
  valider_Link()
  return
 
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
 
enregistrerprojet:
  enregistrerprojet()
  return
 
enregistrersousprojet:
  enregistrersousprojet()
  return
 
lier:
  lier()
  return
 
annulerlier:
  annulerlier()
  return
 
tracer:
  tracer()
  return
 
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
 
annulerSelLien:
  annulerSelLien()
  return
 
supprimerLien:
  supprimerLien()
  return
 
SelCouleurAction:
  SelCouleurAction()
  return
 
SelCouleurCondition:
  SelCouleurCondition()
  return
 
SelCouleurSelection:
  SelCouleurSelection()
  return
 
SelCouleurStart:
  SelCouleurStart()
  return
 
SelCouleurEnd:
  SelCouleurEnd()
  return
 
SelCouleurLink:
  SelCouleurLink()
  return 
 
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label selectionner, annulerselection, supprimerliens
  label  UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerLien, supprimerTousLiens
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_AnnSel%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%
  dim no_AnnSelLink%, no_DelLink%, no_DelLinkAll%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
 
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,380
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
 
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
 
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sélectionner"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionner
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSel% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerselection
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,left(no%-1) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                   
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLink% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLinkAll% = no% : caption no%,"Supprimer tous les liens" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-1) : on_click no%,supprimerTousLiens

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
   
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
'  show no_AttributsConnector%
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu% 
  annulerselection()
'  show no_AttributsAction%
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu% 
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
'  show no_AttributsCondition%
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu% 
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
'  show no_AttributsSelection%
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsStart%
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsEnd%
end_sub

sub selectionner()
  show no_info%
  clear no_infotext%
  text no_infotext%,"Sélectionner un élément en cliquant dessus..."
  DoPoints% = 4
  active no_AnnSel%
  active no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_AnnSel%
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message("Ce fichier n'existe pas."
    exit_sub
  end_if
 
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if 
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0   
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))   
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
 
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5) 
  active no_AnnSelLink%
  active no_DelLink%
  active no_DelLinkAll%
end_sub
 
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLink%
  inactive no_DelLinkAll%
  hide no_info%
  hide no_info%
end_sub
 
sub supprimerLien()
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
end_sub

sub supprimerTousLiens()
  res% = dll_call1("DeleteAllLinksFromFlowChart",FC%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mar 20 Mar 2018 - 17:54

C'est bon Klaus. Testé et approuvé ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mar 20 Mar 2018 - 21:45

Nouvelle version:
- restructurationn interne du tracé des liens, avec élimination automatique de points colinéaires qui étaient générés en excès.
- possibilité de déplacer un angle d'un lien sélectionné en le tirant par la souris avec le bouton droit

La nouvelle version de la DLL est dans le WebDav, dossier DLLs.

Et voici le programme qui va avec:
Code:
' FlowChartDesigner.bas

labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
    
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0  
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_AnnSel%
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
    
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0  : ' c'est la nature de l'élément
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))    
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)   : ' NatureOutput%=0 => Connector seul
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        
if 1=2        
s$ = "avant: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if        

        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
if 1=2
s$ = "après: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if      

      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
'            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
'            text no_Start_Couleur%,right$(hex$(ccc%),6)
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
'            text no_End_Couleur%,right$(hex$(ccc%),6)
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
        
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

selectionner:
  selectionner()
  return
  
valider_connector:
  valider_connector()
  return
  
valider_action:
  valider_action()
  return
  
valider_Condition:
  valider_Condition()
  return
  
annulerselection:
  annulerselection()
  return
  
supprimerliens:
  supprimerliens()
  return
  
supprimerTousLiens:
  supprimerTousLiens()
  return
  
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
  
valider_end:
  valider_end()
  return
  
valider_Link:
  valider_Link()
  return
  
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
  
enregistrerprojet:
  enregistrerprojet()
  return
  
enregistrersousprojet:
  enregistrersousprojet()
  return
  
lier:
  lier()
  return
  
annulerlier:
  annulerlier()
  return
  
tracer:
  tracer()
  return
  
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
  
annulerSelLien:
  annulerSelLien()
  return
  
supprimerLien:
  supprimerLien()
  return
  
SelCouleurAction:
  SelCouleurAction()
  return
  
SelCouleurCondition:
  SelCouleurCondition()
  return
  
SelCouleurSelection:
  SelCouleurSelection()
  return
  
SelCouleurStart:
  SelCouleurStart()
  return
  
SelCouleurEnd:
  SelCouleurEnd()
  return
  
SelCouleurLink:
  SelCouleurLink()
  return  
  
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label selectionner, annulerselection, supprimerliens
  label  UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerLien, supprimerTousLiens
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%, s$
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_AnnSel%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%
  dim no_AnnSelLink%, no_DelLink%, no_DelLinkAll%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
  
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,380
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
  
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
  
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sélectionner"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionner
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSel% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerselection
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,left(no%-1) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                    
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLink% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLinkAll% = no% : caption no%,"Supprimer tous les liens" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-1) : on_click no%,supprimerTousLiens

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
    
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
'  show no_AttributsConnector%
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu%  
  annulerselection()
'  show no_AttributsAction%
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu%  
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
'  show no_AttributsCondition%
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu%  
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
'  show no_AttributsSelection%
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsStart%
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsEnd%
end_sub

sub selectionner()
  show no_info%
  clear no_infotext%
  text no_infotext%,"Sélectionner un élément en cliquant dessus..."
  DoPoints% = 4
  active no_AnnSel%
  active no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_AnnSel%
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message("Ce fichier n'existe pas."
    exit_sub
  end_if
  
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if  
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0    
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))    
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
if 1=2
s$ = "final: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if        
  
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5)  
  active no_AnnSelLink%
  active no_DelLink%
  active no_DelLinkAll%
end_sub
  
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLink%
  inactive no_DelLinkAll%
  hide no_info%
  hide no_info%
end_sub
  
sub supprimerLien()
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
end_sub

sub supprimerTousLiens()
  res% = dll_call1("DeleteAllLinksFromFlowChart",FC%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub

EDIT

testé et opérationnel avec la nouvelle version de Panoramic de ce jour !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mer 21 Mar 2018 - 1:47

Nouvelle version:
outre la possibilité de déplacer un point d'un lien sélectionné (voir ci-dessus), on peut maintenant afficher les liens sous forme de polygone (suite se segments orthogonaux) ou sous forme de courbes souples (Bézier). Pour cela, le cadre des propriétés d'un lien sélectionné contient une nouvelle propriété "Nature" avec une combo affichant par défaut "Polygon", mais on peut y choisir "Bézier". Et lors de la validation des propriétés, l'aspect du lien change.

Pour cela, il faut savoir un minimum sur les courbes Bézier. Dans cette implémentation, un lien en format Bézier est dessiné par une suite de segments de courbes Bézier, chacun déterminé par 4 points: le point de départ et le point d'arrivée sont forcément sur la courbe, ainsi que deux points intermédiaires servant d'"attracteurs" pour le segment de courbe concerné, sans toute fois être placés sur cette courbe. Pour le premier segment, le point de départ est forcément le connecteur de sortie de l'élément  de départ. A partir de là, on utilise les 3 points suivants comme deux points d'attracteurs puis un point d'arrivée. Si le lien a plus de points, on recommence en utilisant implicitement le point d'arrivée précédent comme nouveau point de départ, puis un utilise les 3 points suivants comme nouveau triplet Bézier. Si, après le dessin d'un segment Bézier, moins que 3 points (en comptant le connecteur d'entrée de l'élément de destination) restent disponible, le dessin du lien termine en polygone.

La nouvelle DLL est dans le WebDav, dossier DLLs. Et voici le programme adapté:
Code:
' FlowChartDesigner.bas
                      
labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
    
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0  
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_AnnSel%
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
    
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0  : ' c'est la nature de l'élément
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))    
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)   : ' NatureOutput%=0 => Connector seul
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        
if 1=2        
s$ = "avant: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if        

        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
if 1=2
s$ = "après: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if      

      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
'            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
'            text no_Start_Couleur%,right$(hex$(ccc%),6)
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
'            text no_End_Couleur%,right$(hex$(ccc%),6)
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
        
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        res% = dll_call2("SelectComboBoxItem",handle(no_NatureLink%),res%+1)
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

selectionner:
  selectionner()
  return
  
valider_connector:
  valider_connector()
  return
  
valider_action:
  valider_action()
  return
  
valider_Condition:
  valider_Condition()
  return
  
annulerselection:
  annulerselection()
  return
  
supprimerliens:
  supprimerliens()
  return
  
supprimerTousLiens:
  supprimerTousLiens()
  return
  
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
  
valider_end:
  valider_end()
  return
  
valider_Link:
  valider_Link()
  return
  
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
  
enregistrerprojet:
  enregistrerprojet()
  return
  
enregistrersousprojet:
  enregistrersousprojet()
  return
  
lier:
  lier()
  return
  
annulerlier:
  annulerlier()
  return
  
tracer:
  tracer()
  return
  
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
  
annulerSelLien:
  annulerSelLien()
  return
  
supprimerLien:
  supprimerLien()
  return
  
SelCouleurAction:
  SelCouleurAction()
  return
  
SelCouleurCondition:
  SelCouleurCondition()
  return
  
SelCouleurSelection:
  SelCouleurSelection()
  return
  
SelCouleurStart:
  SelCouleurStart()
  return
  
SelCouleurEnd:
  SelCouleurEnd()
  return
  
SelCouleurLink:
  SelCouleurLink()
  return  
  
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label selectionner, annulerselection, supprimerliens
  label  UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerLien, supprimerTousLiens
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%, s$
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_AnnSel%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%, no_cStatus%, no_StatusText%, no_NatureLink%
  dim no_AnnSelLink%, no_DelLink%, no_DelLinkAll%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
  
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
'  no% = no% + 1 : container no% : no_cStatus% = no% : width no%,width_client(0)-width(no_cElements%) : height no%,40
'    top no%,height_client(0)-40 : left no_cStatus%,width(no_cElements%) : caption no%,"Status"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
'  top no_cStatus%,height_client(0)-40 : width no%,width_client(0)-width(no_cElements%) : caption no_cStatus%,"Status"
'  no% = no% + 1 : alpha no% : parent no%,no_cStatus% : no_StatusText% = no%
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,380
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
  
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
  
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sélectionner"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionner
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSel% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerselection
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,left(no%-1) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                    
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLink% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLinkAll% = no% : caption no%,"Supprimer tous les liens" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-1) : on_click no%,supprimerTousLiens

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
    
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Nature:"
  no% = no% + 1 : combo no% : parent no%,no_AttributsLink% : no_NatureLink% = no% : top no%,top(no%-1) : left no%,80 : width no%,80
    item_add no%,"Polygon" : item_add no%,"Bézier"
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
'  show no_AttributsConnector%
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu%  
  annulerselection()
'  show no_AttributsAction%
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu%  
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
'  show no_AttributsCondition%
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu%  
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
'  show no_AttributsSelection%
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsStart%
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsEnd%
end_sub

sub selectionner()
  show no_info%
  clear no_infotext%
  text no_infotext%,"Sélectionner un élément en cliquant dessus..."
  DoPoints% = 4
  active no_AnnSel%
  active no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_AnnSel%
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SetTypeOfFlowChartLink",FC%,FCL%,item_index(no_NatureLink%)-1)
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message("Ce fichier n'existe pas."
    exit_sub
  end_if
  
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if  
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0    
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))    
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
if 1=2
s$ = "final: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if        
  
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5)  
  active no_AnnSelLink%
  active no_DelLink%
  active no_DelLinkAll%
end_sub
  
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLink%
  inactive no_DelLinkAll%
  hide no_info%
  hide no_info%
end_sub
  
sub supprimerLien()
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
end_sub

sub supprimerTousLiens()
  res% = dll_call1("DeleteAllLinksFromFlowChart",FC%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub

Et voici 3 liens transformés en Bézier:


Sympa, non ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mer 21 Mar 2018 - 10:40

Nouvelle version:
dans le cas de sélection d'un lien sous forme de courbe Bézier, les points "attracteurs" de la courbe sont maintenant montrés par des cercles de la même couleur que la courbe sélectionnés. Ceci permet de "tirer" on point attracteur pour déformer la courbe en temps réel, jusqu'à lui donner la forme souhaitée. En validant les propriétés ou en annulant la sélection du lien, ce dernier sera à nouveau affiché normalement (une courbe de 1 pixel de large avec sa propre couleur) et les points attracteurs sont effacés.

La DLL est dans le WebDav, dossier DLLs. Le programme est inchangé.

Voici ce que ça donne, lors de la sélectiion d'un lien:

Les points jaunes sont les attracteurs qui peuvent être déplacés en les tirant par la souris avec le bouton droit enfoncé.

EDIT

En cas d'enregistrement sur disque, la proprété "Nature" des liens est bien entendu sauvegardée, et restaurée au chargement d'un projet. Le programme est compatible avec les projets existants et charge les liens comme ils étaient - en format polygone.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc

avatar

Nombre de messages : 803
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mer 21 Mar 2018 - 22:59

Bonsoir Klaus !

Tu ne te reposes jamais !

Pour la pose de tes carreaux de plâtre, je pense que tu as opté pour le montage "polygone" et non pas "Bézier" ! Very Happy

Merci de ton partage.

Je vais tester de ce pas...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 803
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mer 21 Mar 2018 - 23:15

Bravo Klaus !

Vraiment super !  cheers

Pourrais-tu ajouter une option pour supprimer un élément quand il est sélectionné ?

L'élément Connecteur ne passe pas en jaune quand il est sélectionné.

Tu as fait un utilitaire très sympa et convivial ! cheers

Merci !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 803
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mer 21 Mar 2018 - 23:52

JEU :
Trouvez le bon chemin qui mène à l’arrêt !

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Mer 21 Mar 2018 - 23:56

Merci, Marc !

Et, justement, voici une nouvelle version ajoutant un bouton "Supprimer" dans le cadre des propriétés de chaque type d'élément. Ce cadre apparaît lorsqu'un élément est sélectionné. Ce bouton permet alors de le supprimer, ainsi que tous les liens qui partent de cet élément ou qui y arrivent. D'ailleurs, le bouton de suppression du lien sélectionné a été déplacé de son endroit actuel vers le cadre des propriétés d'un lien.

J'ai corrigé également une petite anomalie d'affichage de lien en mode Bézier.

La DLL est dans mon WebDav, dossier DLLs, et voici le programme correspondant:
Code:
' FlowChartDesigner.bas
                      
labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
    
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0  
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_AnnSel%
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
    
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0  : ' c'est la nature de l'élément
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))    
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)   : ' NatureOutput%=0 => Connector seul
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        
if 1=2        
s$ = "avant: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if        

        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
if 1=2
s$ = "après: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if      

      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
'            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
'            text no_Start_Couleur%,right$(hex$(ccc%),6)
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
'            text no_End_Couleur%,right$(hex$(ccc%),6)
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
        
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        res% = dll_call2("SelectComboBoxItem",handle(no_NatureLink%),res%+1)
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

selectionner:
  selectionner()
  return
  
valider_connector:
  valider_connector()
  return
  
valider_action:
  valider_action()
  return
  
valider_Condition:
  valider_Condition()
  return
  
annulerselection:
  annulerselection()
  return
  
supprimerliens:
  supprimerliens()
  return
  
supprimerTousLiens:
  supprimerTousLiens()
  return
  
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
  
valider_end:
  valider_end()
  return
  
valider_Link:
  valider_Link()
  return
  
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
  
enregistrerprojet:
  enregistrerprojet()
  return
  
enregistrersousprojet:
  enregistrersousprojet()
  return
  
lier:
  lier()
  return
  
annulerlier:
  annulerlier()
  return
  
tracer:
  tracer()
  return
  
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
  
annulerSelLien:
  annulerSelLien()
  return
  
SelCouleurAction:
  SelCouleurAction()
  return
  
SelCouleurCondition:
  SelCouleurCondition()
  return
  
SelCouleurSelection:
  SelCouleurSelection()
  return
  
SelCouleurStart:
  SelCouleurStart()
  return
  
SelCouleurEnd:
  SelCouleurEnd()
  return
  
SelCouleurLink:
  SelCouleurLink()
  return  

supprimer_connector:
  supprimer_connector()
  return
  
supprimer_action:
  supprimer_action()
  return
  
supprimer_condition:
  supprimer_condition()
  return
  
supprimer_selector:
  supprimer_selector()
  return
  
supprimer_start:
  supprimer_start()
  return
  
supprimer_end:
  supprimer_end()
  end

supprimer_Link:
  supprimer_Link()
  return
  
  
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label selectionner, annulerselection, supprimerliens
  label  UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerTousLiens
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
  label supprimer_connector, supprimer_action, supprimer_condition, supprimer_selector
  label supprimer_start, supprimer_end, supprimer_link
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%, s$
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_AnnSel%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%, no_cStatus%, no_StatusText%, no_NatureLink%
  dim no_AnnSelLink%, no_DelLink%, no_DelLinkAll%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
  
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
'  no% = no% + 1 : container no% : no_cStatus% = no% : width no%,width_client(0)-width(no_cElements%) : height no%,40
'    top no%,height_client(0)-40 : left no_cStatus%,width(no_cElements%) : caption no%,"Status"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
'  top no_cStatus%,height_client(0)-40 : width no%,width_client(0)-width(no_cElements%) : caption no_cStatus%,"Status"
'  no% = no% + 1 : alpha no% : parent no%,no_cStatus% : no_StatusText% = no%
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,355
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
  
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
  
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sélectionner"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionner
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSel% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerselection
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,left(no%-1) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                    
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLinkAll% = no% : caption no%,"Supprimer tous les liens" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerTousLiens

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_connector
    
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_selector


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Nature:"
  no% = no% + 1 : combo no% : parent no%,no_AttributsLink% : no_NatureLink% = no% : top no%,top(no%-1) : left no%,80 : width no%,80
    item_add no%,"Polygon" : item_add no%,"Bézier"
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
'  show no_AttributsConnector%
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu%  
  annulerselection()
'  show no_AttributsAction%
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu%  
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
'  show no_AttributsCondition%
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu%  
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
'  show no_AttributsSelection%
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsStart%
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsEnd%
end_sub

sub selectionner()
  show no_info%
  clear no_infotext%
  text no_infotext%,"Sélectionner un élément en cliquant dessus..."
  DoPoints% = 4
  active no_AnnSel%
  active no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_AnnSel%
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SetTypeOfFlowChartLink",FC%,FCL%,item_index(no_NatureLink%)-1)
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message("Ce fichier n'existe pas."
    exit_sub
  end_if
  
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if  
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0    
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))    
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
if 1=2
s$ = "final: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if        
  
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5)  
  active no_AnnSelLink%
  active no_DelLink%
  active no_DelLinkAll%
end_sub
  
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLinkAll%
  hide no_info%
end_sub
  
sub supprimerTousLiens()
  res% = dll_call1("DeleteAllLinksFromFlowChart",FC%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub

sub supprimer_connector()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub supprimer_action()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub supprimer_condition()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub supprimer_selector()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelector%
end_sub

sub supprimer_start()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub supprimer_end()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub supprimer_link()
  DoPoints% = 0
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
  hide no_attributsLink%
end_sub

EDIT

Je viens de voir ce que tu as posté juste au-dessus - c'est amusant !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Jeu 22 Mar 2018 - 1:56

Nouvelle version:
En plus de la possibilité de supprimer n'importe quel objet sélectionné, il y a mantenant les deux nouveautés suivantes:
- correction de l'absence de récupération du texte du titre d'un élément Selecteur dans les propriétés
- possibilité de saisir le titre des éléments Start et End (ce qui avait été oublié)

La nouvelle DLL est dans le WebDav, dossier DLLs, et voici le programme qui va avec:
Code:
' FlowChartDesigner.bas
                     
labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
   
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0 
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_AnnSel%
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
   
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0  : ' c'est la nature de l'élément
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))   
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)  : ' NatureOutput%=0 => Connector seul
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
       
if 1=2       
s$ = "avant: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if       

        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
if 1=2
s$ = "après: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if     

      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
            text no_Start_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%             
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
            text no_End_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
       
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        res% = dll_call2("SelectComboBoxItem",handle(no_NatureLink%),res%+1)
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

selectionner:
  selectionner()
  return
 
valider_connector:
  valider_connector()
  return
 
valider_action:
  valider_action()
  return
 
valider_Condition:
  valider_Condition()
  return
 
annulerselection:
  annulerselection()
  return
 
supprimerliens:
  supprimerliens()
  return
 
supprimerTousLiens:
  supprimerTousLiens()
  return
 
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
 
valider_end:
  valider_end()
  return
 
valider_Link:
  valider_Link()
  return
 
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
 
enregistrerprojet:
  enregistrerprojet()
  return
 
enregistrersousprojet:
  enregistrersousprojet()
  return
 
lier:
  lier()
  return
 
annulerlier:
  annulerlier()
  return
 
tracer:
  tracer()
  return
 
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
 
annulerSelLien:
  annulerSelLien()
  return
 
SelCouleurAction:
  SelCouleurAction()
  return
 
SelCouleurCondition:
  SelCouleurCondition()
  return
 
SelCouleurSelection:
  SelCouleurSelection()
  return
 
SelCouleurStart:
  SelCouleurStart()
  return
 
SelCouleurEnd:
  SelCouleurEnd()
  return
 
SelCouleurLink:
  SelCouleurLink()
  return 

supprimer_connector:
  supprimer_connector()
  return
 
supprimer_action:
  supprimer_action()
  return
 
supprimer_condition:
  supprimer_condition()
  return
 
supprimer_selector:
  supprimer_selector()
  return
 
supprimer_start:
  supprimer_start()
  return
 
supprimer_end:
  supprimer_end()
  end

supprimer_Link:
  supprimer_Link()
  return
 
 
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label selectionner, annulerselection, supprimerliens
  label  UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerTousLiens
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
  label supprimer_connector, supprimer_action, supprimer_condition, supprimer_selector
  label supprimer_start, supprimer_end, supprimer_link
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%, s$
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_AnnSel%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%, no_cStatus%, no_StatusText%, no_NatureLink%
  dim no_AnnSelLink%, no_DelLink%, no_DelLinkAll%, no_Start_Titre%, no_End_Titre%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
 
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
'  no% = no% + 1 : container no% : no_cStatus% = no% : width no%,width_client(0)-width(no_cElements%) : height no%,40
'    top no%,height_client(0)-40 : left no_cStatus%,width(no_cElements%) : caption no%,"Status"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
'  top no_cStatus%,height_client(0)-40 : width no%,width_client(0)-width(no_cElements%) : caption no_cStatus%,"Status"
'  no% = no% + 1 : alpha no% : parent no%,no_cStatus% : no_StatusText% = no%
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,355
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
 
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
 
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sélectionner"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionner
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSel% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerselection
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer lien" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,left(no%-1) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                   
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLinkAll% = no% : caption no%,"Supprimer tous les liens" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerTousLiens

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_connector
   
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_selector


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Start_Titre% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_End_Titre% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Nature:"
  no% = no% + 1 : combo no% : parent no%,no_AttributsLink% : no_NatureLink% = no% : top no%,top(no%-1) : left no%,80 : width no%,80
    item_add no%,"Polygon" : item_add no%,"Bézier"
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
'  show no_AttributsConnector%
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu% 
  annulerselection()
'  show no_AttributsAction%
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu% 
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
'  show no_AttributsCondition%
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu% 
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
'  show no_AttributsSelection%
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsStart%
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
'  show no_AttributsEnd%
end_sub

sub selectionner()
  show no_info%
  clear no_infotext%
  text no_infotext%,"Sélectionner un élément en cliquant dessus..."
  DoPoints% = 4
  active no_AnnSel%
  active no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_AnnSel%
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  titre$ = trim$(text$(no_Start_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),0)
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  titre$ = trim$(text$(no_End_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),0)
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SetTypeOfFlowChartLink",FC%,FCL%,item_index(no_NatureLink%)-1)
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message "Ce fichier n'existe pas."
    exit_sub
  end_if
 
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if 
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0   
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))   
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
if 1=2
s$ = "final: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if       
 
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5) 
  active no_AnnSelLink%
  active no_DelLink%
  active no_DelLinkAll%
end_sub
 
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLinkAll%
  hide no_info%
end_sub
 
sub supprimerTousLiens()
  res% = dll_call1("DeleteAllLinksFromFlowChart",FC%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub

sub supprimer_connector()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub supprimer_action()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub supprimer_condition()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub supprimer_selector()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelector%
end_sub

sub supprimer_start()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub supprimer_end()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub supprimer_link()
  DoPoints% = 0
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
  hide no_attributsLink%
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Jeu 22 Mar 2018 - 7:27

Bonjour Klaus

J'ai fais un petit test rapide ce matin. les courbes de Béziers c'est super !

J'ai eu un problème pour supprimer un lien. Suspect
explication :

1/ j'ai créé un élément début
2/ j'ai créé un élément action
3/ j'ai positionné l'élément action à la même hauteur à gauche que début
4/ j'ai créé un lien avec 3 points de début vers action
5/ j'ai déplacé un peu les éléments (le lien s’arrondit parfaitement en sélectionnant courbe de Béziers Wink ).
6/ j'ai cliqué sur le bouton pour sel. lien et le lien est bien passé en 'gras'
7/ Mais je n'ai pas réussi à sélectionner le lien pour le passer en jaune comme je fais d'habitude !
   et le programme affiche le message habituel comme si je ne cliqué pas au bon endroit.

Autre chose...
Concernant les boutons sélectionner et annuler pour les éléments,
je pense que tu peux maintenant les supprimer. ils ne servent plus à grand chose...
Et du coup tu pourra déplacer le bouton supprimer lien juste au dessus du bouton supprimer tous les liens

Bonne journée et bon courage pour la suite. drunken
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Jeu 22 Mar 2018 - 9:36

J'ai tenté de reproduire ton problème de sélection de lien Bézier. Oui, si le pointage n'est pas "précis", ça peut arriver. Mais en principe, ça marche. Voici ce que j'ai fait:

1. Création des objets, puis un lien entre les deux:


2. Passer en mode Sélection de lien:


3. Sélectionner ce lien:


4. Transformer e, lien Bézier, passer en mode Sélection de lien et sélectionner ce lien :


5. Jouer sur les attracteurs pour arrondir le lien correctement:


Donc, tu sois, c'est certainement un problème de visée lors de la sélection du lien Bézier.

En ce qui concerne la simplification de l'interface par rapport aux boutons devenus inutiles, je vais regarder  cela. En tout cas,
Citation :
Et du coup tu pourra déplacer le bouton supprimer lien juste au dessus du bouton supprimer tous les liens
ceci est déjà fait dans la version ci-dessus...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Jeu 22 Mar 2018 - 9:52

Voici une version simplifiée de l'interface. J'ai gardé un des boutons de suppression de liens et je l'ai agrandi - il sert à supprimer tous les liens concernant l'élémént actuellement sélectionné, sans toucher aux autres liens. Ceci peut être utile.

Voici le code:
Code:
' FlowChartDesigner.bas
                     
labels()
constantes()
variables()
menu()
cadres()
Objets()

on_user_event UserEvent

end

UserEvent:
  if bin_and(user_event_wparam,hex("FF000000"))=hex("0B000000") : ' ScrollImage
    pos% =  user_event_lparam              : ' positon: yyyyxxxx
    xxp% = bin_and(pos%,hex("0000FFFF"))
    yyp% = pos%/65536
   
    if DoPoints%=5
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEnew%))
      if res%<0 then return
      if FCEnew%=FCE%
        annulerselection()
        return
      else
        DoPoints% = 0 
        annulerSelLien()
      end_if
    end_if
    if DoPoints%=0
      res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
      if res%<0 then return
      annulerSelLien()
      DoPoints% = 4
      active no_SuppLiens%
      hide no_AttributsConnector%
      hide no_AttributsAction%
      hide no_AttributsCondition%
      hide no_AttributsSelection%
      hide no_AttributsStart%
      hide no_AttributsEnd%
    end_if
   
    if DoPoints%>0
      if DoPoints%=1
        NatureOutput% = dll_call5("IdentifyOutputOfFlowChartElement",FC%,xxp%,yyp%,adr(FCEstart%),adr(output%))
        if NatureOutput%<0  : ' c'est la nature de l'élément
          message "Ce n'est pas une sortie valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,output%)
        DoPoints% = 2
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant l'élémént de destination"+chr$(13)+chr$(10)+"ou Annulez..."
        return
      end_if
      if DoPoints%=2
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCEdest%))
        if res%<0
          message "Ce n'est pas un élément valide."+chr$(13)+chr$(10)+"Recommencez ou Annulez..."
          return
        end_if
        DoPoints% = 3
        res% = dll_call2("SelectElementInFlowChart",FC%,FCEdest%)
        res% = dll_call2("ShowRulersInFlowChart",FC%,1)
        show no_info%
        clear no_infotext%
        text no_infotext%,"Cliquez maintenant les points d'étape"+chr$(13)+chr$(10)+"puis Tracez ou Annulez..."
        return
      end_if
      if DoPoints%=3
        ' ici, rectangulariser le tracé
        if npt%=0
          res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xx%),adr(yy%))   
        else
          xx% = xarray%(npt%)
          yy% = yarray%(npt%)
        end_if
        if (npt%=0) and (NatureOutput%<>0)  : ' NatureOutput%=0 => Connector seul
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
        if npt%>0
          if abs(xxp%-xx%)<=DeltaRectangle%
            xxp% = xx%
          else
            if abs(yyp%-yy%)<=DeltaRectangle%
              yyp% = yy%
            else
              npt% =  npt% + 1
              xarray%(0) = npt%
              xarray%(npt%) = xxp%
              yarray%(npt%) = yy%
            end_if
          end_if
        end_if
       
if 1=2       
s$ = "avant: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if       

        ' mémoriser le point
        npt% = npt% + 1
        xarray%(0) = npt%
        xarray%(npt%) = xxp%
        yarray%(npt%) = yyp%
        res% = dll_call3("DrawTemporaryMarkIntoFlowChart",FC%,xxp%,yyp%)
        res% = dll_call5("DrawTemporaryLineIntoFlowChart",FC%,xx%,yy%,xxp%,yyp%)
'        message "Point "+str$(npt%)+": "+str$(xx%)+","+str$(yy%
if 1=2
s$ = "après: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if     

      end_if
      if DoPoints%=4
        res% = dll_call4("IdentifyFlowChartElement",FC%,adr(xxp%),adr(yyp%),adr(FCE%))
        if res%<0
          message "Ce n'est pas un élément valide."
          return
        end_if
'        message "Elément "+nature$(res%)+" identifié"
        hide no_info%
        DoPoints% = 5
        select res%
          case 0
            show no_AttributsConnector%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Connector_X%),handle(no_Connector_Y%),0,0)
            position no_Connector_X%,xxp%
            position no_Connector_Y%,yyp%
          case 1
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsAction%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Action_X%),handle(no_Action_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Action_X%,xxp%
            position no_Action_Y%,yyp%
            position no_Action_Largeur%,wwp%
            position no_Action_Hauteur%,hhp%
            DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
'            text no_action_Couleur%,right$(hex$(ccc%),6)
            text no_Action_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Action_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Action_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 2
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsCondition%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Condition_X%),handle(no_Condition_Y%),handle(no_Action_Largeur%),handle(no_Action_Hauteur%))
            position no_Condition_X%,xxp%
            position no_Condition_Y%,yyp%
            position no_Condition_Largeur%,wwp%
            position no_Condition_Hauteur%,hhp%
            DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
'            text no_Condition_Couleur%,right$(hex$(ccc%),6)
            text no_Condition_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Condition_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Condition_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 3
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsSelection%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Selection_X%),handle(no_Selection_Y%),handle(no_Selection_Largeur%),handle(no_Selection_Hauteur%))
            position no_Selection_X%,xxp%
            position no_Selection_Y%,yyp%
            position no_Selection_Largeur%,wwp%
            position no_Selection_Hauteur%,hhp%
            text no_Selection_Couleur%,right$(hex$(ccc%),6)
            DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
            text no_Selection_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
            clear no_Selection_Contenu%
            if count(no_memo%)>0
              for i%=1 to count(no_memo%)
                item_add no_Selection_Contenu%,item_read$(no_memo%,i%)
              next i%
            end_if
          case 4
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsStart%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_Start_X%),handle(no_Start_Y%),handle(no_Start_Largeur%),handle(no_Start_Hauteur%))
            position no_Start_X%,xxp%
            position no_Start_Y%,yyp%
            position no_Start_Largeur%,wwp%
            position no_Start_Hauteur%,hhp%
            DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
            text no_Start_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
          case 5
            res% = dll_call5("GetFlowChartElementAttributes",FCE%,adr(wwp%),adr(hhp%),adr(ccc%),handle(no_memo%))
            show no_AttributsEnd%
            res% = dll_call5("SetSpinControlsForFlowChart",FC%,handle(no_End_X%),handle(no_End_Y%),handle(no_End_Largeur%),handle(no_End_Hauteur%))
            position no_End_X%,xxp%
            position no_End_Y%,yyp%             
            position no_End_Largeur%,wwp%
            position no_End_Hauteur%,hhp%
            DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
            text no_End_Titre%,item_read$(no_memo%,1)
            item_delete no_memo%,1
        end_select
        res% = dll_call2("SelectElementInFlowChart",FC%,FCE%)
      end_if
      if DoPoints%=6
        res% = dll_call4("IdentifyFlowChartLink",FC%,xxp%,yyp%,adr(FCL%))
        if res%<0
          message "Ce n'est pas un lien valide."
          res% = dll_call2("DrawFlowChart",FC%,1)
          return
        end_if
'        message "Lien "+str$(res%)+" identifié"
       
        res% = dll_call3("SelectLinkInFlowChart",FC%,FCL%,adr(ccc%))
        res% = dll_call2("SelectComboBoxItem",handle(no_NatureLink%),res%+1)
        DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
        res% = dll_call2("DrawFlowChart",FC%,5)
        show no_AttributsLink%
'        text no_Link_Couleur%,right$(hex$(ccc%),6)
      end_if
    end_if
  end_if

  return


sortir:
  terminate

AddConnector:
  AddConnector()
  return

AddAction:
  AddAction()
  return

AddCondition:
  AddCondition()
  return

AddSelector:
  AddSelector()
  return

AddStart:
  AddStart()
  return

AddEnd:
  AddEnd()
  return

valider_connector:
  valider_connector()
  return
 
valider_action:
  valider_action()
  return
 
valider_Condition:
  valider_Condition()
  return
 
supprimerliens:
  supprimerliens()
  return
 
supprimerTousLiens:
  supprimerTousLiens()
  return
 
valider_Selection:
  valider_Selection()
  return

valider_start:
  valider_start()
  return
 
valider_end:
  valider_end()
  return
 
valider_Link:
  valider_Link()
  return
 
nouveauprojet:
  nouveauprojet()
  return

ouvrirprojet:
  ouvrirprojet()
  return
 
enregistrerprojet:
  enregistrerprojet()
  return
 
enregistrersousprojet:
  enregistrersousprojet()
  return
 
lier:
  lier()
  return
 
annulerlier:
  annulerlier()
  return
 
tracer:
  tracer()
  return
 
exporter:
  exporter()
  return

selectionLien:
  selectionLien()
  return
 
annulerSelLien:
  annulerSelLien()
  return
 
SelCouleurAction:
  SelCouleurAction()
  return
 
SelCouleurCondition:
  SelCouleurCondition()
  return
 
SelCouleurSelection:
  SelCouleurSelection()
  return
 
SelCouleurStart:
  SelCouleurStart()
  return
 
SelCouleurEnd:
  SelCouleurEnd()
  return
 
SelCouleurLink:
  SelCouleurLink()
  return 

supprimer_connector:
  supprimer_connector()
  return
 
supprimer_action:
  supprimer_action()
  return
 
supprimer_condition:
  supprimer_condition()
  return
 
supprimer_selector:
  supprimer_selector()
  return
 
supprimer_start:
  supprimer_start()
  return
 
supprimer_end:
  supprimer_end()
  end

supprimer_Link:
  supprimer_Link()
  return
 
 
sub labels()
  label AddConnector, AddAction, AddCondition, AddSelector, AddStart, AddEnd
  label valider_connector, valider_action, valider_Condition, valider_Selection
  label valider_Start, valider_End, valider_Link
  label supprimerliens, UserEvent, sortir
  label selectionLien, annulerSelLien, supprimerTousLiens
  label SelCouleurAction, SelCouleurCondition, SelCouleurSelection
  label SelCouleurStart, SelCouleurEnd, SelCouleurLink
  label nouveauprojet, ouvrirprojet, enregistrerprojet, enregistrersousprojet
  label lier, annulerlier, tracer, exporter
  label supprimer_connector, supprimer_action, supprimer_condition, supprimer_selector
  label supprimer_start, supprimer_end, supprimer_link
end_sub

sub constantes()
  dim KGF$ : KGF$ = "KGF.dll"
  dim M1% : M1% = 0-1
  dim DeltaRectangle% : DeltaRectangle% = 10
  dim LignesDeVisee% : ' nombre de lignes de visée (0, 1 ou 2)
    LignesDeVisee% = 2
  dim nature$(6)
    nature$(0) = "Connector"
    nature$(1) = "Action"
    nature$(2) = "Condition"
    nature$(3) = "Selector"
    nature$(4) = "Start"
    nature$(5) = "End"
end_sub

sub variables()
  dim res%, DoPoints%, pos%, xxp%, yyp%, titre$, wwp%, hhp%, i%, ccc%, output%
  dim xx%, yy%, NatureOutput%, NatureInput%, s$
  dim npt%, xarray%(100),yarray%(100)
  dim no%, no1%, no2%, no_cElements%, no_SuppLiens%, no_memo%, no_open%, no_save%
  dim no_AttributsConnector%, no_AttributsAction%, no_AttributsCondition%
  dim no_AttributsSelection%, no_AttributsStart%, no_AttributsEnd%, no_AttributsLink%
  dim no_Connector_X%, no_Connector_Y%, no_AnnLink%, no_Tracer% , no_Info%, no_infotext%
  dim no_Action_X%, no_Action_Y%, no_Action_Titre%, no_action_Couleur%, no_ActionColor%
  dim no_Action_Largeur%, no_Action_Hauteur%, no_Action_Contenu%, no_export%
  dim no_Condition_X%, no_Condition_Y%, no_Condition_Titre%, no_condition_Couleur%
  dim no_Condition_Largeur%, no_Condition_Hauteur%, no_Condition_Contenu%, no_ConditionColor%
  dim no_Selection_X%, no_Selection_Y%, no_Selection_Titre%, no_selection_Couleur%, no_SelectionColor%
  dim no_Selection_Largeur%, no_Selection_Hauteur%, no_Selection_Contenu%
  dim no_Start_X%, no_Start_Y%, no_Start_Largeur%, no_Start_Hauteur%, no_start_Couleur%, no_startcolor%
  dim no_End_X%, no_End_Y%, no_End_Largeur%, no_End_Hauteur%, no_end_Couleur%, no_EndColor%
  dim no_Link_Couleur%, no_LinkColor%, no_cStatus%, no_StatusText%, no_NatureLink%
  dim no_AnnSelLink%, no_DelLink%, no_DelLinkAll%, no_Start_Titre%, no_End_Titre%
  dim FC%, FCE%, FCEstart%, FCEdest%, FCL%, FCEnew%
  dim projet$
end_sub

sub menu()
  no% = no% + 1 : main_menu no% : no1% = no%
    no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichier"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,nouveauprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,ouvrirprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,enregistrerprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,enregistrersousprojet
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter..." : on_click no%,exporter
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
      no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,sortir
end_sub

sub cadres()
  dim_local hnd%
  dll_on KGF$
  no% = no% + 1 : form no% : hide no% : no_info% = no% : width no%,400 : height no%,200
  no% = no% + 1 : memo no% : no_infotext% = no% : parent no%,no_info% : full_space no% : bar_both no% : font_size no%,12
 
  no% = no% + 1 : container no% : no_cElements% = no% : width no%,200 : caption no%,"Eléments"
'  no% = no% + 1 : container no% : no_cStatus% = no% : width no%,width_client(0)-width(no_cElements%) : height no%,40
'    top no%,height_client(0)-40 : left no_cStatus%,width(no_cElements%) : caption no%,"Status"
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
'  top no_cStatus%,height_client(0)-40 : width no%,width_client(0)-width(no_cElements%) : caption no_cStatus%,"Status"
'  no% = no% + 1 : alpha no% : parent no%,no_cStatus% : no_StatusText% = no%
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
  height no_cElements%,355
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  top no_info%,0 : left no_info%,width_client(0)-width(no_info%)-width(no_cElements%)
 
  hnd% = dll_call1("GetHandleOfFlowChart",FC%)
  res% = dll_call3("SetFormParent",handle(no_info%),hnd%,0)
 
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Début"
    top no%,15 : left no%,10 : on_click no%,AddStart
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Connecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddConnector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Action"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddAction
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Condition"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddCondition
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Selecteur"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddSelector
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Fin"
    top no%,top(no%-1)+height(no%-1) : left no%,10 : on_click no%,AddEnd

  no% = no% + 1 : button no% : parent no%,no_cElements% : no_SuppLiens% = no% : caption no%,"Supprimer liens de l'élément" : inactive no%
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : width no%,2*width(no%) : on_click no%,supprimerliens

  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Lier"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,lier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerlier
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_Tracer% = no% : caption no%,"Tracer" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,tracer
                                                                   
  no% = no% + 1 : button no% : parent no%,no_cElements% : caption no%,"Sel. Lien"
    top no%,top(no%-1)+height(no%-1)+10 : left no%,10 : on_click no%,selectionLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_AnnSelLink% = no% : caption no%,"Annuler" : inactive no%
    top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1) : on_click no%,annulerSelLien
  no% = no% + 1 : button no% : parent no%,no_cElements% : no_DelLinkAll% = no% : caption no%,"Supprimer tous les liens" : inactive no%
    top no%,top(no%-1)+height(no%-1) : left no%,10 : width no%,width(no%-2)+width(no%-1) : on_click no%,supprimerTousLiens

    ' attributs Connector
  no% = no% + 1 : container no% : no_AttributsConnector% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Connector" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Connector_X% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsConnector% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Connector_Y% = no% : parent no%,no_AttributsConnector% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_connector
  no% = no% + 1 : button no% : parent no%,no_AttributsConnector% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_connector
   
  ' attributs Action
  no% = no% + 1 : container no% : no_AttributsAction% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Action" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Action_X% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Action_Y% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Action_Largeur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Action_Hauteur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Action_Couleur% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ActionColor% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurAction
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Action_Titre% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Action_Contenu% = no% : parent no%,no_AttributsAction% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsAction%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_action
  no% = no% + 1 : button no% : parent no%,no_AttributsAction% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_action

  ' attributs Condition
  no% = no% + 1 : container no% : no_AttributsCondition% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Condition" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Condition_X% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Condition_Y% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Condition_Largeur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Condition_Hauteur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Condition_Couleur% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_ConditionColor% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurCondition
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Condition_Titre% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Condition_Contenu% = no% : parent no%,no_AttributsCondition% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsCondition%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Condition
  no% = no% + 1 : button no% : parent no%,no_AttributsCondition% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_condition

  ' attributs Selection
  no% = no% + 1 : container no% : no_AttributsSelection% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Selection" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Selection_X% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Selection_Y% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Selection_Largeur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Selection_Hauteur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Selection_Couleur% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_SelectionColor% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurSelection
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Selection_Titre% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : alpha no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Contenu:"
  no% = no% + 1 : memo no% : no_Selection_Contenu% = no% : parent no%,no_AttributsSelection% : top no%,top(no%-1)+15 : left no%,10
    width no%,180 : bar_both no%
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsSelection%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Selection
  no% = no% + 1 : button no% : parent no%,no_AttributsSelection% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_selector


  ' attributs Start
  no% = no% + 1 : container no% : no_AttributsStart% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Start" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_Start_X% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_Start_Y% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_Start_Largeur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_Start_Hauteur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Start_Couleur% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_StartColor% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurStart
  no% = no% + 1 : alpha no% : parent no%,no_AttributsStart% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_Start_Titre% = no% : parent no%,no_AttributsStart% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsStart%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Start
  no% = no% + 1 : button no% : parent no%,no_AttributsStart% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_start

  ' attributs End
  no% = no% + 1 : container no% : no_AttributsEnd% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs End" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,20 : left no%,10
    caption no%,"Position X:"
  no% = no% + 1 : spin no% : no_End_X% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Position Y:"
  no% = no% + 1 : spin no% : no_End_Y% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,4000 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Largeur:"
  no% = no% + 1 : spin no% : no_End_Largeur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Hauteur:"
  no% = no% + 1 : spin no% : no_End_Hauteur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    min no%,0 : max no%,500 : position no%,0 : width no%,50
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_End_Couleur% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_EndColor% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurEnd
  no% = no% + 1 : alpha no% : parent no%,no_AttributsEnd% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Titre:"
  no% = no% + 1 : edit no% : no_End_Titre% = no% : parent no%,no_AttributsEnd% : top no%,top(no%-1) : left no%,80
    width no%,110
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsEnd%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_End
  no% = no% + 1 : button no% : parent no%,no_AttributsEnd% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_End

' Attributs Link
  no% = no% + 1 : container no% : no_AttributsLink% = no% : top no%,height(no_cElements%) : width no%,width(no_cElements%)
    height no%,300 : caption no%,"Attributs Lien" : hide no%
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,20 : left no%,10
    caption no%,"Couleur RGB:"
  no% = no% + 1 : edit no% : no_Link_Couleur% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,80
    width no%,50
  no% = no% + 1 : panel no%  : no_LinkColor% = no% : parent no%,no_AttributsLink% : top no%,top(no%-1) : left no%,left(no%-1)+width(no%-1)
    width no%,25 : height no%,20 : color no%,0,0,0 : on_click no%,SelCouleurLink
  no% = no% + 1 : alpha no% : parent no%,no_AttributsLink% : top no%,top(no%-1)+25 : left no%,10
    caption no%,"Nature:"
  no% = no% + 1 : combo no% : parent no%,no_AttributsLink% : no_NatureLink% = no% : top no%,top(no%-1) : left no%,80 : width no%,80
    item_add no%,"Polygon" : item_add no%,"Bézier"
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsLink%)-30 : left no%,20
    caption no%,"Valider" : on_click no%,valider_Link
  no% = no% + 1 : button no% : parent no%,no_AttributsLink% : top no%,height(no_AttributsConnector%)-30 : left no%,left(no%-1)+Width(no%-1)
    caption no%,"Supprimer" : on_click no%,supprimer_Link

end_sub

sub Objets()
  no% = no% + 1 : memo no% : no_memo% = no% : hide no% : bar_both no%
  no% = no% + 1 : open_dialog no% : no_open% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_save% = no% : filter no%,"Projet FlowChart (*.FCproj)|*.FCproj"
  no% = no% + 1 : save_dialog no% : no_export% = no% : filter no%,"Images (BMP,JPG,GIF,PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
end_sub

sub AddConnector()
  FCE% = dll_call4("AddElementToFlowChart",FC%,0,0,0)
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,20,20)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Connector_X%,0
  position no_Connector_Y%,0
  annulerselection()
end_sub

sub AddAction()
  dim_local titre$
  titre$ = "Action"
  FCE% = dll_call4("AddElementToFlowChart",FC%,1,hex("FFFF00"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,200)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Action_X%,0
  position no_Action_Y%,0
  position no_Action_Largeur%,300
  position no_Action_Hauteur%,200
  text no_action_Couleur%,"FFFF00"
  text no_Action_Titre%,titre$
  clear no_Action_Contenu% 
  annulerselection()
end_sub

sub AddCondition()
  dim_local titre$
  titre$ = "Condition ?"
  FCE% = dll_call4("AddElementToFlowChart",FC%,2,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"."
  item_add no_memo%,"Oui"
  item_add no_memo%,"Non"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Condition_X%,0
  position no_Condition_Y%,0
  position no_Condition_Largeur%,300
  position no_Condition_Hauteur%,100
  text no_Condition_Couleur%,"0000FF"
  text no_Condition_Titre%,titre$
  clear no_Condition_Contenu% 
  item_add no_Condition_Contenu%,"Oui"
  item_add no_Condition_Contenu%,"."
  item_add no_Condition_Contenu%,"Non"
  annulerselection()
end_sub

sub AddSelector()
  dim_local titre$
  titre$ = "Sélection"
  FCE% = dll_call4("AddElementToFlowChart",FC%,3,hex("0000FF"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,300,100)
  clear no_memo%
  item_add no_memo%,"1"
  item_add no_memo%,"2"
  item_add no_memo%,"3"
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,0,handle(no_memo%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Selection_X%,0
  position no_Selection_Y%,0
  position no_Selection_Largeur%,300
  position no_Selection_Hauteur%,100
  text no_Selection_Couleur%,"0000FF"
  text no_Selection_Titre%,titre$
  clear no_Selection_Contenu% 
  item_add no_Selection_Contenu%,"1"
  item_add no_Selection_Contenu%,"2"
  item_add no_Selection_Contenu%,"3"
  annulerselection()
end_sub

sub AddStart()
  dim_local titre$
  titre$ = "Début"
  FCE% = dll_call4("AddElementToFlowChart",FC%,4,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_Start_X%,0
  position no_Start_Y%,0
  position no_Start_Largeur%,100
  position no_Start_Hauteur%,100
  text no_Start_Couleur%,"F0F0F0"
  annulerselection()
end_sub

sub AddEnd()
  dim_local titre$
  titre$ = "Arrêt"
  FCE% = dll_call4("AddElementToFlowChart",FC%,5,hex("F0F0F0"),adr(titre$))
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,0,0,100,100)
  res% = dll_call2("DrawFlowChart",FC%,1)
  position no_End_X%,0
  position no_End_Y%,0
  position no_End_Largeur%,100
  position no_End_Hauteur%,100
  text no_End_Couleur%,"F0F0F0"
  annulerselection()
end_sub

sub annulerselection()
  DoPoints% = 0
  inactive no_SuppLiens%
  hide no_AttributsConnector%
  hide no_AttributsAction%
  hide no_AttributsCondition%
  hide no_AttributsSelection%
  hide no_AttributsStart%
  hide no_AttributsEnd%
  hide no_AttributsLink%
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  hide no_info%
end_sub

sub supprimerliens()
  res% = dll_call2("RemoveAllLinksFromFlowChartElement",FC%,FCE%)
end_sub

sub valider_connector()
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Connector_X%),position(no_Connector_Y%),M1%,M1%)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub valider_action()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Action_X%),position(no_Action_Y%),position(no_Action_Largeur%),position(no_Action_Hauteur%))
  titre$ = trim$(text$(no_Action_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Action_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Action_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub valider_Condition()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Condition_X%),position(no_Condition_Y%),position(no_Condition_Largeur%),position(no_Condition_Hauteur%))
  titre$ = trim$(text$(no_Condition_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Condition_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Condition_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub valider_Selection()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Selection_X%),position(no_Selection_Y%),position(no_Selection_Largeur%),position(no_Selection_Hauteur%))
  titre$ = trim$(text$(no_Selection_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),handle(no_Selection_Contenu%))
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Selection_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub valider_Start()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_Start_X%),position(no_Start_Y%),position(no_Start_Largeur%),position(no_Start_Hauteur%))
  titre$ = trim$(text$(no_Start_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),0)
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_Start_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub valider_End()
  dim_local titre$
  res% = dll_call6("LocateElementOfFlowChart",FC%,FCE%,position(no_End_X%),position(no_End_Y%),position(no_End_Largeur%),position(no_End_Hauteur%))
  titre$ = trim$(text$(no_End_Titre%))
  res% = dll_call4("TextForElementOfFlowChart",FC%,FCE%,adr(titre$),0)
  res% = dll_call3("ColorForElementOfFlowChart",FC%,FCE%,hex(text$(no_End_couleur%)))
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub valider_Link()
  res% = dll_call3("ColorForLinkOfFlowChart",FC%,FCL%,hex(text$(no_Link_couleur%)))
  res% = dll_call3("SetTypeOfFlowChartLink",FC%,FCL%,item_index(no_NatureLink%)-1)
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,5)
  hide no_AttributsLink%
end_sub

sub nouveauprojet()
  FC% = dll_call1("DeleteFlowChart",FC%)
  FC% = dll_call6("CreateFlowChart",handle(0),0,0,0,0,LignesDeVisee%)
  full_space 0
  res% = dll_call5("LocateFlowChart",FC%,width(no_cElements%),0,width_client(0)-width(no_cElements%),height_client(0))
'  height no_cElements%,300
  projet$ = ""
end_sub

sub ouvrirprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=0
    message "Ce fichier n'existe pas."
    exit_sub
  end_if
 
  nouveauprojet()
  res% = dll_call2("LoadFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en chargement"
  else
    message "Le projet a été chargé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if 
end_sub

sub enregistrerprojet()
  dim_local prj$
  if projet$=""
    enregistrersousprojet()
    exit_sub
  end_if
  prj$ = projet$
  if file_exists(prj$)=1 then file_delete prj$
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub enregistrersousprojet()
  dim_local prj$
  prj$ = file_name$(no_save%)
  if prj$="_" then exit_sub
  if lower$(file_extract_extension$(prj$))<>".fcproj"
    message "Extension erronnée (*.FCproj)"
    exit_sub
  end_if
  if file_exists(prj$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then exit_sub
    file_delete prj$
  end_if
  res% = dll_call2("SaveFlowChartProject",FC%,adr(prj$))
  if res%<0
    message "Erreur en sauvegarde"
  else
    message "Le ficher a été créé:"+chr$(13)+chr$(10)+prj$
    projet$ = prj$
  end_if
end_sub

sub lier()
  annulerSelLien()
  AnnulerSelection()
  DoPoints% = 1
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur une sortie..."
  active no_AnnLink%
  active no_Tracer%
end_sub

sub annulerlier()
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub tracer()
  dim_local do1%
  ' rectangulariser le dernier segment
  NatureInput% = dll_call3("GetInputConnectorOfFlowChartElement",FCEdest%,adr(xx%),adr(yy%))
  if NatureInput%<>0   
    if npt%=0
      res% = dll_call4("GetOutputConnectorOfFlowChartElement",FCEstart%,output%,adr(xxp%),adr(yyp%))   
    else
      xxp% = xArray%(npt%)
      yyp% = yArray%(npt%)
    end_if

    do1% = 0
    if abs(xxp%-xx%)<=DeltaRectangle%
      xxp% = xx%
      do1% = 1
    else
      if abs(yyp%-yy%)<=DeltaRectangle%
        yyp% = yy%
        do1% = 1
      end_if
    end_if
    if do1%=1
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if yyp%>(yy%-DeltaRectangle%)
      yyp% = yy% - DeltaRectangle%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
    if xxp%<>xx%
      xxp% = xx%
      npt% =  npt% + 1
      xarray%(0) = npt%
      xarray%(npt%) = xxp%
      yarray%(npt%) = yyp%
    end_if
  end_if
if 1=2
s$ = "final: npt%="+str$(npt%)
for i%=1 to npt%
  s$ = s$ + chr$(13)+chr$(10)+str$(xarray%(i%))+","+str$(yarray%(i%))
next i%
message s$
end_if       
 
  res% = dll_call6("ConnectElementsOfFlowChart",FC%,FCEstart%,output%,FCEdest%,adr(xArray%),adr(yArray%))
  if res%=0 then message "Erreur en créant la connexion"
  res% = dll_call2("ShowRulersInFlowChart",FC%,0)
  res% = dll_call2("SelectElementInFlowChart",FC%,0)
  res% = dll_call3("SelectOutputConnectorOfFlowChartElement",FC%,FCEstart%,0)
'  res% = dll_call2("DrawFlowChart",FC%,1)
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  inactive no_AnnLink%
  inactive no_Tracer%
  hide no_info%
end_sub

sub exporter()
  dim_local f$
  f$ = file_name$(no_export%)
  if f$="_" then exit_sub
  if instr(".bmp.jpg.gif.png",lower$(file_extract_extension$(f$)))=0
    message "Erreur d'extension"
    exit_sub
  end_if
  if file_exists(f$)=1
    if message_confirmation_yes_no("Cette image existe déjà? Remplacer ?")<>1 then exit_sub
  end_if
  res% = dll_call1("CopyFlowChartToClipboard",FC%)
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  message "L'image est enregistrée dans:"+chr$(13)+chr$(10)+f$
end_sub

sub selectionLien()
  AnnulerSelection()
  DoPoints% = 6
  npt% = 0
  show no_info%
  clear no_infotext%
  text no_infotext%,"Cliquer sur un lien..."
  res% = dll_call2("DrawFlowChart",FC%,5) 
  active no_AnnSelLink%
  active no_DelLink%
  active no_DelLinkAll%
end_sub
 
sub annulerSelLien()
  DoPoints% = 0
  npt% = 0
  xarray%(0) = 0
  res% = dll_call3("SelectLinkInFlowChart",FC%,0,adr(ccc%))
  res% = dll_call2("DrawFlowChart",FC%,1)
  inactive no_AnnSelLink%
  inactive no_DelLinkAll%
  hide no_info%
end_sub
 
sub supprimerTousLiens()
  res% = dll_call1("DeleteAllLinksFromFlowChart",FC%)
  hide no_info%
end_sub

sub SelCouleurAction()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Action_Couleur%,no_ActionColor%,ccc%)
end_sub

sub SelCouleurCondition()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Condition_Couleur%,no_ConditionColor%,ccc%)
end_sub

sub SelCouleurSelection()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Selection_Couleur%,no_SelectionColor%,ccc%)
end_sub

sub SelCouleurStart()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Start_Couleur%,no_StartColor%,ccc%)
end_sub

sub SelCouleurEnd()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_End_Couleur%,no_EndColor%,ccc%)
end_sub

sub SelCouleurLink()
  dim_local R%, G%, B%
  res% = dll_call6("ColorSelector",handle_application,0,adr(R%),adr(G%),adr(B%),adr(ccc%))
  if res%=0 then DecoderRGB(no_Link_Couleur%,no_LinkColor%,ccc%)
end_sub

sub DecoderRGB(no_Text%,no_Picture%,RGB%)
  dim_local R%, G%, B%, n%
  text no_text%,hex$(RGB%)
  R% = bin_and(RGB%,hex("FF"))
  G% = bin_and(RGB%/256,hex("FF"))
  B% = bin_and(RGB%,hex("FF0000"))/65536
  color no_Picture%,R%,G%,B%
end_sub

sub supprimer_connector()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsConnector%
end_sub

sub supprimer_action()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsAction%
end_sub

sub supprimer_condition()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsCondition%
end_sub

sub supprimer_selector()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsSelection%
end_sub

sub supprimer_start()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsStart%
end_sub

sub supprimer_end()
  res% = dll_call2("RemoveElementFromFlowChart",FC%,FCE%)
  res% = dll_call2("DrawFlowChart",FC%,1)
  hide no_AttributsEnd%
end_sub

sub supprimer_link()
  DoPoints% = 0
  res% = dll_call1("DeleteLinkFromFlowChart",FCL%)
  hide no_info%
  hide no_attributsLink%
end_sub


Dernière édition par Klaus le Ven 23 Mar 2018 - 11:00, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
silverman

avatar

Nombre de messages : 659
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Jeu 22 Mar 2018 - 12:03

Si tu veux que le tracé passe par les attracteurs, tu peux utiliser l'algoritme du 'catmull-rom'.
Un code rapidement traduit d'un autre langage (darkbasic classic):
Code:
' InitLibraryStart
   Dim Errorfnc$(10)
   Dim Resetchecking(3)
       Resetchecking(0)=1
   Dim MaxMatrix(0)
      ' 36 matrix can be created
       MaxMatrix(0)=36
   Dim MaxVector(0)
      ' 265 vectors can be created
       MaxVector(0)=265
   ' add 10 internals vectors/matrix
   dim MaxMaxVector,MaxMaxMatrix
   MaxMaxVector=MaxVector(0)+10
   MaxMaxMatrix=MaxMatrix(0)+10
   Dim Matrix4(MaxMaxMatrix, 19)
   Dim Vector4(MaxMaxVector, 6)
   Dim v257,v258,v259,v265,r
   Dim xa,ya,xb,yb,xc,yc,xd,yd
   Dim cx,cy,dx,dy,fx,fy
' InitLibraryEnd


' Catmull-Rom Spline:
'  The points that define a spline are known as "Control Points".
'  One of the features of the Catmull-Rom spline is that the specified curve will pass through all of the control
'  points - this is not true of all types of splines.
'
'  To calculate a point on the curve, two points on either side of the desired point are required, like this:
'
'              P
'              |
'              |
'              |
'   A-----B---------C-------D
'      t=0.0     t=1.0
'
'  The point is specified by a value t that signifies the portion of the distance between the two nearest
'  control points.
'  Given the control points "VectorA", "VectorB", "VectorC", and "VectorD", and the value t "Value#", the
'  location of the point P can be calculated in "VectorResult".


'  CatmullRomVector2(VectorResult, VectorA, VectorB, VectorC, VectorD, Value#)
'
' VectorResult : vector containing the coordinates of the point reached
' VectorA : control point A
' VectorB : control point B
' VectorC : control point C
' VectorD : control point D
' Value# : portion of the distance between(0.0 <= value# <= 1.0) the two nearest control points


color 0,0,0,0
font_bold 0
font_color 0,255,255,255

' make vectors
dim vecA,vecB,vecC,vecD,vecE,vecF,vecG,vecResult,null

vecA=1
vecB=2
vecC=3
vecD=4
vecE=5
vecF=6
vecG=7
vecResult=8
null=makevector2(vecA)
null=makevector2(vecB)
null=makevector2(vecC)
null=makevector2(vecD)
null=makevector2(vecE)
null=makevector2(vecF)
null=makevector2(vecG)
null=makevector2(vecResult)


' set coordinates
setvector2(vecA, -22.0,  -5.0)
setvector2(vecB, -18.0,  0.0)
setvector2(vecC, -12.0,  6.0)
setvector2(vecD,   2.0, 14.0)
setvector2(vecE,  10.0,  4.0)
setvector2(vecF,  12.0,  0.0)
setvector2(vecG,  16.0,  0.0)


' calcule the CatmullRomVector2
dim Value,vector

' red portion
2d_pen_color 255,0,0
Value=-0.05
repeat
   Value=Value+0.05
   CatmullRomVector2(vecResult, vecA, vecB, vecC, vecD, Value)
   ' view result
   tracepoint(vecResult,"")
   if scancode=27 then terminate
until Value>=1.0

' green portion
2d_pen_color 0,255,0
Value=-0.05
repeat
   Value=Value+0.05
   CatmullRomVector2(vecResult, vecB, vecC, vecD, vecE, Value)
   ' view result
   tracepoint(vecResult,"")
   if scancode=27 then terminate
until Value>=1.0

' blue portion
2d_pen_color 0,0,255
Value=-0.05
repeat
   Value=Value+0.05
   CatmullRomVector2(vecResult, vecC, vecD, vecE, vecF, Value)
   ' view result
   tracepoint(vecResult,"")
   if scancode=27 then terminate
until Value>=1.0

' yellow portion
2d_pen_color 255,255,0
Value=-0.05
repeat
   Value=Value+0.05
   CatmullRomVector2(vecResult, vecD, vecE, vecF, vecG, Value)
   ' view result
   tracepoint(vecResult,"")
   if scancode=27 then terminate
until Value>=1.0

' display coordinates vectors
2d_pen_color 255,255,255
for vector = vecA to vecG
   tracepoint(vector,chr$(64+vector))
next vector


' trace line between vecB to vecF
tracesegment(vecB,vecC)
tracesegment(vecC,vecD)
tracesegment(vecD,vecE)
tracesegment(vecE,vecF)




END
fnc SetVector2(Vector, X, Y)
   Vector4(Vector, 1)=X
   Vector4(Vector, 2)=Y
end_fnc

fnc MakeVector2(Vector)
 dim_local I
   For I=1 To 4
      Vector4(Vector, I)=0.0
   Next I
   result 0
end_fnc

fnc CatmullRomVector2(VectorResult, VectorA, VectorB, VectorC, VectorD, Value)
   v257=MaxVector(0)+2
   v258=MaxVector(0)+3
   v259=MaxVector(0)+4
   v265=MaxVector(0)+10
   r=MakeVector2(v257)
   r=MakeVector2(v258)
   r=MakeVector2(v259)
   r=MakeVector2(v265)
   XA=XVector2(VectorA)
   YA=YVector2(VectorA)
   XB=XVector2(VectorB)
   YB=YVector2(VectorB)
   XC=XVector2(VectorC)
   YC=YVector2(VectorC)
   XD=XVector2(VectorD)
   YD=YVector2(VectorD)
   SetVector2(v257, XA, YA)
   SetVector2(v258, XB, YB)
   SetVector2(v259, XC, YC)
   SetVector2(v265, XD, YD)
   MultiplyVector2(v257, (-1.0*power(Value,3))+( 2.0*power(Value,2))-Value)
   MultiplyVector2(v258, ( 3.0*power(Value,3))+(-5.0*power(Value,2))+2.0)
   MultiplyVector2(v259, (-3.0*power(Value,3))+( 4.0*power(Value,2))+Value)
   MultiplyVector2(v265, (power(Value,3))-(power(Value,2)))
   AddVector2(VectorResult, v257, v258)
   AddVector2(VectorResult, VectorResult, v259)
   AddVector2(VectorResult, VectorResult, v265)
   DivideVector2(VectorResult, 2.0)
end_fnc

fnc XVector2(Vector)
   Result Vector4(Vector, 1)
end_fnc


fnc YVector2(Vector)
   Result Vector4(Vector, 2)
end_fnc

fnc MultiplyVector2(VectorResult, Value)
   Vector4(VectorResult, 1)=Vector4(VectorResult, 1)*Value
   Vector4(VectorResult, 2)=Vector4(VectorResult, 2)*Value
end_fnc

fnc AddVector2(VectorResult, VectorA, VectorB)
   Vector4(VectorResult, 1)=Vector4(VectorA, 1)+Vector4(VectorB, 1)
   Vector4(VectorResult, 2)=Vector4(VectorA, 2)+Vector4(VectorB, 2)
end_fnc

fnc DivideVector2(VectorResult, Value)
   Vector4(VectorResult, 1)=Vector4(VectorResult, 1)*(power(Value,0-1))
   Vector4(VectorResult, 2)=Vector4(VectorResult, 2)*(power(Value,0-1))
end_fnc



' fonction pour la démo
fnc tracesegment(vectorA,vectorB)
   cx=width(0)/2
   cy=height(0)/2
   dx=cx+(xvector2(vectorA)*10)
   dy=cy-(yvector2(vectorA)*10)
   fx=cx+(xvector2(vectorB)*10)
   fy=cy-(yvector2(vectorB)*10)
   2d_line dx,dy,fx,fy
end_fnc

fnc tracepoint(vector,t$)
   cx=width(0)/2
   cy=height(0)/2
   fx=cx+(xvector2(vector)*10)
   fy=cy-(yvector2(vector)*10)
   2d_circle fx,fy,2
   print_locate fx+2,fy+2 : print t$
end_fnc
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Jeu 22 Mar 2018 - 12:13

Merci, Silverman. J'avais trouvé cet algorithme, et il y en a d'autres. Le gros problème, c'est que tous ces algorithmes génèrent la courbe point par point, et donc passent des 4, 8 ou 10 points d'itinéraire pointés à plusieurs centaines, voir plus. C'est ce que je veux éviter.

J'utilise une API Windows (rendue accessible en Delphi) pour générer une courbe Bézier directement dans le canvas d'un objet. Je ne mémorise que les attracteurs, le reste est fait par Windows. Les seuls méthodes de traçade de lignes directement accessible par API sont:
- segments de lignes droites ou polygone ouvert
- rectangle (fermé)
- ellipse (fermée !)
- courbe Bézier, transformant deux points sur trois en attracteurs, le trosième restant un point d'itinéraire

C'est cette dernière méthode que j'ai choisie.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   Ven 23 Mar 2018 - 18:42

Nouvelle version:

Maintenant, chaque élément a un nom propre. Par défaut, c'est le nom de la nature de l'élément, suivi du numéro d'ordre. Par exemple, Action1, Action2, Selector1, etc. Ce nom est présenté dans les propriétés de l'élément lors de la sélection, et il peut être remplacé par n'importe quelle chaîne de caractères. Il n'y a pas de contrôle de noms doubles.

Dans le premier cadre des touches fonctions, il y a maintenant une combo donnant les noms de tous les éléments existants. Un clic sur un de ces noms sélectionne l'élément exactement comme si l'on avait cliqué sur l'élément dans l'organigramme. Et si l'organigramme est plus grand que la fenêtre d'affichage et l'élément sélectionné n'est pas ou seulement partiellement visible, la fenêtre de visualisation sera automatiquement déplacée de sorte que l'élément choisi sera entièrement visible avec une marge minimale de 50 pixels autour.

Le programme est maintenant trop grand pour pouvoir être posté ici. J'ai donc créé un dossier FlowChartDesigner dans mon WebDav dans lequel je place KGF.dll et FlowChartDesigner.bas.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Un essai de construction d'organigramme par Panoramic   

Revenir en haut Aller en bas
 
Un essai de construction d'organigramme par Panoramic
Revenir en haut 
Page 5 sur 7Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant
 Sujets similaires
-
» Première construction diapo
» EDI réalisé entièrement en Panoramic
» EDI réalisé entièrement en Panoramic
» pas un panoramic mais utilitaires delphi.
» Programmes Panoramic en ligne de commande

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: