FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Simulation d'un objet TreeView Emptypar jjn4 Hier à 17:49

» select intégrés [résolu]
Simulation d'un objet TreeView Emptypar jjn4 Hier à 17:00

» number_mouse_up
Simulation d'un objet TreeView Emptypar jjn4 Hier à 11:59

» Aide de PANORAMIC
Simulation d'un objet TreeView Emptypar jjn4 Hier à 11:16

» trop de fichiers en cours
Simulation d'un objet TreeView Emptypar lepetitmarocain Hier à 10:43

» Je teste PANORAMIC V 1 beta 1
Simulation d'un objet TreeView Emptypar papydall Hier à 4:17

» bouton dans autre form que 0
Simulation d'un objet TreeView Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Simulation d'un objet TreeView Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Simulation d'un objet TreeView Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Simulation d'un objet TreeView Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Simulation d'un objet TreeView Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Simulation d'un objet TreeView Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Simulation d'un objet TreeView Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Simulation d'un objet TreeView Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Simulation d'un objet TreeView Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

 

 Simulation d'un objet TreeView

Aller en bas 
+3
Jicehel
Nardo26
Klaus
7 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 0:41

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
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 4:51

Interessant Klaus ! Simulation d'un objet TreeView 18

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
http://nardo26.lescigales.org
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 7:18

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
bignono

bignono


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 8:25

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
Francis-mr




Nombre de messages : 186
Date d'inscription : 26/11/2012

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 9:11

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
Jean Claude

Jean Claude


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 9:39

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
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 9:55

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
http://nardo26.lescigales.org
Francis-mr




Nombre de messages : 186
Date d'inscription : 26/11/2012

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 10:13

Merci Nardo,
Avec cette version, même si ce programme est qu'une ébauche, ça marche mieux.
Revenir en haut Aller en bas
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 10:17

@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 : Simulation d'un objet TreeView 07
Simulation d'un objet TreeView Arbo

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 5 Déc 2012 - 12:48, édité 2 fois (Raison : ortograffe)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 11:37

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
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 11:50

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
Simulation d'un objet TreeView 07
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 12:39

?????

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
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 12:44

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

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 12:54

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
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 13:07

ça marche ! Simulation d'un objet TreeView 18
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 !!! Simulation d'un objet TreeView 11
Revenir en haut Aller en bas
http://nardo26.lescigales.org
papydall

papydall


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 13:46

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
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 14:15

@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
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 14:43

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
http://nardo26.lescigales.org
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 17:25

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

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 17:31

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
http://nardo26.lescigales.org
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 17:58

Effecctivement.

Je continue à "déplier"...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 21:53

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
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 22:06

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
Klaus

Klaus


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyMer 5 Déc 2012 - 22:19

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
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


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

Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView EmptyJeu 6 Déc 2012 - 7:14

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
http://nardo26.lescigales.org
Contenu sponsorisé





Simulation d'un objet TreeView Empty
MessageSujet: Re: Simulation d'un objet TreeView   Simulation d'un objet TreeView Empty

Revenir en haut Aller en bas
 
Simulation d'un objet TreeView
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» TreeView en Panoramic
» Simulation de la fonction IIF
» Détermine si oui ou non un objet est PARENT d'un autre objet
» Où j'en suis ...
» Automate cellulaire : simulation de feu de forêt

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: