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
» mise a jour calculatrice
par joeeee2017 Aujourd'hui à 22:44

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Aujourd'hui à 16:52

» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 14:16

» Compilateur FBPano
par Ouf_ca_passe Aujourd'hui à 12:25

» double guillemets "" dans un EDIT
par Marc Hier à 23:43

» Documentation de KGF
par Klaus Lun 20 Nov 2017 - 22:52

» Zoom sur une portion d'écran
par JL35 Lun 20 Nov 2017 - 21:51

» Recherche d'une expression dans un source
par Marc Lun 20 Nov 2017 - 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 Comment redimensionner une GLIST

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Nardo26

avatar

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

MessageSujet: Comment redimensionner une GLIST   Mar 14 Sep 2010 - 18:19

Avec mon programme de filtrage de fichier log, Je suis parti pour faire un truc un peu plus complexe que prévu : bon c'est peut être se prendre la tête pour pas grand chose, mais je trouve que c'est un bon exercice et puis si ça peut donner des idées à certains, pourquoi pas ?

- J'ai mis en place une GList car ce qui m'intéresse c'est d'avoir des attributs d'affichage différents suivant les items. J'ai prévu d'intercepter le clic droit sur item pour pouvoir changer ces attributs (bold dans un 1er temps, plus tard peut être un menu pop-up )

