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
» Panoramic et ses curiosités
par Jean Claude Aujourd'hui à 8:48 pm

» Synedit Parameters
par Jean Claude Aujourd'hui à 8:15 pm

» Utilitaire de suppression de fichiers
par Jean Claude Aujourd'hui à 8:11 pm

» Code à vérifier SVP (Oups ! résolu)
par Jean Claude Hier à 8:16 pm

» Compilateur FBPano
par jean_debord Hier à 8:56 am

» Bienvenue à Virtualalan !
par UltraVox Hier à 8:18 am

» Concours de Morpions
par jjn4 Mer 21 Juin 2017, 11:04 pm

» ShortName$(F) [Cloturé]
par papydall Mer 21 Juin 2017, 3:19 pm

» Remplacer espace par tiret dans noms des dossiers / fichiers
par papydall Mer 21 Juin 2017, 2:27 pm

» Menu personalisé avec icones et menu contextuel
par Laurent (Minibug) Mer 21 Juin 2017, 11:44 am

» La liste des choses à faire ...
par Jack Mar 20 Juin 2017, 9:49 pm

» Quoi de neuf à propos de Goric 3D ? (@Jack)
par UltraVox Mar 20 Juin 2017, 8:06 pm

» Nom court et anti fenetre dos
par silverman Mar 20 Juin 2017, 5:31 pm

» Ludothèque Panoramic
par jjn4 Mar 20 Juin 2017, 5:09 pm

» Proposition à la communauté
par Yannick Mar 20 Juin 2017, 2:02 pm

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2017
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
2627282930  
CalendrierCalendrier

Partagez | 
 

 Simulation d'un objet TreeView

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Klaus

avatar

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

MessageSujet: Simulation d'un objet TreeView   Mer 05 Déc 2012, 1:41 am

Je suis en train de réaliser un objet TreeView en Panoramic pur, sans recours à une DLL.

Pour le moment, je peux:
- créer un objet TreeView (prenant deux objets Panoramic)
- créer la racine
- ajouter une ligne "enfant" en spécifiant l'indexe de la ligne d'attachement

D'autres fonctions suivront. En création, l'arborescence est dépliée. Les noeuds ayant des lignes enfant portent le préfixe [-] si le noeud est déplié, et [+] si le noeud est plié. Un clic sur une ligne la sélectionne. Si l'on clique sur une marque [-] ou [+], le programme reconnaît l'action demandée et affiche ce qu'il y a à faire (replier ou déplier), mais cette action reste encore à implémenter. C'est en cours.

Donc, voici une première maquette:
Code:
' treeview.bas

label click

dim x%, n%, a%, b%, s$, i%, n1%, flag%, a1$, a2$, n2%, n3%, s1$
dim ldet%, nsect%, lorg%, sind%, nindex%, niveau1%, niveau2%, niveau3%
dim chk%      : chk% = 0
dim montrer%  : montrer% = 0

width 0,800
CreateTreeViewObject(1,10,10,300,300)
on_click 1,click
CreateTreeViewRoot(TVO,"Racine")
niveau1% = 1

AddTreeViewChildByIndex(TVO,niveau1%,"aaaa")
niveau2% = AddTreeViewChildByIndex

AddTreeViewChildByIndex(TVO,niveau2%,"a1111111111")
AddTreeViewChildByIndex(TVO,niveau2%,"a2222222222")
AddTreeViewChildByIndex(TVO,niveau1%,"bbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"cccc")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"22222222")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"2aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"2bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau2%,"33333333")
AddTreeViewChildByIndex(TVO,niveau2%,"44444444")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"4aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"4bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"dddd")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"d11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"d22222222")


end

' positionnement des [+]
' niveau 1:  5...22 ==> 17
' niveau 2: 37...54 ==> 17
' niveau 3: 69...86 ==> 17
' niveau n:  a...b  n=int((x-5+32)/32)  a = (n-1)*32+5  b=a+17
click:
  x% = mouse_x_left_down(1)
  n% = int((x%-5+32)/32)
  a% = (n%-1)*32 + 5
  b% = a% + 16
  s$ = item_index$(1)
  CalculateLineLevel(s$)
  CalculateTreeViewLevelVector(item_index(1))
  n1% = TVO_levels%(0)
  s$ = item_index$(1)
' message "click: ind="+str$(item_index(1))+"  x="+str$(x%)+"  a="+str$(a%)+"  b="+str$(b%)+"  n1="+str$(n1%)+"  s$="+s$
  flag% = 0
  if n%=n1%
    if mid$(s$,(n%-1)*4+2,1)="+" then flag% = 1
    if mid$(s$,(n%-1)*4+2,1)="-" then flag% = 2
  end_if
 
'  dump("0")
  select flag%
    ' on a sélectionné une ligne
    case 0: message "Ligne "+str$(item_index(1))+" niveau "+str$(n%)
    ' on veut déplier une ligne ayant des lignes enfant
    case 1: message "déplier ligne "+str$(item_index(1))+" niveau "+str$(n%)
    ' on veut replier une ligne pour escamoter ses enfants
    case 2: message "replier ligne "+str$(item_index(1))+" niveau "+str$(n%)
  end_select
 
  return

  ' determiner le niveau d'une ligne dans la section
sub CalculateLineLevel(s$)
  dim_local i%
  i% = 1
  while mid$(s$,i%,1)=" "
    i% = i% + 1
  end_while
  if mid$(s$,i%,1)<>"[" then i% = i% - 4
  i% = i% - 1
  n1% = i%/4 + 1
end_sub

' déterminer le vecteur des niveaux imbriqués
sub CalculateTreeViewLevelVector(ind%)
  TVO_levels%(0) = 0
  i% = ind%
  CalculateLineLevel(s$)

  while n1%>1
    ldet% = 0
    n2% = n1%
    if n2%>1
      TVO_indexes%(TVO_levels%(0)+1) = i%
      while n1%>=n2%
        if n1%=n2% then ldet% = ldet% + 1
        i% = i% - 1
        s$ = item_read$(1,i%)
        CalculateLineLevel(s$)
      end_while
      TVO_levels%(0) = TVO_levels%(0) + 1
      TVO_levels%(TVO_levels%(0)) = ldet%
    end_if
  end_while
  TVO_levels%(0) = TVO_levels%(0) + 1
  TVO_levels%(TVO_levels%(0)) = 1
  TVO_indexes%(TVO_levels%(0)) = 1
end_sub

sub CreateTreeViewObject(no%,t%,l%,w%,h%)
  if (object_exists(no%)+object_exists(no%+1))>0
    message "TreeView - error 1"
    exit_sub
  end_if
  if variable("TVO")=0 then dim TVO
  if variable("TVO_levels%")=0 then dim TVO_levels%(50)
  if variable("TVO_indexes%")=0 then dim TVO_indexes%(50)
  if variable("TVO_sources%")=0 then dim TVO_sources%(50)

  TVO = no%
  list TVO : top TVO,t% : left TVO,l%
    width TVO,w% : height TVO,h%
    font_name TVO,"Courier"
  if montrer%=0
    dlist no%+1
  else
    list TVO+1 : top TVO+1,t% : left TVO+1,l%+w%+10
      width TVO+1,w% : height TVO+1,h%
      font_name TVO+1,"Courier"
  end_if
end_sub

sub CreateTreeViewRoot(o,txt$)
  if count(o)>0
    message "TreeView - error 2"
    exit_sub
  end_if
  item_add o,"    "+txt$
  item_add o+1,"    "+txt$
end_sub

sub AddTreeViewChildByIndex(o,ind%,txt$)
  if variable("AddTreeViewChildByIndex")=0 then dim AddTreeViewChildByIndex
  dim_local a$, index%, n2%
  if ind%>count(o)
    message "TreeView - error 3"
    exit_sub
  end_if
  i% = ind%
  s$ = item_read$(o,i%)
if chk%=1 then message "AddTreeViewChildByIndex 1: i%="+str$(i%)+"  s$="+s$
  CalculateLineLevel(s$)
if chk%=1 then message "AddTreeViewChildByIndex 1: n1="+str$(n1%)+"  s$=["+s$+"]"
  n2% = n1%
  CalculateTreeViewLevelVector(ind%)
if chk%=1 then dump("1 "+str$(ind%))
  FindTreeViewSource(o)
if chk%=1 then dump("2 "+str$(ind%))
  FindTreeViewEndLevel(o,n2%)
if chk%=1 then dump("3 "+str$(ind%))
  index% = TVO_indexes%(1)
if chk%=1 then message "index%="+str$(index%)
  s$ = item_read$(o,index%)
  a$ = mid$(s$,(n2%-1)*4+1,3)
  CalculateLineLevel(s$)
' message "xxx: index="+str$(index%)+"  a$="+a$+"  s$="+s$+"  txt$="+txt$

  if a$="[+]"
    message "déplier"
  end_if
  if (a$="  ") or (a$="[-]")
' message "D: n2="+str$(n2%)+"  index%="+str$(index%)+"  s$="+s$+"  a$="+a$+"  "+txt$
    if (a$="  ") and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o,index%+1,string$(n2%*4," ")+"    "+txt$
    AddTreeViewChildByIndex = index%+1
    index% = TVO_sources%(1)
    if a$="  " and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o+1,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o+1,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o+1,index%+1,string$(n2%*4," ")+"    "+txt$
  end_if
end_sub

sub AddTreeViewChildByVector(o,ind%)

end_sub

sub FindTreeViewSource(o)
  dim_local k%, n%, s$
  sind% = 1
  s$ = item_read$(o+1,sind%)
  CalculateLineLevel(s$)
if chk%=1 then message "A1: sind="+str$(sind%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
  for k%=TVO_levels%(0) to 1 step -1
    n% = TVO_levels%(k%)
if chk%=1 then message "A2: sind="+str$(sind%)+"  k="+str$(k%)+"  n="+str$(n%)
    while n%>1
      sind% = sind% + 1
      s$ = item_read$(o+1,sind%)
      CalculateLineLevel(s$)
if chk%=1 then message "A3: sind="+str$(sind%)+"  n="+str$(n%)+"  k="+str$(k%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
      if n1%=(TVO_levels%(0)+1-k%) then n% = n% - 1
    end_while
    TVO_sources%(k%) = sind%
    sind% = sind% + 1
  next k%
if chk%=1 then message "A4: Source: sind="+str$(sind%)+"  niveau="+str$(n1%)+"  "+s$
end_sub

sub FindTreeViewEndLevel(o,nx%)
  dim_local s$, k%, l%
  k% = TVO_sources%(1)
  while k%<count(o+1)
    k% = k% + 1
    l% = l% + 1
    s$ = item_read$(o+1,k%)
    CalculateLineLevel(s$)
    if n1%<nx%
' message "A: k="+str$(k%)+"  l="+str$(l%)
      TVO_sources%(1) = k%
      TVO_levels%(1) = TVO_levels%(1) + l%
      TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("A")
      exit_sub
    end_if
  end_while
' message "B: k="+str$(k%)+"  l="+str$(l%)
  TVO_sources%(1) = k%
  TVO_levels%(1) = TVO_levels%(1) + l%
  TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("B")
end_sub

sub dump(t$)
  message t$+": niveaux: "+str$(TVO_levels%(0))+","+str$(TVO_levels%(1))+","+str$(TVO_levels%(2))+","+str$(TVO_levels%(3))
  message t$+": indices: "+str$(TVO_indexes%(0))+","+str$(TVO_indexes%(1))+","+str$(TVO_indexes%(2))+","+str$(TVO_indexes%(3))
  message t$+": sources: "+str$(TVO_sources%(0))+","+str$(TVO_sources%(1))+","+str$(TVO_sources%(2))+","+str$(TVO_sources%(3))
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 5:51 am

Interessant Klaus !

Lors du premier appel à AddTreeViewChildByIndex la valeur de retour est égale à 0
ce qui fait que lorsque tu cherches à insérer le 2em item, l'index étant nul (niveau2%=0), le programme s'arrête sur cette ligne:
s$ = item_read$(o,i%)
study

EDIT :

J'ai trouvé :
Lors du 1er passage, AddTreeViewChildByIndex n'est pas affecté...
je ne sais pas si c'est un bug lié au forum (il n'aime pas les espaces) mais il manque un espace dans le test sur a$ (j'en ai 2 alors qu'il en faut 3)
if (a$=" ") or (a$="[-]")

Les préfixes n'apparaissent pas pour les même raisons... Wink
if a$=" " and (n1%=n2%)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 8:18 am

Beau boulot ça pourra servir aussi bien pour la dbr que pour les arborescence de fichiers, etc ... Wink
Merci Klaus
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1079
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 9:25 am

Bonjour panoramiciens,
@Jicehel,
C'est sur que ça pourrait servir pour les arborescences de fichier, mais je pense que Klaus a fait ceci dans le but de faire son logiciel de généalogie comme il a dit il y a quelques temps déjà. Je pense qu'il veut avec un "+" déplier par exemple une branche d'un ancètre afin d'y voir toute sa descendance et y modifier des informations par simple click sur la personne sélectionnée.
Enfin, je me trompe peut-être, ce n'est qu'une supposition.
En tout cas, cette ébauche de programme, ouvre pas mal de possibilités!
A+ Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Francis-mr



Nombre de messages : 156
Age : 65
Localisation : Corrèze
Date d'inscription : 26/11/2012

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 10:11 am

Bonjour à tous,

Pardonnez ma jeunesse en Panoramic qui m'amène à poser cette question, mais ce projet de Klaus "Simulation d'un objet TreeView" est en pur Panoramic version 0.9.23 ?
Car je n'arrive pas à le faire tourner.

Bonne journée
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://cfmr.e-monsite.com
Jean Claude

avatar

Nombre de messages : 4933
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 10:39 am

Très intéressant,

J' y voit pas mal d'application voir SoftNote2005 ici => http://softchris.free.fr/ZenAlbum/index.php?view=articles&rubriquearticle=1&article=6

J'ai eu exactement le même problème que Nardo (il a fallu rajouter un espace a$=" " )

Impatient de voir la suite....

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 10:55 am

Bonjour à tous !

Francis-mr a écrit:
Bonjour à tous,

Pardonnez ma jeunesse en Panoramic qui m'amène à poser cette question, mais ce projet de Klaus "Simulation d'un objet TreeView" est en pur Panoramic version 0.9.23 ?
Car je n'arrive pas à le faire tourner.
Bonne journée

Je te conseille de faire une mise à jour en récupérant la dernière version (voir ici). C'est un fichier ZIP qui contient l'executable PANORAMIC.EXE que tu dois mettre à la place de celui que tu as actuellement.

Pour l'instant le programme de Klaus n'est qu'une ébauche donc c'est normal que tu ne vois pas grand chose.
Si le programme plante c'est que tu n'as pas rajouté les espaces comme je l'ai indiqué au dessus.... Wink


Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Francis-mr



Nombre de messages : 156
Age : 65
Localisation : Corrèze
Date d'inscription : 26/11/2012

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 11:13 am

Merci Nardo,
Avec cette version, même si ce programme est qu'une ébauche, ça marche mieux.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://cfmr.e-monsite.com
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 11:17 am

@Klaus:
il y a quelques temps j'avais déjà réfléchi la chose et j'avais pondu quelques trucs en vrac...malheureusement je n'ai jamais eu le temps pour poursuivre le développement....
Si ça peut t'inspirer :


EDIT: tu peux rajouter par exemple dans l'attribut, un flag t'indiquant si le dossier est plié ou déplié...


Dernière édition par Nardo26 le Mer 05 Déc 2012, 1:48 pm, édité 2 fois (Raison : ortograffe)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 12:37 pm

Merci, Nardo. Effectivement, he me suis laissé piéger par le problème des espaces qui disparaissent lors du post sur le forum. J'ai remplacé les 3 espaces par une variable sp3$:
Code:
' treeview.bas

label click

dim x%, n%, a%, b%, s$, i%, n1%, flag%, a1$, a2$, n2%, n3%, s1$
dim ldet%, nsect%, lorg%, sind%, nindex%, niveau1%, niveau2%, niveau3%
dim chk%      : chk% = 0
dim montrer%  : montrer% = 0

width 0,800
CreateTreeViewObject(1,10,10,300,300)
on_click 1,click
CreateTreeViewRoot(TVO,"Racine")
niveau1% = 1

AddTreeViewChildByIndex(TVO,niveau1%,"aaaa")
niveau2% = AddTreeViewChildByIndex

AddTreeViewChildByIndex(TVO,niveau2%,"a1111111111")
AddTreeViewChildByIndex(TVO,niveau2%,"a2222222222")
AddTreeViewChildByIndex(TVO,niveau1%,"bbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"cccc")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"22222222")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"2aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"2bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau2%,"33333333")
AddTreeViewChildByIndex(TVO,niveau2%,"44444444")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"4aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"4bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"dddd")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"d11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"d22222222")


end

' positionnement des [+]
' niveau 1:  5...22 ==> 17
' niveau 2: 37...54 ==> 17
' niveau 3: 69...86 ==> 17
' niveau n:  a...b  n=int((x-5+32)/32)  a = (n-1)*32+5  b=a+17
click:
  x% = mouse_x_left_down(1)
  n% = int((x%-5+32)/32)
  a% = (n%-1)*32 + 5
  b% = a% + 16
  s$ = item_index$(1)
  CalculateLineLevel(s$)
  CalculateTreeViewLevelVector(item_index(1))
  n1% = TVO_levels%(0)
  s$ = item_index$(1)
' message "click: ind="+str$(item_index(1))+"  x="+str$(x%)+"  a="+str$(a%)+"  b="+str$(b%)+"  n1="+str$(n1%)+"  s$="+s$
  flag% = 0
  if n%=n1%
    if mid$(s$,(n%-1)*4+2,1)="+" then flag% = 1
    if mid$(s$,(n%-1)*4+2,1)="-" then flag% = 2
  end_if
 
'  dump("0")
  select flag%
    ' on a sélectionné une ligne
    case 0: message "Ligne "+str$(item_index(1))+" niveau "+str$(n%)
    ' on veut déplier une ligne ayant des lignes enfant
    case 1: message "déplier ligne "+str$(item_index(1))+" niveau "+str$(n%)
    ' on veut replier une ligne pour escamoter ses enfants
    case 2: message "replier ligne "+str$(item_index(1))+" niveau "+str$(n%)
  end_select
 
  return

  ' determiner le niveau d'une ligne dans la section
sub CalculateLineLevel(s$)
  dim_local i%
  i% = 1
  while mid$(s$,i%,1)=" "
    i% = i% + 1
  end_while
  if mid$(s$,i%,1)<>"[" then i% = i% - 4
  i% = i% - 1
  n1% = i%/4 + 1
end_sub

' déterminer le vecteur des niveaux imbriqués
sub CalculateTreeViewLevelVector(ind%)
  TVO_levels%(0) = 0
  i% = ind%
  CalculateLineLevel(s$)

  while n1%>1
    ldet% = 0
    n2% = n1%
    if n2%>1
      TVO_indexes%(TVO_levels%(0)+1) = i%
      while n1%>=n2%
        if n1%=n2% then ldet% = ldet% + 1
        i% = i% - 1
        s$ = item_read$(1,i%)
        CalculateLineLevel(s$)
      end_while
      TVO_levels%(0) = TVO_levels%(0) + 1
      TVO_levels%(TVO_levels%(0)) = ldet%
    end_if
  end_while
  TVO_levels%(0) = TVO_levels%(0) + 1
  TVO_levels%(TVO_levels%(0)) = 1
  TVO_indexes%(TVO_levels%(0)) = 1
end_sub

sub CreateTreeViewObject(no%,t%,l%,w%,h%)
  if (object_exists(no%)+object_exists(no%+1))>0
    message "TreeView - error 1"
    exit_sub
  end_if
  if variable("TVO")=0 then dim TVO
  if variable("TVO_levels%")=0 then dim TVO_levels%(50)
  if variable("TVO_indexes%")=0 then dim TVO_indexes%(50)
  if variable("TVO_sources%")=0 then dim TVO_sources%(50)

  TVO = no%
  list TVO : top TVO,t% : left TVO,l%
    width TVO,w% : height TVO,h%
    font_name TVO,"Courier"
  if montrer%=0
    dlist no%+1
  else
    list TVO+1 : top TVO+1,t% : left TVO+1,l%+w%+10
      width TVO+1,w% : height TVO+1,h%
      font_name TVO+1,"Courier"
  end_if
end_sub

sub CreateTreeViewRoot(o,txt$)
  if count(o)>0
    message "TreeView - error 2"
    exit_sub
  end_if
  item_add o,"    "+txt$
  item_add o+1,"    "+txt$
end_sub

sub AddTreeViewChildByIndex(o,ind%,txt$)
  if variable("AddTreeViewChildByIndex")=0 then dim AddTreeViewChildByIndex
  dim_local a$, index%, n2%
  if ind%>count(o)
    message "TreeView - error 3"
    exit_sub
  end_if
  i% = ind%
  s$ = item_read$(o,i%)
if chk%=1 then message "AddTreeViewChildByIndex 1: i%="+str$(i%)+"  s$="+s$
  CalculateLineLevel(s$)
if chk%=1 then message "AddTreeViewChildByIndex 1: n1="+str$(n1%)+"  s$=["+s$+"]"
  n2% = n1%
  CalculateTreeViewLevelVector(ind%)
if chk%=1 then dump("1 "+str$(ind%))
  FindTreeViewSource(o)
if chk%=1 then dump("2 "+str$(ind%))
  FindTreeViewEndLevel(o,n2%)
if chk%=1 then dump("3 "+str$(ind%))
  index% = TVO_indexes%(1)
if chk%=1 then message "index%="+str$(index%)
  s$ = item_read$(o,index%)
  a$ = mid$(s$,(n2%-1)*4+1,3)
  CalculateLineLevel(s$)
' message "xxx: index="+str$(index%)+"  a$="+a$+"  s$="+s$+"  txt$="+txt$

  if a$="[+]"
    message "déplier"
  end_if
  if (a$="  ") or (a$="[-]")
' message "D: n2="+str$(n2%)+"  index%="+str$(index%)+"  s$="+s$+"  a$="+a$+"  "+txt$
    if (a$="  ") and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o,index%+1,string$(n2%*4," ")+"    "+txt$
    AddTreeViewChildByIndex = index%+1
    index% = TVO_sources%(1)
    if a$="  " and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o+1,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o+1,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o+1,index%+1,string$(n2%*4," ")+"    "+txt$
  end_if
end_sub

sub AddTreeViewChildByVector(o,ind%)

end_sub

sub FindTreeViewSource(o)
  dim_local k%, n%, s$
  sind% = 1
  s$ = item_read$(o+1,sind%)
  CalculateLineLevel(s$)
if chk%=1 then message "A1: sind="+str$(sind%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
  for k%=TVO_levels%(0) to 1 step -1
    n% = TVO_levels%(k%)
if chk%=1 then message "A2: sind="+str$(sind%)+"  k="+str$(k%)+"  n="+str$(n%)
    while n%>1
      sind% = sind% + 1
      s$ = item_read$(o+1,sind%)
      CalculateLineLevel(s$)
if chk%=1 then message "A3: sind="+str$(sind%)+"  n="+str$(n%)+"  k="+str$(k%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
      if n1%=(TVO_levels%(0)+1-k%) then n% = n% - 1
    end_while
    TVO_sources%(k%) = sind%
    sind% = sind% + 1
  next k%
if chk%=1 then message "A4: Source: sind="+str$(sind%)+"  niveau="+str$(n1%)+"  "+s$
end_sub

sub FindTreeViewEndLevel(o,nx%)
  dim_local s$, k%, l%
  k% = TVO_sources%(1)
  while k%<count(o+1)
    k% = k% + 1
    l% = l% + 1
    s$ = item_read$(o+1,k%)
    CalculateLineLevel(s$)
    if n1%<nx%
' message "A: k="+str$(k%)+"  l="+str$(l%)
      TVO_sources%(1) = k%
      TVO_levels%(1) = TVO_levels%(1) + l%
      TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("A")
      exit_sub
    end_if
  end_while
' message "B: k="+str$(k%)+"  l="+str$(l%)
  TVO_sources%(1) = k%
  TVO_levels%(1) = TVO_levels%(1) + l%
  TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("B")
end_sub

sub dump(t$)
  message t$+": niveaux: "+str$(TVO_levels%(0))+","+str$(TVO_levels%(1))+","+str$(TVO_levels%(2))+","+str$(TVO_levels%(3))
  message t$+": indices: "+str$(TVO_indexes%(0))+","+str$(TVO_indexes%(1))+","+str$(TVO_indexes%(2))+","+str$(TVO_indexes%(3))
  message t$+": sources: "+str$(TVO_sources%(0))+","+str$(TVO_sources%(1))+","+str$(TVO_sources%(2))+","+str$(TVO_sources%(3))
end_sub

Pour Francis-mr, je précise que la V0.23 n'est pas suffisante. Il faut avoir accès aux procédures et à la commande EXIT_SUB. Donc, je conseille fortement d'installer la dernière version instantanée V0.24i7 qui marche très bien. Elle est disponible ici.

Mon objectif derrière ce développement ? Il n'y en a pas qu'un. effectivement, cela pourra servir pour le logiciel de généalogie (dans lequel j'ai résolu d'ailleurs le problème des mariages multiples, y compris de multiples remariages avec la même personne). Mais cela pourra servir aussi à faire un sélecteur de fichiers dans le style de celyi de l'explorateur, pour gérer des notes, morceaux de source etx, bref tout ce qu'on pourrait organiser en structure arborescente. Cela m'a manqué à plusieurs reprises, et j'ai décidé de prendrfe le problème à bras le corps. Et tout sera en Panoramic pur, sans l'aide d'une DLL, juste des procédures pour gérer les différentes fonctions/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 12:50 pm

La dernière version de Klaus avec le sp3$....
Code:
' treeview.bas
dim sp3$:sp3$=STRING$(3," "): ' comme ça on est pas embeté... ;)

label click

dim x%, n%, a%, b%, s$, i%, n1%, flag%, a1$, a2$, n2%, n3%, s1$
dim ldet%, nsect%, lorg%, sind%, nindex%, niveau1%, niveau2%, niveau3%
dim chk%      : chk% = 0
dim montrer%  : montrer% = 0

width 0,800
CreateTreeViewObject(1,10,10,300,300)
on_click 1,click
CreateTreeViewRoot(TVO,"Racine")
niveau1% = 1

AddTreeViewChildByIndex(TVO,niveau1%,"aaaa")
niveau2% = AddTreeViewChildByIndex

AddTreeViewChildByIndex(TVO,niveau2%,"a1111111111")
AddTreeViewChildByIndex(TVO,niveau2%,"a2222222222")
AddTreeViewChildByIndex(TVO,niveau1%,"bbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"cccc")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"22222222")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"2aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"2bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau2%,"33333333")
AddTreeViewChildByIndex(TVO,niveau2%,"44444444")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"4aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"4bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"dddd")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"d11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"d22222222")


end

' positionnement des [+]
' niveau 1:  5...22 ==> 17
' niveau 2: 37...54 ==> 17
' niveau 3: 69...86 ==> 17
' niveau n:  a...b  n=int((x-5+32)/32)  a = (n-1)*32+5  b=a+17
click:
  x% = mouse_x_left_down(1)
  n% = int((x%-5+32)/32)
  a% = (n%-1)*32 + 5
  b% = a% + 16
  s$ = item_index$(1)
  CalculateLineLevel(s$)
  CalculateTreeViewLevelVector(item_index(1))
  n1% = TVO_levels%(0)
  s$ = item_index$(1)
' message "click: ind="+str$(item_index(1))+"  x="+str$(x%)+"  a="+str$(a%)+"  b="+str$(b%)+"  n1="+str$(n1%)+"  s$="+s$
  flag% = 0
  if n%=n1%
    if mid$(s$,(n%-1)*4+2,1)="+" then flag% = 1
    if mid$(s$,(n%-1)*4+2,1)="-" then flag% = 2
  end_if

'  dump("0")
  select flag%
    ' on a sélectionné une ligne
    case 0: message "Ligne "+str$(item_index(1))+" niveau "+str$(n%)
    ' on veut déplier une ligne ayant des lignes enfant
    case 1: message "déplier ligne "+str$(item_index(1))+" niveau "+str$(n%)
    ' on veut replier une ligne pour escamoter ses enfants
    case 2: message "replier ligne "+str$(item_index(1))+" niveau "+str$(n%)
  end_select

  return

  ' determiner le niveau d'une ligne dans la section
sub CalculateLineLevel(s$)
  dim_local i%
  i% = 1
  while mid$(s$,i%,1)=" "
    i% = i% + 1
  end_while
  if mid$(s$,i%,1)<>"[" then i% = i% - 4
  i% = i% - 1
  n1% = i%/4 + 1
end_sub

' déterminer le vecteur des niveaux imbriqués
sub CalculateTreeViewLevelVector(ind%)
  TVO_levels%(0) = 0
  i% = ind%
  CalculateLineLevel(s$)

  while n1%>1
    ldet% = 0
    n2% = n1%
    if n2%>1
      TVO_indexes%(TVO_levels%(0)+1) = i%
      while n1%>=n2%
        if n1%=n2% then ldet% = ldet% + 1
        i% = i% - 1
        s$ = item_read$(1,i%)
        CalculateLineLevel(s$)
      end_while
      TVO_levels%(0) = TVO_levels%(0) + 1
      TVO_levels%(TVO_levels%(0)) = ldet%
    end_if
  end_while
  TVO_levels%(0) = TVO_levels%(0) + 1
  TVO_levels%(TVO_levels%(0)) = 1
  TVO_indexes%(TVO_levels%(0)) = 1
end_sub

sub CreateTreeViewObject(no%,t%,l%,w%,h%)
  if (object_exists(no%)+object_exists(no%+1))>0
    message "TreeView - error 1"
    exit_sub
  end_if
  if variable("TVO")=0 then dim TVO
  if variable("TVO_levels%")=0 then dim TVO_levels%(50)
  if variable("TVO_indexes%")=0 then dim TVO_indexes%(50)
  if variable("TVO_sources%")=0 then dim TVO_sources%(50)

  TVO = no%
  list TVO : top TVO,t% : left TVO,l%
    width TVO,w% : height TVO,h%
    font_name TVO,"Courier"
  if montrer%=0
    dlist no%+1
  else
    list TVO+1 : top TVO+1,t% : left TVO+1,l%+w%+10
      width TVO+1,w% : height TVO+1,h%
      font_name TVO+1,"Courier"
  end_if
end_sub

sub CreateTreeViewRoot(o,txt$)
  if count(o)>0
    message "TreeView - error 2"
    exit_sub
  end_if
  item_add o,"    "+txt$
  item_add o+1,"    "+txt$
end_sub

sub AddTreeViewChildByIndex(o,ind%,txt$)
  if variable("AddTreeViewChildByIndex")=0 then dim AddTreeViewChildByIndex
  dim_local a$, index%, n2%
  if ind%>count(o)
    message "TreeView - error 3"
    exit_sub
  end_if
  i% = ind%
  s$ = item_read$(o,i%)
if chk%=1 then message "AddTreeViewChildByIndex 1: i%="+str$(i%)+"  s$="+s$
  CalculateLineLevel(s$)
if chk%=1 then message "AddTreeViewChildByIndex 1: n1="+str$(n1%)+"  s$=["+s$+"]"
  n2% = n1%
  CalculateTreeViewLevelVector(ind%)
if chk%=1 then dump("1 "+str$(ind%))
  FindTreeViewSource(o)
if chk%=1 then dump("2 "+str$(ind%))
  FindTreeViewEndLevel(o,n2%)
if chk%=1 then dump("3 "+str$(ind%))
  index% = TVO_indexes%(1)
if chk%=1 then message "index%="+str$(index%)
  s$ = item_read$(o,index%)
  a$ = mid$(s$,(n2%-1)*4+1,3)
  CalculateLineLevel(s$)
' message "xxx: index="+str$(index%)+"  a$="+a$+"  s$="+s$+"  txt$="+txt$

  if a$="[+]"
    message "déplier"
  end_if
  if (a$=sp3$) or (a$="[-]") : ' modif Nardo
' message "D: n2="+str$(n2%)+"  index%="+str$(index%)+"  s$="+s$+"  a$="+a$+"  "+txt$
    if (a$=sp3$) and (n1%=n2%): ' modif nardo
      s$ = item_read$(o+1,index%)
      item_delete o,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o,index%+1,string$(n2%*4," ")+"    "+txt$
    AddTreeViewChildByIndex = index%+1
    index% = TVO_sources%(1)
    if a$=sp3$ and (n1%=n2%) : ' modif Nardo
      s$ = item_read$(o+1,index%)
      item_delete o+1,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o+1,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o+1,index%+1,string$(n2%*4," ")+"    "+txt$
  end_if
end_sub

sub AddTreeViewChildByVector(o,ind%)

end_sub

sub FindTreeViewSource(o)
  dim_local k%, n%, s$
  sind% = 1
  s$ = item_read$(o+1,sind%)
  CalculateLineLevel(s$)
if chk%=1 then message "A1: sind="+str$(sind%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
  for k%=TVO_levels%(0) to 1 step -1
    n% = TVO_levels%(k%)
if chk%=1 then message "A2: sind="+str$(sind%)+"  k="+str$(k%)+"  n="+str$(n%)
    while n%>1
      sind% = sind% + 1
      s$ = item_read$(o+1,sind%)
      CalculateLineLevel(s$)
if chk%=1 then message "A3: sind="+str$(sind%)+"  n="+str$(n%)+"  k="+str$(k%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
      if n1%=(TVO_levels%(0)+1-k%) then n% = n% - 1
    end_while
    TVO_sources%(k%) = sind%
    sind% = sind% + 1
  next k%
if chk%=1 then message "A4: Source: sind="+str$(sind%)+"  niveau="+str$(n1%)+"  "+s$
end_sub

sub FindTreeViewEndLevel(o,nx%)
  dim_local s$, k%, l%
  k% = TVO_sources%(1)
  while k%<count(o+1)
    k% = k% + 1
    l% = l% + 1
    s$ = item_read$(o+1,k%)
    CalculateLineLevel(s$)
    if n1%<nx%
' message "A: k="+str$(k%)+"  l="+str$(l%)
      TVO_sources%(1) = k%
      TVO_levels%(1) = TVO_levels%(1) + l%
      TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("A")
      exit_sub
    end_if
  end_while
' message "B: k="+str$(k%)+"  l="+str$(l%)
  TVO_sources%(1) = k%
  TVO_levels%(1) = TVO_levels%(1) + l%
  TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("B")
end_sub

sub dump(t$)
  message t$+": niveaux: "+str$(TVO_levels%(0))+","+str$(TVO_levels%(1))+","+str$(TVO_levels%(2))+","+str$(TVO_levels%(3))
  message t$+": indices: "+str$(TVO_indexes%(0))+","+str$(TVO_indexes%(1))+","+str$(TVO_indexes%(2))+","+str$(TVO_indexes%(3))
  message t$+": sources: "+str$(TVO_sources%(0))+","+str$(TVO_sources%(1))+","+str$(TVO_sources%(2))+","+str$(TVO_sources%(3))
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 1:39 pm

?????

Je n'ai pas compris pourquoi tu as posté le source avec la même modif que la mienne...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 1:44 pm

Parce que dans la version que tu as mis, il n'y a pas de sp3$... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 1:54 pm

Oups... Merci !

Voici la version actuelle. J'ai ajouté la fonction replier() qui permet de replier n'importe quel noeud. Je travaille maintenant sur la fonction deplier().

Code:
' treeview.bas

label click

dim x%, n%, a%, b%, s$, i%, n1%, flag%, a1$, a2$, n2%, n3%, s1$
dim ldet%, nsect%, lorg%, sind%, nindex%, niveau1%, niveau2%, niveau3%
dim chk%      : chk% = 0
dim montrer%  : montrer% = 0
dim sp3$      : sp3$ = string$(3," ")

width 0,800
CreateTreeViewObject(1,10,10,300,300)
on_click 1,click
CreateTreeViewRoot(TVO,"Racine")
niveau1% = 1

AddTreeViewChildByIndex(TVO,niveau1%,"aaaa")
niveau2% = AddTreeViewChildByIndex

AddTreeViewChildByIndex(TVO,niveau2%,"a1111111111")
AddTreeViewChildByIndex(TVO,niveau2%,"a2222222222")
AddTreeViewChildByIndex(TVO,niveau1%,"bbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"cccc")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"22222222")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"2aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"2bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau2%,"33333333")
AddTreeViewChildByIndex(TVO,niveau2%,"44444444")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"4aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"4bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"dddd")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"d11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"d22222222")


end

' positionnement des [+]
' niveau 1:  5...22 ==> 17
' niveau 2: 37...54 ==> 17
' niveau 3: 69...86 ==> 17
' niveau n:  a...b  n=int((x-5+32)/32)  a = (n-1)*32+5  b=a+17
click:
  x% = mouse_x_left_down(1)
  n% = int((x%-5+32)/32)
  a% = (n%-1)*32 + 5
  b% = a% + 16
  s$ = item_index$(1)
  CalculateLineLevel(s$)
  CalculateTreeViewLevelVector(item_index(1))
  n1% = TVO_levels%(0)
  s$ = item_index$(1)
' message "click: ind="+str$(item_index(1))+"  x="+str$(x%)+"  a="+str$(a%)+"  b="+str$(b%)+"  n1="+str$(n1%)+"  s$="+s$
  flag% = 0
  if n%=n1%
    if mid$(s$,(n%-1)*4+2,1)="+" then flag% = 1
    if mid$(s$,(n%-1)*4+2,1)="-" then flag% = 2
  end_if
 
'  dump("0")
  select flag%
    ' on a sélectionné une ligne
    case 0
      message "Ligne "+str$(item_index(1))+" niveau "+str$(n%)
     
    ' on veut déplier une ligne ayant des lignes enfant
    case 1
      message "déplier ligne "+str$(item_index(1))+" niveau "+str$(n%)
      UnfoldTreeViewNode()
     
    ' on veut replier une ligne pour escamoter ses enfants
    case 2
'      message "replier ligne "+str$(item_index(1))+" niveau "+str$(n%)
      FoldTreeViewNode(1,item_index(1),n%)
  end_select
 
  return
 
sub UnfoldTreeViewNode()
end_sub

sub FoldTreeViewNode(o,lig%,niv%)
  dim_local s$, s1$, i%
  s$ = item_read$(o,lig%)
  s1$ = ""
  if n%>1 then s1$ = string$((niv%-1)*4," ")
  s$ = s1$ + "[+] "+mid$(s$,niv%*4+1,len(s$))
  item_delete o,lig%
  item_insert o,lig%,s$
  i% = lig%
  while i%<count(o)
    i% = i% + 1
    s$ = item_read$(o,i%)
    CalculateLineLevel(s$)
    if n1%>niv%
      item_delete o,i%
      i% = i% - 1
    else
      exit_sub
    end_if
  end_while

end_sub

  ' determiner le niveau d'une ligne dans la section
sub CalculateLineLevel(s$)
  dim_local i%
  i% = 1
  while mid$(s$,i%,1)=" "
    i% = i% + 1
  end_while
  if mid$(s$,i%,1)<>"[" then i% = i% - 4
  i% = i% - 1
  n1% = i%/4 + 1
end_sub

' déterminer le vecteur des niveaux imbriqués
sub CalculateTreeViewLevelVector(ind%)
  TVO_levels%(0) = 0
  i% = ind%
  CalculateLineLevel(s$)

  while n1%>1
    ldet% = 0
    n2% = n1%
    if n2%>1
      TVO_indexes%(TVO_levels%(0)+1) = i%
      while n1%>=n2%
        if n1%=n2% then ldet% = ldet% + 1
        i% = i% - 1
        s$ = item_read$(1,i%)
        CalculateLineLevel(s$)
      end_while
      TVO_levels%(0) = TVO_levels%(0) + 1
      TVO_levels%(TVO_levels%(0)) = ldet%
    end_if
  end_while
  TVO_levels%(0) = TVO_levels%(0) + 1
  TVO_levels%(TVO_levels%(0)) = 1
  TVO_indexes%(TVO_levels%(0)) = 1
end_sub

sub CreateTreeViewObject(no%,t%,l%,w%,h%)
  if (object_exists(no%)+object_exists(no%+1))>0
    message "TreeView - error 1"
    exit_sub
  end_if
  if variable("TVO")=0 then dim TVO
  if variable("TVO_levels%")=0 then dim TVO_levels%(50)
  if variable("TVO_indexes%")=0 then dim TVO_indexes%(50)
  if variable("TVO_sources%")=0 then dim TVO_sources%(50)

  TVO = no%
  list TVO : top TVO,t% : left TVO,l%
    width TVO,w% : height TVO,h%
    font_name TVO,"Courier"
  if montrer%=0
    dlist no%+1
  else
    list TVO+1 : top TVO+1,t% : left TVO+1,l%+w%+10
      width TVO+1,w% : height TVO+1,h%
      font_name TVO+1,"Courier"
  end_if
end_sub

sub CreateTreeViewRoot(o,txt$)
  if count(o)>0
    message "TreeView - error 2"
    exit_sub
  end_if
  item_add o,"    "+txt$
  item_add o+1,"    "+txt$
end_sub

sub AddTreeViewChildByIndex(o,ind%,txt$)
  if variable("AddTreeViewChildByIndex")=0 then dim AddTreeViewChildByIndex
  dim_local a$, index%, n2%
  if ind%>count(o)
    message "TreeView - error 3"
    exit_sub
  end_if
  i% = ind%
  s$ = item_read$(o,i%)
if chk%=1 then message "AddTreeViewChildByIndex 1: i%="+str$(i%)+"  s$="+s$
  CalculateLineLevel(s$)
if chk%=1 then message "AddTreeViewChildByIndex 1: n1="+str$(n1%)+"  s$=["+s$+"]"
  n2% = n1%
  CalculateTreeViewLevelVector(ind%)
if chk%=1 then dump("1 "+str$(ind%))
  FindTreeViewSource(o)
if chk%=1 then dump("2 "+str$(ind%))
  FindTreeViewEndLevel(o,n2%)
if chk%=1 then dump("3 "+str$(ind%))
  index% = TVO_indexes%(1)
if chk%=1 then message "index%="+str$(index%)
  s$ = item_read$(o,index%)
  a$ = mid$(s$,(n2%-1)*4+1,3)
  CalculateLineLevel(s$)
' message "xxx: index="+str$(index%)+"  a$="+a$+"  s$="+s$+"  txt$="+txt$

  if a$="[+]"
    message "déplier"
  end_if
  if (a$=sp3$) or (a$="[-]")
' message "D: n2="+str$(n2%)+"  index%="+str$(index%)+"  s$="+s$+"  a$="+a$+"  "+txt$
    if (a$=sp3$) and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o,index%+1,string$(n2%*4," ")+"    "+txt$
    AddTreeViewChildByIndex = index%+1
    index% = TVO_sources%(1)
    if a$=sp3$ and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o+1,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o+1,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o+1,index%+1,string$(n2%*4," ")+"    "+txt$
  end_if
end_sub

sub AddTreeViewChildByVector(o,ind%)

end_sub

sub FindTreeViewSource(o)
  dim_local k%, n%, s$
  sind% = 1
  s$ = item_read$(o+1,sind%)
  CalculateLineLevel(s$)
if chk%=1 then message "A1: sind="+str$(sind%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
  for k%=TVO_levels%(0) to 1 step -1
    n% = TVO_levels%(k%)
if chk%=1 then message "A2: sind="+str$(sind%)+"  k="+str$(k%)+"  n="+str$(n%)
    while n%>1
      sind% = sind% + 1
      s$ = item_read$(o+1,sind%)
      CalculateLineLevel(s$)
if chk%=1 then message "A3: sind="+str$(sind%)+"  n="+str$(n%)+"  k="+str$(k%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
      if n1%=(TVO_levels%(0)+1-k%) then n% = n% - 1
    end_while
    TVO_sources%(k%) = sind%
    sind% = sind% + 1
  next k%
if chk%=1 then message "A4: Source: sind="+str$(sind%)+"  niveau="+str$(n1%)+"  "+s$
end_sub

sub FindTreeViewEndLevel(o,nx%)
  dim_local s$, k%, l%
  k% = TVO_sources%(1)
  while k%<count(o+1)
    k% = k% + 1
    l% = l% + 1
    s$ = item_read$(o+1,k%)
    CalculateLineLevel(s$)
    if n1%<nx%
' message "A: k="+str$(k%)+"  l="+str$(l%)
      TVO_sources%(1) = k%
      TVO_levels%(1) = TVO_levels%(1) + l%
      TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("A")
      exit_sub
    end_if
  end_while
' message "B: k="+str$(k%)+"  l="+str$(l%)
  TVO_sources%(1) = k%
  TVO_levels%(1) = TVO_levels%(1) + l%
  TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("B")
end_sub

sub dump(t$)
  message t$+": niveaux: "+str$(TVO_levels%(0))+","+str$(TVO_levels%(1))+","+str$(TVO_levels%(2))+","+str$(TVO_levels%(3))
  message t$+": indices: "+str$(TVO_indexes%(0))+","+str$(TVO_indexes%(1))+","+str$(TVO_indexes%(2))+","+str$(TVO_indexes%(3))
  message t$+": sources: "+str$(TVO_sources%(0))+","+str$(TVO_sources%(1))+","+str$(TVO_sources%(2))+","+str$(TVO_sources%(3))
end_sub

EDIT

Et voici le même source, mais avec les procédures nommées correctement !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 2:07 pm

ça marche !
C'est là qu'on se rend compte qu'il manque un:
Code:
ITEM_SELECT TVO,ITEM_INDEX(TVO)
Pour maintenir le background bleu sur l'item que l'on vient de replier....

C'est faisable en passant par les GLIST... mais bonjour l'usine à gaz !!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
papydall

avatar

Nombre de messages : 5384
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 2:46 pm

Bonjour Klaus.

Bonne idée, mais …
J’ai toujours (le 1er code et aussi le 2ème) l’erreur ‘(52) Not correct string expression : Function call with negative or zero value .Line 154’.
La correction faite par Nardo vingt-six marche correctement.

Je viens de tester ta nouvelle version : c’est OK !

CONTINUE ....
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 3:15 pm

@Nardo:
on peut le faire avec la fonction
res% = dll_call2("SelectListBoxItem",hnd%,item%)
de KGF.dll, ou
SelectListBoxItem(hnd%,item%)
del KGF_SUB.bas.

Mais je voulais rester en Panoramic pur. Donc, pour mon programme, au niveau fonctionnel, je décrète la règle:
Toute modification d'une ligne désélectionne cette ligne.

Le dépliage progresse...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 3:43 pm

Klaus a écrit:
...Mais je voulais rester en Panoramic pur....
J'ai bien compris le principe: rien que pour la beauté de la chose et le côté "formateur" (pas très français ce que je dis) pour les débutants cela vaut le coup !
C'est d'ailleurs pour cela que j'ai parlé des GLISTs... Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 6:25 pm

Je pourrais en effet remplace la LIST par une GLIST, lorsque tout fonctionnera. On verra.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 6:31 pm

Klaus a écrit:
Je pourrais en effet remplace la LIST par une GLIST, lorsque tout fonctionnera. On verra.

Ca vaut pas le coup Klaus : La seule chose que cela va faire, c'est d'alourdir la chose pour rien...Perso je ne toucherai pas à l'organisation interne.

(J'avais parlé de GLIST en rigolant par rapport à cette histoire de ITEM_SELECT mais j'ai rajouté derrière que cela serait une usine à gaz)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 6:58 pm

Effecctivement.

Je continue à "déplier"...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 10:53 pm

Maintenant, on peut déplier un noeud replié:
Code:
' treeview.bas

label click

dim x%, n%, a%, b%, s$, i%, n1%, flag%, a1$, a2$, n2%, n3%, s1$
dim ldet%, nsect%, lorg%, sind%, nindex%, niveau1%, niveau2%, niveau3%
dim chk%      : chk% = 0
dim montrer%  : montrer% = 1
dim sp3$      : sp3$ = string$(3," ")

width 0,800
CreateTreeViewObject(1,10,10,300,300)
on_click 1,click
CreateTreeViewRoot(TVO,"Racine")
niveau1% = 1

AddTreeViewChildByIndex(TVO,niveau1%,"aaaa")
niveau2% = AddTreeViewChildByIndex

AddTreeViewChildByIndex(TVO,niveau2%,"a1111111111")
AddTreeViewChildByIndex(TVO,niveau2%,"a2222222222")
AddTreeViewChildByIndex(TVO,niveau1%,"bbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"cccc")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"22222222")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"2aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"2bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau2%,"33333333")
AddTreeViewChildByIndex(TVO,niveau2%,"44444444")
niveau3% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau3%,"4aaaaaaaaa")
AddTreeViewChildByIndex(TVO,niveau3%,"4bbbbbbbbb")
AddTreeViewChildByIndex(TVO,niveau1%,"dddd")
niveau2% = AddTreeViewChildByIndex
AddTreeViewChildByIndex(TVO,niveau2%,"d11111111")
AddTreeViewChildByIndex(TVO,niveau2%,"d22222222")


end

' positionnement des [+]
' niveau 1:  5...22 ==> 17
' niveau 2: 37...54 ==> 17
' niveau 3: 69...86 ==> 17
' niveau n:  a...b  n=int((x-5+32)/32)  a = (n-1)*32+5  b=a+17
click:
  x% = mouse_x_left_down(1)
  n% = int((x%-5+32)/32)
  a% = (n%-1)*32 + 5
  b% = a% + 16
  s$ = item_index$(1)
  CalculateLineLevel(s$)
  CalculateTreeViewLevelVector(1,item_index(1),s$)
  n1% = TVO_levels%(0)
  s$ = item_index$(1)
' message "click: ind="+str$(item_index(1))+"  x="+str$(x%)+"  a="+str$(a%)+"  b="+str$(b%)+"  n1="+str$(n1%)+"  s$="+s$
  flag% = 0
  if n%=n1%
    if mid$(s$,(n%-1)*4+2,1)="+" then flag% = 1
    if mid$(s$,(n%-1)*4+2,1)="-" then flag% = 2
  end_if
 
'  dump("0")
  select flag%
    ' on a sélectionné une ligne
    case 0
      message "Ligne "+str$(item_index(1))+" niveau "+str$(n%)
     
    ' on veut déplier une ligne ayant des lignes enfant
    case 1
'      message "déplier ligne "+str$(item_index(1))+" niveau "+str$(n%)
      UnfoldTreeViewNode(1,item_index(1),n%)
     
    ' on veut replier une ligne pour escamoter ses enfants
    case 2
'      message "replier ligne "+str$(item_index(1))+" niveau "+str$(n%)
      FoldTreeViewNode(1,item_index(1),n%)
  end_select
 
  return
 
sub UnfoldTreeViewNode(o,lig%,niv%)
  dim_local s$, s1$, i1%, i2%
  s$ = item_read$(o,lig%)
  s1$ = ""
  if n%>1 then s1$ = string$((niv%-1)*4," ")
  s$ = s1$ + "[-] "+mid$(s$,niv%*4+1,len(s$))
  item_delete o,lig%
  item_insert o,lig%,s$
  CalculateLineLevel(s$)
  CalculateTreeViewLevelVector(o,lig%,s$)
  FindTreeViewSource(o)
  i1% = lig%
  i2% = TVO_sources%(1)
  while i2%<count(o+1)
    i2% = i2% + 1
    s$ = item_read$(o+1,i2%)
    CalculateLineLevel(s$)
    if n1%>niv%
      i1% = i1% + 1
      item_insert o,i1%,s$
    else
      exit_sub
    end_if
  end_while
end_sub

sub FoldTreeViewNode(o,lig%,niv%)
  dim_local s$, s1$, i%
  s$ = item_read$(o,lig%)
  s1$ = ""
  if n%>1 then s1$ = string$((niv%-1)*4," ")
  s$ = s1$ + "[+] "+mid$(s$,niv%*4+1,len(s$))
  item_delete o,lig%
  item_insert o,lig%,s$
  i% = lig%
  while i%<count(o)
    i% = i% + 1
    s$ = item_read$(o,i%)
    CalculateLineLevel(s$)
    if n1%>niv%
      item_delete o,i%
      i% = i% - 1
    else
      exit_sub
    end_if
  end_while

end_sub

  ' determiner le niveau d'une ligne dans la section
sub CalculateLineLevel(s$)
  dim_local i%
  i% = 1
  while mid$(s$,i%,1)=" "
    i% = i% + 1
  end_while
  if mid$(s$,i%,1)<>"[" then i% = i% - 4
  i% = i% - 1
  n1% = i%/4 + 1
end_sub

' déterminer le vecteur des niveaux imbriqués
sub CalculateTreeViewLevelVector(o,ind%,r$)
  dim_local s$
  s$ = r$
  TVO_levels%(0) = 0
  i% = ind%
  CalculateLineLevel(s$)

  while n1%>1
    ldet% = 0
    n2% = n1%
    if n2%>1
      TVO_indexes%(TVO_levels%(0)+1) = i%
      while n1%>=n2%
        if n1%=n2% then ldet% = ldet% + 1
        i% = i% - 1
        s$ = item_read$(o,i%)
        CalculateLineLevel(s$)
      end_while
      TVO_levels%(0) = TVO_levels%(0) + 1
      TVO_levels%(TVO_levels%(0)) = ldet%
    end_if
  end_while
  TVO_levels%(0) = TVO_levels%(0) + 1
  TVO_levels%(TVO_levels%(0)) = 1
  TVO_indexes%(TVO_levels%(0)) = 1
end_sub

sub CreateTreeViewObject(no%,t%,l%,w%,h%)
  if (object_exists(no%)+object_exists(no%+1))>0
    message "TreeView - error 1"
    exit_sub
  end_if
  if variable("TVO")=0 then dim TVO
  if variable("TVO_levels%")=0 then dim TVO_levels%(50)
  if variable("TVO_indexes%")=0 then dim TVO_indexes%(50)
  if variable("TVO_sources%")=0 then dim TVO_sources%(50)

  TVO = no%
  list TVO : top TVO,t% : left TVO,l%
    width TVO,w% : height TVO,h%
    font_name TVO,"Courier"
  if montrer%=0
    dlist no%+1
  else
    list TVO+1 : top TVO+1,t% : left TVO+1,l%+w%+10
      width TVO+1,w% : height TVO+1,h%
      font_name TVO+1,"Courier"
  end_if
end_sub

sub CreateTreeViewRoot(o,txt$)
  if count(o)>0
    message "TreeView - error 2"
    exit_sub
  end_if
  item_add o,"    "+txt$
  item_add o+1,"    "+txt$
end_sub

sub AddTreeViewChildByIndex(o,ind%,txt$)
  if variable("AddTreeViewChildByIndex")=0 then dim AddTreeViewChildByIndex
  dim_local a$, index%, n2%
  if ind%>count(o)
    message "TreeView - error 3"
    exit_sub
  end_if
  i% = ind%
  s$ = item_read$(o,i%)
if chk%=1 then message "AddTreeViewChildByIndex 1: i%="+str$(i%)+"  s$="+s$
  CalculateLineLevel(s$)
if chk%=1 then message "AddTreeViewChildByIndex 1: n1="+str$(n1%)+"  s$=["+s$+"]"
  n2% = n1%
  CalculateTreeViewLevelVector(o,ind%,s$)
if chk%=1 then dump("1 "+str$(ind%))
  FindTreeViewSource(o)
if chk%=1 then dump("2 "+str$(ind%))
  FindTreeViewEndLevel(o,n2%)
if chk%=1 then dump("3 "+str$(ind%))
  index% = TVO_indexes%(1)
if chk%=1 then message "index%="+str$(index%)
  s$ = item_read$(o,index%)
  a$ = mid$(s$,(n2%-1)*4+1,3)
  CalculateLineLevel(s$)
' message "xxx: index="+str$(index%)+"  a$="+a$+"  s$="+s$+"  txt$="+txt$

  if a$="[+]"
    message "déplier"
  end_if
  if (a$=sp3$) or (a$="[-]")
' message "D: n2="+str$(n2%)+"  index%="+str$(index%)+"  s$="+s$+"  a$="+a$+"  "+txt$
    if (a$=sp3$) and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o,index%+1,string$(n2%*4," ")+"    "+txt$
    AddTreeViewChildByIndex = index%+1
    index% = TVO_sources%(1)
    if a$=sp3$ and (n1%=n2%)
      s$ = item_read$(o+1,index%)
      item_delete o+1,index%
      s1$ = ""
      if n2%>1 then s1$ = string$((n2%-1)*4," ")
      item_insert o+1,index%,s1$+"[-] "+trim$(s$)
    end_if
    item_insert o+1,index%+1,string$(n2%*4," ")+"    "+txt$
  end_if
end_sub

sub AddTreeViewChildByVector(o,ind%)

end_sub

sub FindTreeViewSource(o)
  dim_local k%, n%, s$
  sind% = 1
  s$ = item_read$(o+1,sind%)
  CalculateLineLevel(s$)
if chk%=1 then message "A1: sind="+str$(sind%)+"  n1="+str$(n1%)+"  "+s$+"  "+str$(TVO_levels%(0))
  for k%=TVO_levels%(0) to 1 step -1
    n% = TVO_levels%(k%)
if chk%=1 then message "A2: sind="+str$(sind%)+"  k="+str$(k%)+"  n="+str$(n%)
    while (n%>1)
      sind% = sind% + 1
      if sind%>count(o+1)
        TVO_sources%(k%) = sind%
        exit_sub
      end_if
      s$ = item_read$(o+1,sind%)
      CalculateLineLevel(s$)
if chk%=1 then message "A3: sind="+str$(sind%)+"  n="+str$(n%)+"  k="+str$(k%)+"  n1="+str$(n1%)+"  "+s$+"  TVO_levels(0)="+str$(TVO_levels%(0))
      if n1%=(TVO_levels%(0)+1-k%) then n% = n% - 1
    end_while
    TVO_sources%(k%) = sind%
    sind% = sind% + 1
  next k%
if chk%=1 then message "A4: Source: sind="+str$(sind%)+"  niveau="+str$(n1%)+"  "+s$
end_sub

sub FindTreeViewEndLevel(o,nx%)
  dim_local s$, k%, l%
  k% = TVO_sources%(1)
  while k%<count(o+1)
    k% = k% + 1
    l% = l% + 1
    s$ = item_read$(o+1,k%)
    CalculateLineLevel(s$)
    if n1%<nx%
' message "A: k="+str$(k%)+"  l="+str$(l%)
      TVO_sources%(1) = k%
      TVO_levels%(1) = TVO_levels%(1) + l%
      TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("A")
      exit_sub
    end_if
  end_while
' message "B: k="+str$(k%)+"  l="+str$(l%)
  TVO_sources%(1) = k%
  TVO_levels%(1) = TVO_levels%(1) + l%
  TVO_indexes%(1) = TVO_indexes%(1) + l%
' dump("B")
end_sub

sub dump(t$)
  message t$+": niveaux: "+str$(TVO_levels%(0))+","+str$(TVO_levels%(1))+","+str$(TVO_levels%(2))+","+str$(TVO_levels%(3))
  message t$+": indices: "+str$(TVO_indexes%(0))+","+str$(TVO_indexes%(1))+","+str$(TVO_indexes%(2))+","+str$(TVO_indexes%(3))
  message t$+": sources: "+str$(TVO_sources%(0))+","+str$(TVO_sources%(1))+","+str$(TVO_sources%(2))+","+str$(TVO_sources%(3))
end_sub

Etape suivante: pouvoir faire un ajout de ligne enfant à un noeud replié...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5838
Age : 44
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 11:06 pm

Je n'arrive pas bien à trouver la règle, mais en cliquant sur les objets et en pliant, dépliant différents niveau, le niveau d'un objet change ... Ce qui ne me parrait pas normal ou alors c'est qu'un truc m'échappe.

Sinon le pliage, dépliage fonctionne bien
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Simulation d'un objet TreeView   Mer 05 Déc 2012, 11:19 pm

Je n'ai pas rencontré ce cas. si tu arrives à le reproduire, je suis preneur.

Sinon, en ligne 8, mets montrer%=0 pour voir juste la liste normale. La liste de droite est l'image interne, qui est toujours entièrement dépliée et qui sert de modèle pour réintégrer les lignes perdues par un pliage.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Simulation d'un objet TreeView   Jeu 06 Déc 2012, 8:14 am

Bonjour,

Jicehel a écrit:
Je n'arrive pas bien à trouver la règle, mais en cliquant sur les objets et en pliant, dépliant différents niveau, le niveau d'un objet change ... Ce qui ne me parrait pas normal ou alors c'est qu'un truc m'échappe.
Sinon le pliage, dépliage fonctionne bien

Je rencontre le même problème.... Wink

Par exemple :
1- lancement du prog
2- clic sur "bbbb" -> ligne 5 niveau 3 ok
3- clic directement sur "a11111111111" -> ligne 3 niveau 5
4- re-clic sur a111111111 -> ligne 3 niveau 4
A partir de là, si tu re-cliques sur cette ligne sans toucher à une autre, tu n'obtiens pas tout le temps le même résultat
(je suis même arrivé à obtenir ligne 3 niveau 6 !)


EDIT :
En fait je viens de comprendre :
quand tu cliques sur un item : le niveau affiché ne correspond pas au niveau de l'item mais à la zone où se trouve le pointeur de souris au moment du clic.

Si par exemple tu sélectionnes a11111111 en cliquant le plus a gauche possible, tu va obtenir "ligne 3 niveau 0"
et si tu cliques le plus à droite possible tu vas avoir "ligne 3 niveau 9"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Contenu sponsorisé




MessageSujet: Re: Simulation d'un objet TreeView   

Revenir en haut Aller en bas
 
Simulation d'un objet TreeView
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Impossible d'accéder à un objet supprimé.
» Passer un objet devant les autres (ou derrière)
» Opération sur objet EDIT
» Simulation - forçage état des cantons
» Savoir sur quel objet un évènement a eu lieu

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