- Mon formulaire est redimensionnable donc j'ai l'intention que la GList le soit également (c'est pas terrible d'avoir un grand formulaire sur un grand écran avec une Glist toute rikiki ou l'inverse) Smile

Donc j'ai commencé à écrire une procédure de redimensionnement. Comme c'est une question un peu technique et qu'à mon avis il n'y a que le concepteur des GLIST qui peut me répondre, je fais une description sommaire de mon problème :


  • une GLIST ListFiltre% dans Form 0. (ListFiltre%+1:picture ListFiltre%+2:scrollbar)
  • un timer TimerEvent% qui compare les dimensions du formulaire par rapport à des variables de mémorisation. En cas de différence -> appel à une procédure : Resize.
  • IndexGestionGlist% qui correspond à GLIST_Index%


Ce qui se passe :
Le redimensionnenment du picture et du scrollbar est correct mais:
Lorsque je clique sur l'ascenseur vertical, celui-ci s'affole et à même tendance à vouloir bloquer mon prog...

Les procédures :
Code:

TimerEvent:
  timer_off MainTimer% : 'comme cela risque d'être long, je coupe le timer...
  if (ClientW <> width(0) or ClientH <> height(0)) then gosub Resize
  ClientW = width(0) : ClientH = height(0)
  timer_on MainTimer%
return

Resize:
  ' je redéfini la hauteur d'affichage par rapport à form 0 + une petite marge de 40 pixels...
  GLIST_hauteur_affichage%(IndexGestionGlist%) = height(0)-top(ListFiltre%+1)-40
  ' conversion en nb de ligne
  GLIST_lignes_affichage%(IndexGestionGlist%) = GLIST_hauteur_affichage%(IndexGestionGlist%) / 14
  ' on applique sur le picture et le scrollbar
  height ListFiltre%+1,GLIST_hauteur_affichage%(IndexGestionGlist%)
  height ListFiltre%+2,GLIST_hauteur_affichage%(IndexGestionGlist%)

  GLIST_largeur_affichage%(IndexGestionGlist%) = width(0)-left(ListFiltre%+1)-35
  width ListFiltre%+1,GLIST_largeur_affichage%(IndexGestionGlist%)
  left ListFiltre%+2,GLIST_left_affichage%(IndexGestionGlist%) + GLIST_largeur_affichage%(IndexGestionGlist%) + 4

  GLIST_nombre_dans_liste%(IndexGestionGlist%) = count(ListFiltre%)
  GLIST_n% = GLIST_nombre_dans_liste%(IndexGestionGlist%) - GLIST_lignes_affichage%(IndexGestionGlist%)+1
  if GLIST_nombre_dans_liste%(IndexGestionGlist%)<GLIST_lignes_affichage%(IndexGestionGlist%) then GLIST_n% = 1
  max ListFiltre%+2,GLIST_n%
  if GLIST_nr%(IndexGestionGlist%)=0 then GLIST_nr%(IndexGestionGlist%) = 1
  gosub GLIST_changeb
  2d_target_is ListFiltre% + 1
  print_target_is ListFiltre% + 1
  ' j'en profite pour redimensionner un autre objet (ya pas d'raison !)
  width EditFiltre%,width(ListFiltre%+1)
return

Je me suis appuyé sur le code de GLIST_create...
J'ai du certainement oublier quelque chose Klaus, pourtant tout me parait correctement initialisé.... scratch
J'aimerai bien avoir ton avis d'Expert ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Mar 14 Sep 2010 - 18:51

Pourrais-tu regarder, juste avant d'appeler GLIST_changeb, les valeurs pour min et max de la scroll_bar ? Je peux aussi de conseiller de faire off_change sur la scroll_bar avant toute modification de ses paramètres, et de refaire on_change xxx,GLIST_change juste avant d'appeler GLIST_changeb.
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: Comment redimensionner une GLIST   Mar 14 Sep 2010 - 19:54

Hello Klaus!

Je viens de faire l'essai :
J'ai désactivé le scrollbar en début de resize (off_change ListFiltre%+2) puis je le réactive en fin (on_change ListeFiltre%+2, GLIST_change)
le max, après chargement d'un fichier log est à 785...
Si je fais 1 clic (un seul, bref ~ 0.3 sec) dans le scrollbar en dessous du curseur, celui-ci se déplace jusqu'au pointeur de la souris (le rectangle en dessous du curseur reste noir durant tout le déplacement). Pendant ce temps, le picture clignote à fond. Quand le scrollbar atteint le pointeur de souris, le picture clignote encore quelques secondes avant de s'arrêter...si je redéplace la souris un peu plus bas, le curseur se redéplace ! (alors que le bouton de la souris n'est pas enclenché)


Une idée ? le timer pendant toute cette opération est désactivé.

PS: J'ai pas bien compris à quoi correspondait GLIST_nr%

Ci-joint mon prog. Tu charges n'importe quel fichier texte de plusieurs lignes. Puis amuse toi à cliquer en dessous du curseur du scrollbar...
Je viens de m'apercevoir que le problème est présent même si je ne change pas la taille du formulaire... donc cela serait plutôt dans GLIST.bas qu'il faudrait regarder...
Code:

hide 0
caption 0,"Log Analyser"
dim Verbose%:Verbose%=1


label FinProg,Open_log,Filtre
label TimerEvent,Resize
label SearchParam

label Plage  : dim Plage_return%,Plage_param$
label Search : dim Search_return%
label Copy  : dim Copy$

' -------------------------------------------------------
' Déclaration d'une GLIST
' -------------------------------------------------------
label Glist_function : dim GLIST_params$
label GLIST_err

label TimerButtonGlist : ' Timer pour détection bouton souris sur objet GLIST

' -------------------------------------------------------
'              Définition des numéros d'objets
' -------------------------------------------------------

if Verbose% = 1
  dim FormDebug%:FormDebug%=1
  dim ListDebug%:ListDebug%=2
end_if

dim crlf$: crlf$=chr$(13)+chr$(10)

dim EditFiltre%:EditFiltre%=10
dim TextFiltre%:TextFiltre%=11
dim SelectFile%:SelectFile%=12
dim EditPlage% :EditPlage% =13
dim TextPlage% :TextPlage% =14
dim EditPlage2%:EditPlage2%=15
dim TextPlage2%:TextPlage2%=16
dim TrackBar%  :TrackBar% = 17

dim ButtonLoad%:ButtonLoad%=100
dim ButtonQuit%:ButtonQuit%=101
dim ButtonCopy%:ButtonCopy%=102

dim ListBuffer%:ListBuffer%=200
dim ListBuffer2%:ListBuffer2%=201

dim ListFiltre%:ListFiltre%=300

dim MainTimer% :MainTimer% =400
dim TimerButtonGlist%:TimerButtonGlist%=401

' -------------------------------------------------------
'                Déclaration des variables
' -------------------------------------------------------
dim Plage_start%,Plage_end%

dim fichier$,filtre$,ligne$
dim i%
dim params$,TabParam$(10,2),j%,k%
dim Search_i%,Search_j%
dim ClientH,ClientW,OldClientH,OldClientW
dim Boucle%:Boucle%=0

dim ListFiltre_left%,ListFiltre_top%,ListFiltre_width%,ListFiltre_height%
dim IndexGestionGlist%

' variables pour évènement clic droit sur GLIST
dim TimerButtonGlist_x%,TimerButtonGlist_y%,TimerButtonGlist_index%, GLIST_mouse_right%

' ---- Init des variables
ClientW=0:ClientH=0
OldClientW=1:OldClientH=1
GLIST_mouse_right% = 0
' -------------------------------------------------------
'                  Déclaration des objets
' -------------------------------------------------------
' ---- Debug
if (Verbose% = 1)
  form FormDebug%
  memo ListDebug%:parent ListDebug%,FormDebug% : full_space  ListDebug%
  caption FormDebug%,"Debug"
end_if

' ---- IHM
open_dialog SelectFile%: filter SelectFile%,"Log Files|*.log|Text Files|*.txt|All Files|*.*"
button ButtonLoad%:caption ButtonLoad%,"Open":top ButtonLoad%,height(ButtonLoad%)*2:left ButtonLoad%,5
button ButtonCopy%:caption ButtonCopy%,"Copy":top ButtonCopy%,top(ButtonLoad%)+height(ButtonLoad%)+5:left ButtonCopy%,5
button ButtonQuit%:caption ButtonQuit%,"Exit":top ButtonQuit%,top(ButtonCopy%)+height(ButtonCopy%)+5:left ButtonQuit%,5

dlist ListBuffer% : ' Liste initiale contenant le fichier de log
dlist ListBuffer2%: ' Liste après 1er filtrage

ListFiltre_left%  = left(ButtonLoad%)+width(ButtonLoad%)+10
ListFiltre_width% = width(0) - ListFiltre_left% - 15

' list ListFiltre%  : ' Liste affichée
' left ListFiltre%,left(ButtonLoad%)+width(ButtonLoad%)+10
' width ListFiltre%,width(0)-left(ListFiltre%)-15
' height ListFiltre%,height(0)-top(ListFiltre%)-40


edit EditFiltre%:left EditFiltre%, ListFiltre_left% : width EditFiltre%,ListFiltre_width%
alpha TextFiltre%:caption TextFiltre%,"Filter :":top TextFiltre%,5 : left TextFiltre%, left(EditFiltre%)-width(TextFiltre%)-10

alpha TextPlage%:left TextPlage%,left(EditFiltre%):caption TextPlage%,"Start : ":top TextPlage%,top(EditFiltre%)+height(EditFiltre%)+10
edit EditPlage%:left EditPlage%,left(TextPlage%)+width(TextPlage%)+10:top EditPlage%,top(EditFiltre%)+height(EditFiltre%)+5
alpha TextPlage2%:left TextPlage2%,left(EditPlage%)+width(EditPlage%)+20:caption TextPlage2%,"End : ":top TextPlage2%,top(EditFiltre%)+height(EditFiltre%)+10
edit EditPlage2%:left EditPlage2%,left(TextPlage2%)+width(TextPlage2%)+10:top EditPlage2%,top(EditFiltre%)+height(EditFiltre%)+5

' top ListFiltre%,top(EditPlage%)+height(EditPlage%)+5
ListFiltre_top%= top(EditPlage%)+height(EditPlage%)+5
ListFiltre_height%= height(0)-ListFiltre_top%-40

GLIST_params$="Create|N="+str$(ListFiltre%)+"|A=8|W="+str$(ListFiltre_width%)+"|T="+str$(ListFiltre_top%)+"|L="+str$(ListFiltre_left%)+"|"
gosub GLIST_function                                      : ' ajouter une ligne à la fin
GLIST_params$ = "Attributs|1=255,0,0|2=G0,0,255|3=255,255,0|"
gosub GLIST_function                                      : ' créer les attributs
GLIST_params$ = "Revelation|4|"
gosub GLIST_function                                      : ' choisir la révélation
GLIST_params$ = "Mode|silent|" : gosub GLIST_function

for IndexGestionGlist% = 1 to GLIST_n_listes%
  if GLIST_liste_listes%(IndexGestionGlist%)=ListFiltre% then exit_for
next i%


timer MainTimer% : Timer_off MainTimer% : timer_interval MainTimer%,500
timer TimerButtonGlist% : Timer_off TimerButtonGlist% : timer_interval TimerButtonGlist%, 100


' -------------------------------------------------------
'  Définition des actions à lancer sur évènements :
' -------------------------------------------------------
on_click ButtonLoad%,Open_log
on_click ButtonQuit%,FinProg
on_click ButtonCopy%,Copy
on_change EditFiltre%,Filtre
on_close 0,FinProg


' ---- Affichage du formulaire principal
left 0,(screen_x - width(0))/2
top 0,(screen_y - height(0))/2
' wait 2000
gosub Resize
show 0

on_timer MainTimer%,TimerEvent
on_timer TimerButtonGlist%, TimerButtonGlist


timer_on TimerButtonGlist%
timer_on MainTimer%
END

' *****************************************************************************************
' *              FIN D'INITIALISATION DU PROGRAMME
' *****************************************************************************************

FinProg:
 Boucle%=1
 Terminate

TimerEvent:
  timer_off MainTimer%
  if (ClientW <> width(0) or ClientH <> height(0)) then gosub Resize
  ClientW = width(0) : ClientH = height(0)
  timer_on MainTimer%
return

Resize:
  off_change ListFiltre%+2
  GLIST_hauteur_affichage%(IndexGestionGlist%) = height(0)-top(ListFiltre%+1)-40
  GLIST_lignes_affichage%(IndexGestionGlist%) = GLIST_hauteur_affichage%(IndexGestionGlist%) / 14
  height ListFiltre%+1,GLIST_hauteur_affichage%(IndexGestionGlist%)
  height ListFiltre%+2,GLIST_hauteur_affichage%(IndexGestionGlist%)

  GLIST_largeur_affichage%(IndexGestionGlist%) = width(0)-left(ListFiltre%+1)-35
  width ListFiltre%+1,GLIST_largeur_affichage%(IndexGestionGlist%)
  left ListFiltre%+2,GLIST_left_affichage%(IndexGestionGlist%) + GLIST_largeur_affichage%(IndexGestionGlist%) + 4

  GLIST_nombre_dans_liste%(IndexGestionGlist%) = count(ListFiltre%)
  GLIST_n% = GLIST_nombre_dans_liste%(IndexGestionGlist%) - GLIST_lignes_affichage%(IndexGestionGlist%)+1
  if GLIST_nombre_dans_liste%(IndexGestionGlist%)<GLIST_lignes_affichage%(IndexGestionGlist%) then GLIST_n% = 1
  max ListFiltre%+2,GLIST_n%
  if GLIST_nr%(IndexGestionGlist%)=0 then GLIST_nr%(IndexGestionGlist%) = 1
  if (Verbose%=1) then item_add ListDebug%,"Resize :"+str$(GLIST_n%)
  if (Verbose%=1) then item_add ListDebug%,"Resize :"+str$(GLIST_nr%(IndexGestionGlist%))
  gosub GLIST_changeb
  on_change ListFiltre%+2,GLIST_change
  width EditFiltre%,width(ListFiltre%+1)
return

' -------------------------------------------------------
'            Ouverture du fichier de log
' -------------------------------------------------------
Open_log:
  fichier$ = FILE_NAME$(SelectFile%)
  if (fichier$ <> "_")
      FILE_LOAD ListBuffer%,fichier$
'      Timer_on MainTimer%
      gosub Filtre
  end_if
return

' -----------------------------------------------------------------------------------------
' -----------------------------------------------------------------------------------------
Copy:
  Copy$=""
  for i% = 1 to count(ListFiltre%)
      Copy$ = Copy$ + crlf$ + item_read$(ListFiltre%,i%)
  next i%
  clipboard_string_copy Copy$
return

' -----------------------------------------------------------------------------------------
' Procédure de mise à jour de l'affichage de la liste en fonction des paramètres de filtre.
'  - appelée sur évènement on_change ou après chargement du fichier log
' ListBuffer% contient le fichier original
' ListBuffer2% contient le fichier après traitement du filtre params$
' ListFiltre% contient ListBuffer2% après traitement des plages horaires
' -----------------------------------------------------------------------------------------
Filtre:
  params$ = text$(EditFiltre%): gosub SearchParam
  clear ListBuffer2%
  ' clear ListFiltre%
  GLIST_params$="Total|" : gosub GLIST_function
  if val(GLIST_params$)<> 0
      GLIST_params$="Clear|" : gosub GLIST_function
  end_if

  for i%=1 to count(ListBuffer%)
      ligne$ = item_read$(ListBuffer%,i%)
      ' Si pas de paramètres de filtrage, on ajoute la ligne
      if (val(TabParam$(0,1)) = 0)
        item_add ListBuffer2%,ligne$
      ' sinon on regarde par rapport aux critères du filtre
      else
        gosub Search
        if (Search_return%<>0) then item_add ListBuffer2%,ligne$
      end_if
  next i%

  ' On filtre par rapport à une éventuelle plage horaire
  if (count(ListBuffer2%) <> 0)
      Plage_param$ = text$(EditPlage%)
      if (len(Plage_param$) <> 0)
        gosub Plage : Plage_start% = Plage_return%
      else
        if (Verbose%=1) then item_add ListDebug%,"Pas d'horaire de début"
        Plage_start%=0
      end_if
      Plage_param$ = text$(EditPlage2%)
      if (len(Plage_param$) <> 0)
        gosub Plage : Plage_end% = Plage_return%
      else
        if (Verbose%=1) then item_add ListDebug%,"Pas d'horaire de fin"
        Plage_end%=0
      end_if
 
      for i% = 1 to count(ListBuffer2%)
        if ((Plage_start% <> 0) or (Plage_end%<>0)) : ' si plage horaire de définie
          ' manque test si horaire en début de ligne...
          Plage_param$ = left$(item_read$(ListBuffer2%,i%),8)
          if mid$(Plage_param$,3,1)=":"
              gosub Plage
              if ((Plage_start%=0) or (Plage_return% > Plage_start%)) and ((Plage_end% = 0) or (Plage_return% < Plage_end%))
                GLIST_params$="Item_add|"+item_read$(ListBuffer2%,i%)+"|" : gosub GLIST_function
                ' item_add ListFiltre%,item_read$(ListBuffer2%,i%)
              end_if
              ' if ( (Plage_return% > Plage_start%) and (Plage_return% < Plage_end%)) then item_add ListFiltre%,item_read$(ListBuffer2%,i%)
          end_if
        else
          GLIST_params$="Item_add|"+item_read$(ListBuffer2%,i%)+"|" : gosub GLIST_function
          ' item_add ListFiltre%,item_read$(ListBuffer2%,i%)
        end_if
      next i%
  end_if
return

' -------------------------------------------------------
' Conversion d'un horaire "HH:MN:SS" en valeur numérique
' -------------------------------------------------------
Plage:
 if (Verbose% = 1) then item_add ListDebug%,"Plage: param ->"+Plage_param$
 if (len(Plage_param$)=2) then Plage_param$=Plage_param$+":00"
 if (len(Plage_param$)=5) then Plage_param$=Plage_param$+":00"
 Plage_return% = (val(left$(Plage_param$,2))*3600)+(val(mid$(Plage_param$,4,2))*60)+(val(right$(Plage_param$,2)))
 if (Verbose% = 1)
  item_add ListDebug%,str$(Plage_return%)
  item_add ListDebug%, "---------------------------------------"
 end_if
return


' -------------------------------------------------------
' -------------------------------------------------------
Search:
  Search_return% = instr(ligne$,TabParam$(1,0))
  for Search_i% = 2 to val(TabParam$(0,1))
    if (TabParam$(Search_i%-1,1) = "&")
      if (instr(ligne$,TabParam$(Search_i%,0)) = 0)
        Search_return%=0
        exit_for
      end_if
    end_if
    if (TabParam$(Search_i%-1,1) = "|")
      Search_return% = Search_return% + instr(ligne$,TabParam$(Search_i%,0))
    end_if
    if (TabParam$(Search_i%-1,1) = "")
      if (instr(ligne$,TabParam$(Search_i%,0)) = 0)
          if (Search_return% = 1) then Search_return% = Search_return% + 1
      else
          Search_return% = 0
      end_if
    end_if
  next Search_i%
return

SearchParam:
  ' raz du tableau de paramètre
  for i% = 0 to 10:  TabParam$(i%,0)= "" : TabParam$(i%,1) = "" : next i%
  if (len(params$) = 0)
    TabParam$(0,1) = "0"
    return
  end_if
  TabParam$(0,1) = "1" : j% = 0
  for i% = 1 to len(params$)
    if (mid$(params$,i%,1) = "&") or (mid$(params$,i%,1) = "|") or (mid$(params$,i%,1) = "")
      TabParam$(val(TabParam$(0,1)),1) = mid$(params$,i%,1)
      TabParam$(0,1) = str$(val(TabParam$(0,1))+1)
    else
      TabParam$(val(TabParam$(0,1)),0) = TabParam$(val(TabParam$(0,1)),0) + mid$(params$,i%,1)
    end_if
  next i%
  if (Verbose% = 1)
    Item_add ListDebug%,"Nb de paramètre :"+TabParam$(0,1)
    Item_add ListDebug%, TabParam$(1,0)+" = "+TabParam$(1,1)
    Item_add ListDebug%, TabParam$(2,0)+" = "+TabParam$(2,1)
    Item_add ListDebug%, "---------------------------------------"
  end_if
return


' -------------------------------------------------------
'        TRAITEMENT EVENEMENTS SOURIS SUR GLIST
' -------------------------------------------------------
TimerButtonGlist:
  timer_off TimerButtonGlist%
  if left$(GLIST_params$,6)="Liste "
    message "Prog principal :"+GLIST_params$
    GLIST_params$=""
  end_if
  ' état du bouton droit de la souris
  if mouse_right_down(ListFiltre%+1)=1
    GLIST_mouse_right% = 1 : ' memo appui sur bouton
  else
    if mouse_right_up(ListFiltre%+1)=1 : ' attente relachement bouton
      GLIST_mouse_right% = 0 : ' raz appui sur bouton
    end_if
  end_if

  if (GLIST_mouse_right% = 1)
    if (TimerButtonGlist_index% = 0) : ' si item pas encore défini
      TimerButtonGlist_x% = 0 : TimerButtonGlist_y% = 0
      TimerButtonGlist_x% = mouse_x_right_down(ListFiltre%+1)
      TimerButtonGlist_y% = mouse_y_right_down(ListFiltre%+1)
      ' si position de la souris dans la liste :
      if TimerButtonGlist_x% <> 0
        TimerButtonGlist_index% = GLIST_nr%(IndexGestionGlist%) + int((TimerButtonGlist_y%+13)/14) - 1
        GLIST_params$ = "Selected|" : gosub GLIST_function
        if val(GLIST_params$)<>TimerButtonGlist_index%
          GLIST_params$ = "Item_select|"+str$(TimerButtonGlist_index%)+"|" : gosub GLIST_function
          ' --------------------------------------------------
          '    Application : début du traitement du clic droit
          ' --------------------------------------------------
          ' ici on met ce que l'on veut...
          ' --------------------------------------------------
          '    Application : Fin du traitement
          ' --------------------------------------------------
        end_if
      end_if
    end_if
  ' --- bouton droit relaché
  else
    TimerButtonGlist_index% = 0
  end_if
  timer_on TimerButtonGlist%
return


' *****************************************************************************************
' *        Objet GLIST
' *****************************************************************************************
#INCLUDE "H:\Perso\Dev\Panoramic\GLIST\GLIST.bas"

' *****************************************************************************************

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

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Mar 14 Sep 2010 - 20:28

OK, je debugge cela et te tiens au courant...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Mer 15 Sep 2010 - 13:22

J'ai pris ton programme et je l'ai utilisé tel quel, après avolir changé le chemin d'accès dans la directive #INCLUDE.

Et je n'ai aucun problème pour redimensionner la fenêtre. Je tire les bords de la form 0 avec la souris, et la GLIST s'adapte parfaitement. On peut bouger l'ascenseur sans problème, et un click en-dessous ou au-dessus du curseur de l'ascenseur produit bien le résultat escompté et aucun bloquage. Je suis perplexe...

Ceci dit, ton code pour le redimensionnement est très intéressant, et j'ai bien envie de rajouter une fonction à l'objet GLIST en utilisant ton code:
GLIST_params$ = "Layout|T=n|L=n|H=n|W=n|"
avec: T=top L=left H=height W=width
Qu'est-ce que tu en penses ?
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: Comment redimensionner une GLIST   Mer 15 Sep 2010 - 14:00

Why not ?

[edit:]
Par contre, dans mon applic, la liste clignote beaucoup.... (2d_clear à chaque item_add même si l'item ajouté n'est pas visible...
peut-on envisager d'avoir la construction de la liste en fct de nb ligne en arrière-plan/ caché de manière à ce qu'elle s'affiche d'un coup.
qu'en penses-tu ? cela éviterait d'avoir ce clignotement.
En gros lorsque le nb de ligne visible est atteint, ne faire que le redraw du scrollbar...


Le problème du scrollbar apparait lorsque l'on charge un gros fichier (ce qui sera la plupart du temps mon cas), genre 800/900 lignes. Sur de petits fichiers le problème n'apparait pas...

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

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Mer 15 Sep 2010 - 19:52

Merci pour ton accord - je vais m'y mettre !

Pour ce qui est des gros fichiers: j'ai chargé GLIST.bas qui fait 1085 lignes. Est-ce que tu as essayé de déplacer le curseur après avoir cliqué en_dessous du bouton de l'ascenseur ? Tant que le curseur reste dans cet espace qui est le rectangle de la scroll_bar entre le bouton mobile et la butée, le déplacement continue, ligne par ligne. Dès que tu sors le curseur (sans cliquer, juste en bougeant la souris), cela s'arrête dès que le nombre de décalages prévus est atteint. Si tu repositionnes le curseur dans cet espace, le déplacement reprend, etc jusqu'à ce que le bouton de la scroll_bar atteigne le curseur.

Si tu sors le curseur de la scroll_bar, il n'y a pas de blocage du programme, tout fonctionne normalement.

C'est vrai que je n'avais pas conscience de ce comportement auparavant; je vais voir d'où cela vient. C'est comme si la scroll_bar recevait en permanence un évènement "on_change" tant que le curseur reste dans l'espace décrit plus haut. Je te tiendrai au courant.

Ceci dit, l'effet du redimensionnement est saisissant: en tirant les bords de la fenêtre avec la souris, ou en maximisant la fenêtre, tout s'adapte automatiquement - c'est impeccable !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Mer 15 Sep 2010 - 20:22

J'ai regardé un peu le fonctionnement de la scroll_bar. En fait, c'est un problème qui semble lié à Panoramic et qui correspond au fonctionnement normal de la scroll_bar. Si tu prends soin de faire un seul clic dans la zone en_dessous du bouton, la liste remonte bien d'une seule ligne, pas plus. S'il y a double clic ou maintien de la souris, alors, l'évènement est reproduit jusqu'à ce que le bouton rejoigne le curseur, ou que le curseur quitte la zone. Le signe visuel de cette action, est la couleur noire de l'espace entre le bouton et la butée. Tant que la couleur est noire, il y a répétition automatique.

Tu peux le reproduire très simplement avec:
Code:

label change_10

scroll_bar 10 : vertical 10 : top 10,10 : left 10,10
on_change 10,change_10

alpha 20 : top 20,10 : left 20,50

end

change_10:
caption 20,str$(position(10))
return


Essaie de cliquer en-dessous du bouton en laissant le bouton de la souris enfoncé...
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: Comment redimensionner une GLIST   Mer 15 Sep 2010 - 20:32

nos messages ce sont croisés :

ce que je voulais dire avant ton post :

on a vraiment l'impression d'avoir une floppé de on_change...
du coup j'ai fait un essai :

dans GLIST.bas
juste avant avant le label GLIST_changeb, j'ai rajouter :

off_change GLIST_numero_objet%+2

puis juste avant le return (en dessous de GLIST_fin2) j'ai réactivé le on_change:
on_change GLIST_numero_objet%+2,GLIST_change

ce n'est certainement pas très beau et cela ne doit pas forcement marcher dans tout les cas mais en faisant ces modifs je constate une nette amélioration dans le comportement du scrollbar.... (je reste moins bloqué pdt le déplacement du curseur)
Qu'en penses-tu ?
C'est une idée que je me fais ou cela apporte quelque chose ?
(par analogie : c'est comme l'histoire des timers où il est préférable de le stopper pdt l'execution de la routine non?)

EDIT: Le problème est réapparu lorsque j'ai installé la dernière version de pano...
Si tu as encore la version de juin, fait l'essai : le comportement est différent et j'ai l'impression que le rafraichissement du picture est plus rapide...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Jeu 16 Sep 2010 - 0:45

Je regarderai ça - c'est une idée à creuser. Et non, je n'ai plus les versions précédentes...
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: Comment redimensionner une GLIST   Jeu 16 Sep 2010 - 8:13

Une autre idée qui m'est venu, concernant le clignotement :
Pourquoi ne pas faire une permutation de picture? (un peu dans le même style que pour effacer un tab)
l'inconvénient c'est que cela rajoute un objet supplémentaire:
le défilement me parait plus "doux"...
Qu'en penses-tu ?
bon je sais que c'est pas évident, que les GLIST sont adaptées pour des petites listes.
Si tu trouves que j'essaye d'enfoncer des portes ouvertes, dis-le moi.... Wink

Code:

label endProg,redraw
on_close 0,endProg

dim i,nb_ligne,idPic,idLigne
nb_ligne=20:idLigne = 1


picture 1 : hide 1 : height 1, 400 : idPic=1
picture 2 :hide 2  : height 2, 400
dlist 3
for i=1 to 200 : item_add 3,"ligne "+str$(i):next i
' init
gosub redraw
for idLigne = 1 to 200
 gosub redraw
 wait 300
next idLigne

END

endProg:
terminate
return

redraw:
 print_target_is idPic
 for i=idLigne to idLigne+nb_ligne
    print item_read$(3,i)
 next i
 show idPic
 idPic = bin_xor(idPic,3)
 hide idPic
 2d_target_is idPic
 2d_clear : ' <-- cette instruction me plais pas, mais y a pas vraiment de choix, à part file_load d'une liste vide et encore on y gagne pas grand chose
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Jeu 16 Sep 2010 - 11:20

Le problème est réellement lié à la scroll_bar de Panoramic. Essaie de double-cliquer sur la flèche en bas de la scroll_bar...

Je suis en train de remplacer la scroll_bar par un picture dans lequel je gère moi-même les boutons et déplacements, et du coup, le problème sera résolu. Un peu de patience...
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: Comment redimensionner une GLIST   Jeu 16 Sep 2010 - 11:46

Bonjour Klaus !

Attend !!!

Essaye le petit programme ci-dessous...
--> pas de pb sur le scrollbar.

Il fonctionne !!! Suspect


Code:

label endProg,redraw,TestScroll
' on_close 0,endProg  : rem cette commande plante

dim i,largeur,nb_ligne%,idPic,idLigne,nb_elements%,a$
nb_ligne%=20
idLigne = 1
largeur = 200
nb_elements%=14*50

picture 1 : hide 1 : width 1,largeur : height 1, 14*nb_ligne% : idPic=1
picture 2 :hide 2  : width 2,largeur : height 2, 14*nb_ligne%
dlist 3
scroll_bar 4 : vertical 4: left 4,largeur+3: height 4, 14 * nb_ligne%
min 4,1 : max 4,nb_elements%-nb_ligne%
on_change 4, TestScroll
button 5: on_click 5, endProg: left 5,10: caption 5,"Quitter": top 5,height(1)+10

' init
for i=1 to nb_elements%+1
  a$="ligne "+str$(i)
  item_add 3,a$
next i
gosub redraw


END

endProg:
  terminate
return

TestScroll:
  idLigne=position(4)
  caption 0,str$(idLigne)+":"+str$(count(3))
  gosub redraw
return

redraw:
 print_target_is idPic
 for i=idLigne to idLigne+nb_ligne%
    if (i/7)=int(i/7)
      font_color idPic,255,0,0
      font_bold idPic
    else
      font_color idPic,0,0,0
      font_bold_off idPic
    end_if
    print item_read$(3,i)
 next i
 show idPic
 idPic = bin_xor(idPic,3)
 hide idPic
 2d_target_is idPic
 2d_clear : ' <-- cette instruction me plais pas, mais y a pas vraiment de choix, à part file_load d'une liste vide et encore on y gagne pas grand chose
return

[Edit:] je ne comprend pas : tous les caractères '+' avaient disparu dans le code.... bizarre...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Jeu 16 Sep 2010 - 13:55

Je suis d'accord avec toi: pas de problème apparent. Mais le fonctionnement est identique au programme que tu as posté auparavant, celui avec le filtre... Là aussi, la scroll_bar fonctionne de la même manière. Le problème devient visible si l'on garde le bouton de la souris enfoncé au_dessus de la scroll_bar, ou en double-cliquant sur le bouton du bas eu dans la zone de défilement rapide qui se met alors en noir et passe en mode répétition - tout comme dans le programme que tu viens de poster. Un simple programme de deux lignes avec une scroll_bar par défaut montre cela également.

Puis, je me suis aperçu que je ne peux pas programmer un décalage autre que 1 pour la croll_bar, et seul l'évènement on_change est utilisable. On ne peut pas intercepter on_click ni connaître la position du clic de la souris dans la zone de défilement rapide. C'est pourquoi je suis en train de me faire une scroll_bar "maison" qui permet tout cela.

Ton astuce avec les deus picture pour l'affichage est intéressante - j'ai de mon côté ajouté un hide avant le réaffichage du picture et un show après. Cela améliore l'aspect visuel de façon similaire. J'étudierai la différence et adapterai la meilleure solution.
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: Comment redimensionner une GLIST   Jeu 16 Sep 2010 - 15:01

Au sujet du pas d'incrementation ou de décrémentaion du curseur:

Ce qui est bien dommage, c'est qu'apparemment toutes les commandes MOUSE_X_#### et MOUSE_Y_#### ne fonctionnent pas sur un scrollbar...

Un truc qui manque aussi c'est de pouvoir adapter la dimension du curseur du scrollbar en fct de sa plage MIN/MAX et de la zone d'affichage...

L'ordre des HIDE / SHOW
J'ai volontairement mis le show avant le hide, car dans le cas inverse, on risque de voir apparaitre pendant un bref instant le fond du form 0. Ce qui provoquerai un clignotement visible...
Dans mon cas, le clignotement existe aussi mais entre 2 fonds blancs, cela est moins flagrant...

Le scrollbar en lui-même
J'ai bien peur que, comme tu dis, il faille faire un scrollbar "maison" pour avoir l'évènement on_click... Neutral


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

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Ven 17 Sep 2010 - 0:57

1. Je partage ton analyse sur la possibilité/impossibilité de traiter les évènements souris sur la scroll bar. Effectivement, dommage.

2. J'avais bien compris l'ordre show/hide dans ton code. C'est effectivement bien comme ça. Quand je parlais de show/hide, c'étaient des commandes que j'ai ajoutées dans le traitement de changement de scroll_bar dans mon source, pour éviter les preturbations d'affichage en manipulant la scroll_bar. Cela apporte un mieux, mais ce n'est pas la panacée.

3. Je suis en train de coder la scroll_bar maison, et ça avance bien... A bientôt pour des nouvelles plus précises !
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: Comment redimensionner une GLIST   Ven 17 Sep 2010 - 1:11

Bonsoir Klaus,

je regarde GLIST.bas pour voir si il n'y a pas des appels à changeb en trop...car je vois un clignotement de la liste alors qu'il n'y a aucun scroll (déplacement d'item) de réalisé...

dans GLIST_delete:
la 1ere boucle GLIST_k% ne sert à rien car il y a un return juste avant le next....
idem dans GLIST_free
idem GLIST_select + message d'erreur en fin incorrect


PS: il est possible que je reedite ce post si je trouve autre chose...
A+
J'ai fini de consulter... je vois rien d'anormal... bizarre... Suspect pourtant le clignotement doit bien provenir d'un ou plusieurs appels à changeb en trop... (dans une boucle ?)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Ven 17 Sep 2010 - 3:13

Les boucles que tu as trouvées, ne servent pas à rien ! C'est pour le cas où tu as plusieurs GLIST: cela permet d'identifier la bonne GLIST, on fait le travail, puis un fait return sans se préoccuper bien sûr du reste de la boucle...

Je pense que ce clignotement vient du fait d'afficher les lignes par des print successifs dans la picture - chaque fois, Panoramic réaffiche TOUTE la picture ! C'est pour cela que j'ai introduit des hide et show dans le programme, dans ma version. Pour le moment, je ne l'ai pas encore mise en ligne car je n'ai pas fini les tests.

Pour la scroll_bar, j'ai bien avancé. Voici une première version de la scroll_bar, pour le moment sans lien avec une liste quelconque - juste pour voir le fonctionnement de la scroll_bar. Mais malheureusement, je me heurte à une autre limitation de Panoramic: il faudrait pouvoir "tirer" le curseur de la scroll_bar vers le haut ou vers le bas. Or, une picture n'a qu'un sel évèmenent: c'est on_click qui ne se déclenche que au moment du relâchement de la souris. On ne peut donc pas tirer le curseur. Mais les boutons Up et Down ainsi que le défilement rapide vers le haut et le bas fonctionnent, et SANS répétition automatique !

Voici le code:
Code:

label click_20
label GLIST_SB_cursor_hide, GLIST_SB_cursor_show, GLIST_SB_button_show

dim GLIST_SB_height%, GLIST_SB_start_x%, GLIST_SB_start_y%, GLIST_SB_x%, GLIST_SB_y%
dim GLIST_SB_position%, GLIST_SB_max%, GLIST_aff_ligne%, GLIST_SB_delta%
dim GLIST_SB_max_y%, GLIST_SB_min_y%, GLIST_SB_buttonsize%


alpha 30 : top 30,10 : left 30,100

GLIST_SB_buttonsize% = 18          : ' taille des boutons carrés
GLIST_SB_height% = 120              : ' hauteur de la scroll bar
GLIST_SB_max% = 57                  : ' valeur maxi de la scroll bar (1...57)
GLIST_SB_position% = 1              : ' position initiale du curseur
GLIST_aff_ligne% = 8                : ' lignes d'affichage de la GLIST
GLIST_SB_delta% = GLIST_aff_ligne% - 1                      : ' pour déplacement rapide
GLIST_SB_max_y% = GLIST_SB_height%-3*GLIST_SB_buttonsize%    : ' hauteur - bouton up - bouton down - curseur
GLIST_SB_min_y% = GLIST_SB_buttonsize%                      : ' 0 + bouton up

' dessiner la scroll bar
picture 20 : top 20,10 : left 20,50 : width 20,20 : height 20,GLIST_SB_height% : color 20,236,233,216
on_click 20,click_20
print_target_is 20
font_name 20,"Wingdings 3"
2d_target_is 20 : 2d_fill_color 236,233,216
2d_pen_color 172,168,153 : 2d_rectangle 0,0,20,GLIST_SB_height%
2d_pen_color 255,255,255 : 2d_line 19,0,19,GLIST_SB_height%

' bouton "up"
GLIST_SB_start_x% = 1 : GLIST_SB_start_y% = 1
gosub GLIST_SB_button_show
print_locate GLIST_SB_start_x%+4,GLIST_SB_start_y%+4 : print chr$(129)

' bouton "curseur"
gosub GLIST_SB_cursor_show

' bouton "down"
GLIST_SB_start_x% = 1 : GLIST_SB_start_y% = GLIST_SB_height%-20+1
gosub GLIST_SB_button_show
print_locate GLIST_SB_start_x%+4,GLIST_SB_start_y%+4 : print chr$(130)

caption 30,"Début 1/"+str$(GLIST_SB_max%)

end

click_20:
GLIST_SB_x% = mouse_x_position(20)
GLIST_SB_y% = mouse_y_position(20)

' bouton "up"
if GLIST_SB_y%<20
    if GLIST_SB_position%>1
        gosub GLIST_SB_cursor_hide
        GLIST_SB_position% = GLIST_SB_position% - 1
        gosub GLIST_SB_cursor_show
    end_if
    caption 30, "Vers le haut "+str$(GLIST_SB_position%)+"/"+str$(GLIST_SB_max%)
    return
end_if

' bouton "down"
if GLIST_SB_y%>GLIST_SB_height%-GLIST_SB_buttonsize%
    if GLIST_SB_position%<GLIST_SB_max%
        gosub GLIST_SB_cursor_hide
        GLIST_SB_position% = GLIST_SB_position% + 1
        gosub GLIST_SB_cursor_show
    end_if
    caption 30, "Vers le bas "+str$(GLIST_SB_position%)+"/"+str$(GLIST_SB_max%)
    return
end_if

' curseur
if GLIST_SB_y%>(int(((GLIST_SB_height%-3*GLIST_SB_buttonsize%)*(GLIST_SB_position%-1))/GLIST_SB_max%)+GLIST_SB_buttonsize%)
    if GLIST_SB_y%<(int(((GLIST_SB_height%-3*GLIST_SB_buttonsize%)*(GLIST_SB_position%-1))/GLIST_SB_max%)+2*GLIST_SB_buttonsize%)
        while mouse_left_down(20)=1
            GLIST_SB_x% = mouse_x_position(20)
            GLIST_SB_y% = mouse_y_position(20)
            caption 30, "Ascenseur --> "+str$(GLIST_SB_y%)+"/"+str$(GLIST_SB_max%)
        end_while
        caption 30, "Ascenseur "+str$(GLIST_SB_position%)+"/"+str$(GLIST_SB_max%)
        return
    end_if
end_if

' défilement rapide vers le haut
if (GLIST_SB_y%>GLIST_SB_buttonsize%) and (GLIST_SB_y%<(int(((GLIST_SB_height%-3*GLIST_SB_buttonsize%)*(GLIST_SB_position%-1))/GLIST_SB_max%)+GLIST_SB_buttonsize%))
    if GLIST_SB_position%>1
        gosub GLIST_SB_cursor_hide
        GLIST_SB_position% = GLIST_SB_position% - GLIST_SB_delta%
        if GLIST_SB_position%<1 then GLIST_SB_position% = 1
        gosub GLIST_SB_cursor_show
    end_if
    caption 30, "Rapide vers le haut "+str$(GLIST_SB_position%)+"/"+str$(GLIST_SB_max%)
    return
end_if

' défilement rapide vers le bas
if (GLIST_SB_y%>(int(((GLIST_SB_height%-3*GLIST_SB_buttonsize%)*(GLIST_SB_position%-1))/GLIST_SB_max%)+2*GLIST_SB_buttonsize%)) and (GLIST_SB_y%<(GLIST_SB_height%-GLIST_SB_buttonsize%))
    if GLIST_SB_position%<GLIST_SB_max%
        gosub GLIST_SB_cursor_hide
        GLIST_SB_position% = GLIST_SB_position% + GLIST_SB_delta%
        if GLIST_SB_position%>GLIST_SB_max% then GLIST_SB_position% = GLIST_SB_max%
        gosub GLIST_SB_cursor_show
    end_if
    caption 30, "Rapide vers le bas "+str$(GLIST_SB_position%)+"/"+str$(GLIST_SB_max%)
    return
end_if
return

' effacer le curseur
GLIST_SB_cursor_hide:
2d_pen_color 236,233,216
GLIST_SB_start_x% = 1 : GLIST_SB_start_y% = int(((GLIST_SB_height%-3*GLIST_SB_buttonsize%)*(GLIST_SB_position%-1))/GLIST_SB_max%)+GLIST_SB_buttonsize%
2d_rectangle 1,GLIST_SB_start_y%,GLIST_SB_buttonsize%+1,GLIST_SB_start_y%+GLIST_SB_buttonsize%+1
return

' afficher le curseur en fonction de GLIST_SB_position
GLIST_SB_cursor_show:
GLIST_SB_start_x% = 1 : GLIST_SB_start_y% = int(((GLIST_SB_height%-3*GLIST_SB_buttonsize%)*(GLIST_SB_position%-1))/GLIST_SB_max%)+GLIST_SB_buttonsize%
' afficher le curseur en fonction de GLIST_SB_start_y%
GLIST_SB_button_show:
2d_pen_color 255,255,255
2d_line GLIST_SB_start_x%+1,GLIST_SB_start_y%+GLIST_SB_buttonsize%-1,GLIST_SB_start_x%+1,GLIST_SB_start_y%+1
2d_line GLIST_SB_start_x%+1,GLIST_SB_start_y%+1,GLIST_SB_start_x%+GLIST_SB_buttonsize%-1,GLIST_SB_start_y%+1
2d_pen_color 241,239,226
2d_line GLIST_SB_start_x%+1,GLIST_SB_start_y%+GLIST_SB_buttonsize%-2,GLIST_SB_start_x%+1,GLIST_SB_start_y%+2
2d_line GLIST_SB_start_x%+1,GLIST_SB_start_y%+2,GLIST_SB_start_x%+GLIST_SB_buttonsize%-2,GLIST_SB_start_y%+2
2d_pen_color 172,168,153
2d_line GLIST_SB_start_x%+1,GLIST_SB_start_y%+GLIST_SB_buttonsize%-2,GLIST_SB_start_x%+GLIST_SB_buttonsize%-2,GLIST_SB_start_Y%+GLIST_SB_buttonsize%-2
2d_line GLIST_SB_start_x%+16,GLIST_SB_start_y%+GLIST_SB_buttonsize%-1,GLIST_SB_start_x%+GLIST_SB_buttonsize%-2,GLIST_SB_start_y%
2d_pen_color 113,111,100
2d_line GLIST_SB_start_x%,GLIST_SB_start_y%+GLIST_SB_buttonsize%-1,GLIST_SB_start_x%+GLIST_SB_buttonsize%-1,GLIST_SB_start_y%+GLIST_SB_buttonsize%-1
2d_line GLIST_SB_start_x%+GLIST_SB_buttonsize%-1,GLIST_SB_start_y%+GLIST_SB_buttonsize%-1,GLIST_SB_start_x%+GLIST_SB_buttonsize%-1,GLIST_SB_start_y%-1
return
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: Comment redimensionner une GLIST   Ven 17 Sep 2010 - 8:49

Bonjour Klaus!

Tu ne dors jamais ? Wink

J'avais bien compris le but de tes boucles mais si tu fais attention à celles que j'ai indiqué, tu constatera que
quelque-soit les conditions, tu ne passes qu'une seule fois dans ces boucles...
A mon avis les 'return' sont de trop... ou alors il y a une subtilité qui m'échappe... Wink

Concernant ton scrollbar :
Tu n'aimes pas les timers hein ? Wink
Je me suis permis de rajouter le code ci-dessous. Tu l'insères juste avant le end.
tu mets le on_click sur l'objet 20 en commentaire (il n'est plus nécessaire dans ce cas)
-> tu as la répétition et un semblant de 'tirage' du curseur. Pour bien faire, il faudrait tester si les coordonnées de la souris sont sur le curseur. auquel cas appeler une procédure spécifique.

- Le timer est à 100 ms... mais on pourrait très bien le ralentir si la souris est en dehors du curseur (genre 1 seconde, pour avoir un défilement pas trop rapide) et au contraire l'accélérer si la souris se trouve sur le curseur (pour être plus réactif si on cherche à le "tirer").


Code:

label GLIST_SB_Evenement
dim GLIST_SB_Evenement%,GLIST_SB_mouse_left,GLIST_SB_mouse_right
GLIST_SB_Evenement%=1234

alpha 4321: top 4321,150
timer GLIST_SB_Evenement%: timer_interval GLIST_SB_Evenement%,100: timer_on GLIST_SB_Evenement%
on_timer GLIST_SB_Evenement%,GLIST_SB_Evenement

end

GLIST_SB_Evenement:
  timer_off GLIST_SB_Evenement%
  if MOUSE_RIGHT_DOWN(20)=1
    GLIST_SB_mouse_right=1
  else
    if MOUSE_RIGHT_UP(20)=1 then GLIST_SB_mouse_right=0
  end_if
  if MOUSE_LEFT_DOWN(20)=1
    GLIST_SB_mouse_left = 1
  else
    if MOUSE_LEFT_UP(20)=1 then GLIST_SB_mouse_left=0
  end_if
  caption 4321,"Mouse left:"+str$(GLIST_SB_mouse_left)+" - Mouse right:"+str$(GLIST_SB_mouse_right)
  timer_on GLIST_SB_Evenement%
  if GLIST_SB_mouse_left = 1 then goto click_20
return

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

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Ven 17 Sep 2010 - 11:05

Effectivement, me nuits sont souvent aléatoires...

En ce qui concerne tes deux boucles, en fait, tu as raison: je n'avais pas tilté car chez moi, j'avais déja mis le "return" juste avant le "next GLIST_k%" en commentaire. En fait, ces boucles servent à appliquer la modif d'une GLIST dans toutes les GLIST synchronisées. Cette version n'est peut-être pas encore en ligne car je suis en train de tester.

Et en fait, je vais y intégrer la scroll_bar "maison" qui grâce à ta modif de timer (MERCI) fait exactement ce que je voulais. Je pense qu'on va arriver à quelque chose d'intéressant de cette manière.

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



MessageSujet: Re: Comment redimensionner une GLIST   Dim 19 Sep 2010 - 21:18

Ceci est une parenthèse et rien à voir avec le sujet, mais c'est le site d'activité de Klaus, et je ne vais pas ouvrir un sujet spécial pour ça.

Dans le programme je suis en train de faire, j'ai 2 form, dont je mets la form en icône pendant que je ne m'en sert pas (ou pour lire ce qui est dessous. la form supplémentaire est hide pendant que le programme est en icône, et la lorme 0 réduite en carré.
J'utilise les possibilités de ta dll pour rester en avant sur le restant de l'écran. Lorsque je clique sur l'icône (soit la forme 0) je réaffiche tout normalement, mais tout en mettant partout la fonction de rester au dessus, la seconde forme ne tient pas, elle s'efface. Il n'y a que form 0 qui reste dessus.
J'ai essayé, je mets partout show x:res%=... avec le numéro de la form, mais ça ne marche pas.
Il n'y a qu'à linitialisation avant que je mette en icône, que cela fonctionne. Après hide x, ça ne marche plus.
As-tu une idée?

Salutation
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Comment redimensionner une GLIST   Lun 20 Sep 2010 - 1:25

Salut, Cosmos70.

Je te suggère de poursuivre cette discussion, soit ici:
http://panoramic.free-boards.net/le-site-de-klaus-f11/questions-bugs-problemes-avec-les-programmes-de-mon-site-t1108.htm
soit dans la rubrique concernant la fonction WindowTopMost:
http://panoramic.free-boards.net/le-site-de-klaus-f11/nouvelle-fonction-windowtopmost-dans-kgfdll-t925.htm
à ta convenance.

Peux-tu me poster un peu plus d'éléments, et particulier le code qui "cache" tes form et celui qui les "montre" ? Lorsque tu cliques sur l'icône de la form 0 pour la réafficher, est-ce que tu détectes cela pour remettre l'autre form à l'écran ? et si oui, comment ?*
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Comment redimensionner une GLIST   

Revenir en haut Aller en bas
 
Comment redimensionner une GLIST
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Problème avec roll over qui "clignote"
» comment desinstaller pcconfidentiel schredder [Résolu]
» Comment éviter la majorité des infections virales
» Comment interdire à l'utilisateur de mettre la fenêtre en " grand écran " ? [RESOLU]
» Affiches comment être et faire pour apprendre

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: