FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Panoramic et ses curiosités
par Klaus Aujourd'hui à 2:20

» Synedit Parameters
par Klaus Aujourd'hui à 1:33

» Utilitaire de suppression de fichiers
par Yannick Hier à 23:03

» Code à vérifier SVP (Oups ! résolu)
par Jean Claude Jeu 22 Juin 2017 - 21:16

» Compilateur FBPano
par jean_debord Jeu 22 Juin 2017 - 9:56

» Bienvenue à Virtualalan !
par UltraVox Jeu 22 Juin 2017 - 9:18

» Concours de Morpions
par jjn4 Jeu 22 Juin 2017 - 0:04

» ShortName$(F) [Cloturé]
par papydall Mer 21 Juin 2017 - 16:19

» Remplacer espace par tiret dans noms des dossiers / fichiers
par papydall Mer 21 Juin 2017 - 15:27

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

» La liste des choses à faire ...
par Jack Mar 20 Juin 2017 - 22:49

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

» Nom court et anti fenetre dos
par silverman Mar 20 Juin 2017 - 18:31

» Ludothèque Panoramic
par jjn4 Mar 20 Juin 2017 - 18:09

» Proposition à la communauté
par Yannick Mar 20 Juin 2017 - 15:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

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

Partagez | 
 

 Début d'un autre IDE

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8, 9  Suivant
AuteurMessage
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 8:16

Je crois que mon PPE vient de trouver la dernière fonction qui lui manquait...
...enfin jusqu'à ma prochaine idée tordue. Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Fév 2014 - 8:17

Je crois que mon PPE vient de trouver la dernière fonction qui lui manquait...
...enfin jusqu'à ma prochaine idée tordue. Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Fév 2014 - 15:36

@ Klaus,

Pour accrocher un RE à un onglet , tu te sers de la sub "TAB_RE_add(1,1,RE_table%(RE_count%))".

Je crois avoir deviné les deux derniers paramètres ( n° onglet, n° RE dans l' onglet) mais quel est le premier ?...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 15:44

Voici un extrait du fichier d'aide TAB.rtf que je copie maintenant dans le dossier de l'IDE:
Citation :
TAB_RE_add attacher un objet RichEdit à un onglet

Syntaxe: TAB_RE_add(N%,O%,P%)

Cette function agit exactement comme la fonction Object_add, mais au lieu d'un objet standard Panoramic, elle agit sur un objet RichEdit.
N%: numéro du TAB (1...20)
O%: numéro de l'onglet du TAB N%
P%: numéro d'objet Panoramic (ou valeur RE% retournée par CreateRichEdit)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Fév 2014 - 16:54

J' ai un petit souci...(oui encore un )

Les tableurs ne s' affichent pas dans les onglets...
J' ai mis PPE2_2.zip sur mon webdav (GUI.bas).


heu...

dim RichEdit_1% : RichEdit_1% = 4

à quoi correspond la valeur attribuée à cette variable
et à quoi elle sert ? Je ne la vois plus ailleurs dans le main du projet...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 18:28

Je vais regarder ton zip.

L'IDE génère une variable pour chaque objet, du type:
memo_1%
tab_2%
button_7%
RichEdit_2%
etc

Ces noms de variables sont exactement les noms des objets dans l'IDE. La valeur qu'on leur affecte, est leur numéro d'objet dans Panoramic. Je crée cela juste pour la facilité de programmation par la suite: ainsi, il est facile de cibler un objet particulier par son nom. C'est évidemment parfaitement optionnel, mais on peut programmer ceci:
Code:

if text$(edit_3%)="" then message "Le contenu du Edit numéro 3 est vide !"
C'est plus facile que d'essayer d'imaginer quels pourraient être les numéros d'objet de Panoramic, pour chaque objet de l'IDE.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Fév 2014 - 20:12

Dans le cas présent il s' agit d' un RichEdit pas d' un objet Panoramic.
La valeur devrait être la valeur du res% de l' appel à la dll.
A moins que tu fasses un obj%=obj%+1 : RichEdit_1%=obj%
mais le numéro d' objet sera creux car rien n' affecte ce numéro en panoramic.

tu ne peux faire par exemple :

text$(RichEdit_1%) ou autre....

Bref, je pensais que le problème pouvait venir de l' absence de cette variable dans mes déclarations.

( Je suppose que cette numérotation est du à une procédure qui agit ainsi pour tous les objets
et qu' il est plus simple de laisser ainsi que de faire une exception et si c' est le cas, je le comprend.)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 20:38

Tu as raison: ces variables n'ont pas de sens pour un RE. Je vais certainement remplacer cette valeur non utile par la vraie valeur du RE.

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

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 20:40

Je suis en train de regarder ton zip. Je n'ai pas encore percé le mystère, mais je peux déjà te suggérer d'utiliser ce fichier comme TAB.bas:
Code:
' TAB_inc.bas

' =============== Sécurité ====================================
top 0,message_error_OK("TAB: on ne peut pas executer ce module directement !")
terminate

' *****************************************************************************
sub TAB_initialize(D$)
  if variable("TAB_param$")=0
    label TAB_create_err1, TAB_click_tab, TAB_change
    label TAB_dessiner_tabs, TAB_dessiner_page
    label TAB_aff_objet
    label TAB_SearchParam, TAB_param_value, TAB_param_string_value
    label TAB_count_object
    label TAB_onglet_choisi
    label TAB_print_attributs
    label TAB_add_err1a, TAB_add_err2a
    label TAB_aff_objet_err, TAB_aff_objet_err2
    label TAB_change_err, TAB_remove_err1
    dim TAB_params$
    dim TAB_debug%
    dim TAB_result%, TAB_active%(20,20), TAB_font$(20,1), TAB_font_onglets$(20,40)
    dim TAB_par$(10,1), TAB_LstFct$, TAB_p$, tab_zz%, TAB_xt%
    dim TAB_numero_objet%, TAB_n_onglets%(20), TAB_m%, TAB_result$
    dim TAB_top%(20), TAB_left%(20), TAB_hauteur%(20), TAB_largeur%(20), TAB_l%
    dim TAB_i%, TAB_n%, TAB_s$, TAB_v%, TAB_v$, TAB_j%, TAB_nr%(20), TAB_code%
    dim TAB_error_mode%, TAB_err%, TAB_onglet%(20), TAB_ancien_onglet%(20), TAB_index%
    dim TAB_n_tabs%, TAB_liste_tabs%(20), TAB_xx%, TAB_yy%, TAB_do_aff%, TAB_k%
    dim TAB_events%(20), TAB_etiq_onglets$(20,20), TAB_type_objet%
    dim TAB_liste_objets%(20,420)  : ' (i,o)=nombre d'objets onglet o  (i,o*20+n)=nième numéro d'objet onglet o
    dim  TAB_color_onglets%(20,84)  : ' (i,o*4)=x  (i,o*4+1)=R  (i,o*4+2)=G  (i,o*4+3)=B
    '                                        x=1: utiliser RGB onglet  x=0: utiliser RBG objet TAB
    '                                        pour o=zéro : valeurs RBG de l'objet TAB
    dim TAB_type_objets%(20,420)    : ' (i,o*20+n) = type de l'objet n onglet o TAB i
    '                                        type=1: normal Panoramic  type=2: objet TAB
    '                                        type=3: objet GLIST type=4: objet RIchEdit
    '                                        type=0: objet dépendant d'un TAB ou d'un GLIST
    dim TAB_dossier$ : TAB_dossier$ = d$ : ' dossier à utiliser
   dim TAB_x%, TAB_y%, TAB_h%, TAB_w%
  end_if
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_create(N%,H%,W%,T%,L%,O%,D$)
  if variable("TAB_params$")=0 then TAB_initialize(D$)
  if TAB_n_tabs%=20
    TAB_params$ = "TAB: trop d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if

    TAB_n% = n%
    on_error_goto TAB_create_err1
    picture TAB_n%+1
    picture TAB_n%
    off_error_goto
    TAB_numero_objet% = TAB_n%
    print_target_is TAB_numero_objet%
    on_click TAB_numero_objet%,TAB_click_tab
    TAB_n_tabs% = TAB_n_tabs% + 1
    TAB_index% = TAB_n_tabs%
    TAB_liste_tabs%(TAB_n_tabs%) = TAB_numero_objet%
    TAB_n_onglets%(TAB_n_tabs%) = 1
    TAB_liste_objets%(TAB_n_tabs%,1) = 0
    TAB_onglet%(TAB_index%) = 1              : ' par défaur: onglet actuel est 1
    TAB_ancien_onglet%(TAB_index%) = 1      : ' par défaut: ancien onglet est onglet 1
    TAB_color_onglets%(TAB_index%,0) = 0    : ' pour objet TAB
    TAB_color_onglets%(TAB_index%,1) = 255
    TAB_color_onglets%(TAB_index%,2) = 255
    TAB_color_onglets%(TAB_index%,3) = 255
    TAB_color_onglets%(TAB_index%,4) = 0    : ' pour onglet 1
    TAB_color_onglets%(TAB_index%,5) = 255
    TAB_color_onglets%(TAB_index%,6) = 255
    TAB_color_onglets%(TAB_index%,7) = 255
    TAB_events%(TAB_index%) = 0              : ' pas d'évènement
    TAB_active%(TAB_index%,1) = 1            : ' onglet 1 actif
    TAB_font$(TAB_index%,0) = "Arial"
    TAB_font$(TAB_index%,1) = ""

    TAB_hauteur%(TAB_index%) = H%
    TAB_left%(TAB_index%) = L%
    TAB_top%(TAB_index%) = T%
    TAB_largeur%(TAB_index%) = W%
    TAB_n_onglets%(TAB_index%) = O%
  for TAB_i%=1 to TAB_n_onglets%(TAB_index%)
    TAB_etiq_onglets$(TAB_index%,TAB_i%) = str$(TAB_i%)
    TAB_color_onglets%(TAB_index%,TAB_i%*4) = 0
    TAB_color_onglets%(TAB_index%,TAB_i%*4+1) = 255
    TAB_color_onglets%(TAB_index%,TAB_i%*4+2) = 255
    TAB_color_onglets%(TAB_index%,TAB_i%*4+3) = 255
    TAB_active%(TAB_index%,TAB_i%) = 1
    TAB_font_onglets$(TAB_index%,(TAB_i%-1)*2+1) = ""
    TAB_font_onglets$(TAB_index%,(TAB_i%-1)*2+2) = ""
  next TAB_i%
  TAB_onglet%(TAB_index%) = 1

  gosub TAB_dessiner_tabs
  gosub TAB_dessiner_page
  exit_sub
TAB_create_err1:
  off_error_goto
  TAB_params$ = "TAB: problème avec numéro d'objet " + str$(TAB_numero_objet%)
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_mode(type$)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if type$="silent" then TAB_error_mode% = 0
  if type$="verbose" then TAB_error_mode% = 1
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_label(N%,O%,L$)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_index% = TAB_i%
            TAB_n% = O%
            if TAB_n%>0 and TAB_n%<=TAB_n_onglets%(TAB_index%)
                TAB_s$ = L$
                print_target_is TAB_liste_tabs%(TAB_index%)
                print_locate (TAB_n%-1)*int(TAB_largeur%(TAB_index%)/TAB_n_onglets%(TAB_index%)),5
                TAB_etiq_onglets$(TAB_index%,TAB_n%) = TAB_s$
                gosub TAB_print_attributs
                print TAB_s$
            end_if
            exit_sub
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
' syntaxe: TAB_params$ = "Tab_insert|N=20|O=3|L=xxxxxxx|"
sub TAB_insert(N%,O%,L$)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_n% = O%
            if TAB_n%>=0 and TAB_n%<=TAB_n_onglets%(TAB_index%)
                TAB_s$ = "<Nouveau>"
                if TAB_n%<TAB_n_onglets%(TAB_index%)
                    for TAB_j%=TAB_n_onglets%(TAB_index%) to TAB_n%+1 step -1
                        TAB_etiq_onglets$(TAB_index%,TAB_j%+1) = TAB_etiq_onglets$(TAB_index%,TAB_j%)
                        TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+2+2) = TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+2)
                        TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+2+1) = TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+1)
                        if TAB_liste_objets%(TAB_index%,TAB_j%)>0
                            for TAB_k%=1 to TAB_liste_objets%(TAB_index%,TAB_j%)
                                TAB_liste_objets%(TAB_index%,(TAB_j%+1)*20+TAB_k%) = TAB_liste_objets%(TAB_index%,TAB_j%*20+TAB_k%)
                                TAB_type_objets%(TAB_index%,(TAB_j%+1)*20+TAB_k%) = TAB_type_objets%(TAB_index%,TAB_j%*20+TAB_k%)
                            next TAB_k%
                        end_if
                        TAB_liste_objets%(TAB_index%,TAB_j%+1) = TAB_liste_objets%(TAB_index%,TAB_j%)
                        TAB_type_objets%(TAB_index%,TAB_j%+1) = TAB_type_objets%(TAB_index%,TAB_j%)  : ' pour usage futur
                        TAB_active%(TAB_index%,TAB_j%+1) = TAB_active%(TAB_index%,TAB_j%)
                    next TAB_j%
                    for TAB_j%=TAB_n_onglets%(TAB_index%)*4 to TAB_n%*4 step -1
                        TAB_color_onglets%(TAB_index%,TAB_j%+3) = TAB_color_onglets%(TAB_index%,TAB_j%-1)
                    next TAB_j%
                end_if
                TAB_color_onglets%(TAB_index%,TAB_n%*4) = 0
                TAB_color_onglets%(TAB_index%,TAB_n%*4+1) = 255
                TAB_color_onglets%(TAB_index%,TAB_n%*4+2) = 255
                TAB_color_onglets%(TAB_index%,TAB_n%*4+3) = 255
                TAB_liste_objets%(TAB_index%,TAB_n%) = 0
                TAB_type_objets%(TAB_index%,TAB_n%) = 0
                TAB_n_onglets%(TAB_index%) = TAB_n_onglets%(TAB_index%) + 1
                TAB_active%(TAB_index%,TAB_n%+1) = 1
                TAB_etiq_onglets$(TAB_index%,TAB_n%+1) = L$
                TAB_font_onglets$(TAB_index%,TAB_n%*2+1) = ""
                TAB_font_onglets$(TAB_index%,TAB_n%*2+2) = ""
                gosub TAB_dessiner_tabs
                exit_sub
            end_if
      end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_delete(N%,O%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_n% = O%
            if TAB_n%>0 and TAB_n%<=TAB_n_onglets%(TAB_index%)
                if TAB_n%<TAB_n_onglets%(TAB_index%)
                    for TAB_j%=TAB_n% to TAB_n_onglets%(TAB_index%)-1
                        TAB_etiq_onglets$(TAB_index%,TAB_j%) = TAB_etiq_onglets$(TAB_index%,TAB_j%+1)
                        TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+1) = TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+2+1)
                        TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+2) = TAB_font_onglets$(TAB_index%,(TAB_j%-1)*2+2+2)
                        if TAB_liste_objets%(TAB_index%,TAB_j%+1)>0
                            for TAB_k%=1 to TAB_liste_objets%(TAB_index%,TAB_j%+1)
                                TAB_liste_objets%(TAB_index%,TAB_j%*20+TAB_k%) = TAB_liste_objets%(TAB_index%,(TAB_j%+1)*20+TAB_k%)
                                TAB_type_objets%(TAB_index%,TAB_j%*20+TAB_k%) = TAB_type_objets%(TAB_index%,(TAB_j%+1)*20+TAB_k%)
                            next TAB_k%
                        end_if
                        TAB_liste_objets%(TAB_index%,TAB_j%) = TAB_liste_objets%(TAB_index%,TAB_j%+1)
                        TAB_type_objets%(TAB_index%,TAB_j%) = TAB_type_objets%(TAB_index%,TAB_j%+1)  : ' pour usage futur
                        TAB_active%(TAB_index%,TAB_j%) = TAB_active%(TAB_index%,TAB_j%+1)
                    next TAB_j%
                    for TAB_j%=TAB_n%*4 to (TAB_n_onglets%(TAB_index%)-1)*4-1
                        TAB_color_onglets%(TAB_index%,TAB_j%) = TAB_color_onglets%(TAB_index%,TAB_j%+4)
                    next TAB_j%
                end_if
                TAB_n_onglets%(TAB_index%) = TAB_n_onglets%(TAB_index%) - 1
                gosub TAB_dessiner_tabs
                exit_sub
            end_if
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_select(N%,O%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_p$ = "N"
  gosub TAB_param_value
  TAB_n% = TAB_result%
  if TAB_n%>1
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_p$ = "O"
            gosub TAB_param_value
            TAB_n% = TAB_result%
            if TAB_n%>0 and TAB_n%<=TAB_n_onglets%(TAB_index%)
                if TAB_n%=TAB_onglet%(TAB_index%) then exit_sub
                if TAB_active%(TAB_index%,TAB_n%)=0 then return
                TAB_ancien_onglet%(TAB_index%) = TAB_onglet%(TAB_index%)
                TAB_onglet%(TAB_index%) = TAB_n%
                gosub TAB_change
                exit_sub
            end_if
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_OBJECT_add(N%,O%,P%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  TAB_type_objet% = 1
  TAB_add_x(N%,O%,P%)
end_sub
sub TAB_TAB_add(N%,O%,P%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  TAB_type_objet% = 2
  TAB_add_x(N%,O%,P%)
end_sub
sub TAB_GLIST_add(N%,O%,P%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  TAB_type_objet% = 3
  TAB_add_x(N%,O%,P%)
end_sub
sub TAB_RE_add(N%,O%,P%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  TAB_type_objet% = 4
  TAB_add_x(N%,O%,P%)
end_sub

sub TAB_add_x(N%,O%,P%)
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_n% = O%
            if (TAB_n%>0) and ((TAB_liste_objets%(TAB_index%,TAB_n%) + TAB_type_objet%)<=20)
                TAB_v% = P%
                TAB_j% = TAB_liste_objets%(TAB_index%,TAB_n%)  : ' nombre d'objets pour cet onglet
                if TAB_j%>0
                    for TAB_k%=1 to TAB_j%
                        if TAB_liste_objets%(TAB_index%,TAB_n%*20+TAB_k%)=TAB_v% then exit_sub : ' déjà membre ?
                    next TAB_k%
                end_if
                TAB_xt% = TAB_type_objet%
                if TAB_type_objet%=4 then TAB_xt% = 1 : ' cas du RichEdit
                if (TAB_type_objet%=2)
                    for TAB_j%=1 to TAB_n_tabs%
                        if TAB_liste_tabs%(TAB_j%)=TAB_v%
                            TAB_top%(TAB_j%) = TAB_top%(TAB_j%) + TAB_top%(TAB_index%) + 22
                            TAB_left%(TAB_j%) = TAB_left%(TAB_j%) + TAB_left%(TAB_index%)
                            exit_for
                        end_if
                    next TAB_j%
                end_if
                gosub TAB_count_object
                repeat
                    TAB_liste_objets%(TAB_index%,TAB_n%) = TAB_liste_objets%(TAB_index%,TAB_n%) + 1
                    TAB_liste_objets%(TAB_index%,TAB_n%*20+TAB_liste_objets%(TAB_index%,TAB_n%)) = TAB_v%  : ' mémoriser l'objet
                    if (TAB_type_objet%=TAB_xt%) or (TAB_type_objet%=4)
                        TAB_type_objets%(TAB_index%,TAB_n%*20+TAB_liste_objets%(TAB_index%,TAB_n%)) = TAB_type_objet%
                    else
                        TAB_type_objets%(TAB_index%,TAB_n%*20+TAB_liste_objets%(TAB_index%,TAB_n%)) = 0
                    end_if
                    if TAB_result%=0      : ' objet pas encode dans un TAB ?
                        on_error_goto TAB_add_err1a
                        if TAB_type_objet%=4
                          TAB_j% = dll_call3("RichEditFunction",TAB_v%,8,0) : ' hide RE
                          TAB_j% = dll_call5("GetRichEditGeometry",TAB_v%,adr(TAB_x%),adr(TAB_y%),adr(TAB_w%),adr(TAB_h%))
                          TAB_j% = dll_call5("RichEditGeometry",TAB_v%,TAB_x%+TAB_left%(TAB_index%),TAB_y%+TAB_top%(TAB_index%)+22,TAB_w%,TAB_h%)
                        else
                          hide TAB_v%
                          TAB_j% = top(TAB_v%)
                          top TAB_v%,TAB_j% + TAB_top%(TAB_index%) + 22
                          TAB_j% = left(TAB_v%)
                          left TAB_v%,TAB_j% + TAB_left%(TAB_index%)
                        end_if
TAB_add_err1a:
                        off_error_goto
                    end_if
                    on_error_goto TAB_add_err2a
                    if TAB_type_objet%=4
                      TAB_j% = dll_call3("RichEditFunction",TAB_v%,8,0) : ' hide RE
                    else
                      hide TAB_v%
                    end_if
TAB_add_err2a:
                    off_error_goto
                    TAB_v% = TAB_v% + 1
                    TAB_xt% = TAB_xt% - 1
                until TAB_xt% = 0
                TAB_result% = 1
                for TAB_zz%=1 to TAB_n_tabs%
                    for TAB_yy%=1 to TAB_n_onglets%(TAB_zz%)
                        if TAB_liste_objets%(TAB_zz%,TAB_yy%)>0
                            for TAB_xx%=1 to TAB_liste_objets%(TAB_zz%,TAB_yy%)
                                if TAB_liste_objets%(TAB_zz%,TAB_yy%*20+TAB_xx%)=TAB_numero_objet%
                                    if TAB_onglet%(TAB_zz%)<>TAB_yy% then TAB_result% = 0
                                end_if
                            next TAB_xx%
                        end_if
                    next TAB_yy%
                next TAB_zz%
                if TAB_n%<>TAB_onglet%(TAB_index%) then TAB_result% = 0
                if TAB_result%=1
                    TAB_do_aff% = 1
                    gosub TAB_dessiner_tabs
                end_if
                exit_sub
            end_if
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_OBJECT_remove(N%,O%,P%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_n% = O%
            if TAB_n%>0 and TAB_n%<=TAB_n_onglets%(TAB_index%)
                TAB_v% = P%
                TAB_j% = TAB_liste_objets%(TAB_index%,TAB_n%)  : ' nombre d'objets pour cet onglet
                if TAB_j%>0
                    for TAB_k%=1 to TAB_j%
                        if TAB_liste_objets%(TAB_index%,TAB_n%*20+TAB_k%)=TAB_v% : ' trouvé ?
                            if TAB_type_objets%(TAB_index%,TAB_n%*20+TAB_k%)=0 then exit_sub  : ' sous-type de TAB ou GLIST ?
                            gosub TAB_count_object
                            TAB_xx% = TAB_type_objets%(TAB_index%,TAB_n%*20+TAB_k%)
                     if TAB_xx%=4 then TAB_xx% = 1 : ' cas RichEdit
                            repeat
                                if TAB_result%=1
                                    on_error_goto TAB_remove_err1
                                    TAB_m% = top(TAB_v%)
                                    top TAB_v%,TAB_m% - TAB_top%(TAB_index%) - 22
                                    TAB_m% = left(TAB_v%)
                                    left TAB_v%,TAB_m% - TAB_left%(TAB_index%)
TAB_remove_err1:
                                    off_error_goto
                                end_if
                                if TAB_k%<TAB_liste_objets%(TAB_index%,TAB_n%)
                                    for TAB_l%=TAB_k% to TAB_liste_objets%(TAB_index%,TAB_n%) - 1
                                        TAB_liste_objets%(TAB_index%,TAB_n%*20+tab_l%) = TAB_liste_objets%(TAB_index%,TAB_n%*20+tab_l%+1)
                                        TAB_type_objets%(TAB_index%,TAB_n%*20+tab_l%) = TAB_type_objets%(TAB_index%,TAB_n%*20+tab_l%+1)
                                    next TAB_l%
                                end_if
                                TAB_v% = TAB_v% + 1
                                TAB_xx% = TAB_xx% - 1
                            until TAB_xx%=0
                            TAB_liste_objets%(TAB_index%,TAB_n%) = TAB_liste_objets%(TAB_index%,TAB_n%) - 1
                            TAB_type_objets%(TAB_index%,TAB_n%) = TAB_type_objets%(TAB_index%,TAB_n%) - 1    : ' pour usage futur
                            TAB_do_aff% = 1
                            gosub TAB_dessiner_tabs
                            exit_sub
                        end_if
                    next TAB_k%
                end_if
            end_if
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_color(N%,R%,G%,B%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_result% = R%
            if TAB_result%=-1 then TAB_result% = 255
            TAB_par$(0,0) = str$(TAB_result%)
            TAB_result% = G%
            if TAB_result%=-1 then TAB_p=result% = 255
            TAB_par$(0,1) = str$(TAB_result%)
            TAB_result% = B%
            if TAB_result%=-1 then TAB_result% = 255
            TAB_par$(1,0) = str$(TAB_result%)
            TAB_color_onglets%(TAB_index%,0) = 0
            TAB_color_onglets%(TAB_index%,1) = val(TAB_par$(0,0))
            TAB_color_onglets%(TAB_index%,2) = val(TAB_par$(0,1))
            TAB_color_onglets%(TAB_index%,3) = val(TAB_par$(1,0))
            if TAB_color_onglets%(TAB_index%,TAB_onglet%(TAB_index%)*4)=0
                color TAB_numero_objet%+1,TAB_color_onglets%(TAB_index%,1),TAB_color_onglets%(TAB_index%,2),TAB_color_onglets%(TAB_index%,3)
                gosub TAB_dessiner_tabs
                exit_sub
            end_if
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_tab_color(N%,O%,R%,G%,B%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_numero_objet% = TAB_n%
            TAB_index% = TAB_i%
            TAB_v% = O%
            if (TAB_v%>0) and (TAB_V%<=TAB_n_onglets%(TAB_index%))
                TAB_result% = R%
                if TAB_result%=-1 then TAB_result% = 255
                TAB_par$(0,0) = str$(TAB_result%)
                TAB_result% = G%
                if TAB_result%=-1 then TAB_result% = 255
                TAB_par$(0,1) = str$(TAB_result%)
                TAB_result% = B%
                if TAB_result%=-1 then TAB_result% = 255
                TAB_par$(1,0) = str$(TAB_result%)
                TAB_i% = TAB_v%*4
                TAB_color_onglets%(TAB_index%,TAB_i%) = 1
                TAB_color_onglets%(TAB_index%,TAB_i%+1) = val(TAB_par$(0,0))
                TAB_color_onglets%(TAB_index%,TAB_i%+2) = val(TAB_par$(0,1))
                TAB_color_onglets%(TAB_index%,TAB_i%+3) = val(TAB_par$(1,0))
                if TAB_onglet%(TAB_index%)=TAB_v% then color TAB_numero_objet%+1,TAB_color_onglets%(TAB_index%,TAB_i%+1),TAB_color_onglets%(TAB_index%,TAB_i%+2),TAB_color_onglets%(TAB_index%,TAB_i%+3)
                gosub TAB_dessiner_tabs
                exit_sub
            end_if
        end_if
    next TAB_i%
    TAB_params$ = "TAB: onglet non défini"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_event_on(N%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_events%(TAB_i%) = 1
        end_if
    next TAB_i%
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_event_off(N%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_events%(TAB_i%) = 0
        end_if
    next TAB_i%
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_active(N%,O%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_p$ = "N"
  gosub TAB_param_value
  TAB_n% = TAB_result%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            if (O%>0) and (O%<=TAB_n_onglets%(TAB_n%))
                TAB_active%(TAB_i%,O%) = 1
                gosub TAB_dessiner_tabs
                exit_sub
            end_if
        end_if
    next TAB_i%
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_inactive(N%,O%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            if (O%>0) and (O%<=TAB_n_onglets%(TAB_i%))
                TAB_active%(TAB_i%,O%) = 0
                gosub TAB_dessiner_tabs
                exit_sub
            end_if
        end_if
    next TAB_i%
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_font(N%,F$,A$)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_index% = TAB_i%
            TAB_numero_objet% = TAB_liste_tabs%(TAB_index%)
            TAB_font$(TAB_index%,0) = F$  : ' font_name
            TAB_font$(TAB_index%,1) = A$    : ' BIU
            font_name TAB_numero_objet%,TAB_font$(TAB_index%,0)
            gosub TAB_dessiner_tabs
            exit_sub
        end_if
    next TAB_i%
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_tab_font(N%,O%,F$,A$)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            TAB_index% = TAB_i%
            TAB_numero_objet% = TAB_liste_tabs%(TAB_index%)
            TAB_n% = O%
            TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+1) = F$  : ' font_name
            TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+2) = A$    : ' BIU
            gosub TAB_dessiner_tabs
            exit_sub
        end_if
    next TAB_i%
  end_if
  TAB_params$ = "TAB: objet TAB non défini"
  if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
  end_sub
' *****************************************************************************

' *****************************************************************************
sub TAB_parent(N%,P%)
  if variable("TAB_params$")=0 then TAB_initialize("")
  if TAB_n_tabs%=0
    TAB_params$ = "TAB: pas d'objets TAB"
    if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
    exit_sub
  end_if
  TAB_n% = N%
  if TAB_n%>0
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_liste_tabs%(TAB_i%)=TAB_n%
            parent TAB_n%,P%
            parent TAB_n%+1,P%
            exit_sub
        end_if
    next TAB_i%
  end_if
end_sub

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


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

' *************** routines de service

TAB_click_tab:
    TAB_n% = number_click
    for TAB_i%=1 to TAB_n_tabs%
        if TAB_n%=TAB_liste_tabs%(TAB_i%)
            TAB_index% = TAB_i%
            TAB_numero_objet% = TAB_liste_tabs%(TAB_index%)
            2d_target_is TAB_numero_objet%
            print_target_is TAB_numero_objet%
            TAB_xx% = mouse_x_left_down(TAB_numero_objet%)
            TAB_yy% = mouse_y_left_down(TAB_numero_objet%)
            TAB_n% = TAB_n_onglets%(TAB_index%)
            TAB_j% = int(TAB_largeur%(TAB_index%)/TAB_n%)
            TAB_v% = int( (TAB_xx%+TAB_j%-1) / tab_j% )
            if TAB_active%(TAB_index%,TAB_v%)=0 then return
            TAB_ancien_onglet%(TAB_index%) = TAB_onglet%(TAB_index%)
            TAB_onglet%(TAB_index%) = int( (TAB_xx%+TAB_j%-1) / tab_j% )
            if TAB_onglet%(TAB_index%)=TAB_ancien_onglet%(TAB_index%) then return
            gosub TAB_change
            TAB_params$ = "Tab "+str$(TAB_index%)+" Ancien onglet "+str$(TAB_ancien_onglet%(TAB_index%))+" Nouvel onglet "+str$(TAB_onglet%(TAB_index%))
            TAB_params$ = TAB_params$ + "="+TAB_etiq_onglets$(TAB_index%,(TAB_onglet%(TAB_index%)))
            if TAB_error_mode%=1 then TAB_err% = message_error_OK(TAB_params$)
            if TAB_events%(TAB_index%)=1 then gosub TAB_onglet_choisi
            return
        end_if
    next TAB_i%
    return


TAB_change:
' cacher les objets de l'ancien onglet
    if TAB_ancien_onglet%(TAB_index%)>0
        TAB_j% = TAB_liste_objets%(TAB_index%,TAB_ancien_onglet%(TAB_index%))
        if TAB_j%>0
            for TAB_i%=1 to TAB_j%
                on_error_goto TAB_change_err
               
            if TAB_type_objets%(TAB_index%,TAB_ancien_onglet%(TAB_index%)*20+TAB_i%)=4
              TAB_x% = dll_call3("RichEditFunction",TAB_liste_objets%(TAB_index%,TAB_ancien_onglet%(TAB_index%)*20+TAB_i%),8,0) : ' hide RE
                else             
                hide TAB_liste_objets%(TAB_index%,TAB_ancien_onglet%(TAB_index%)*20+TAB_i%)
            end_if
TAB_change_err:
                off_error_goto
                for TAB_v%=1 to TAB_n_tabs%
                    if TAB_liste_objets%(TAB_index%,TAB_ancien_onglet%(TAB_index%)*20+TAB_i%)=TAB_liste_tabs%(TAB_v%)
                        if TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%))>0
                            for TAB_k%=1 to TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%))
                          if TAB_type_objets%(TAB_index%,TAB_ancien_onglet%(TAB_index%)*20+TAB_i%)=4
                            TAB_x% = dll_call3("RichEditFunction",TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%)*20+TAB_k%),8,0) : ' hide RE
                              else
                              hide TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%)*20+TAB_k%)
                       end_if
                            next TAB_k%
                        end_if
                        exit_for
                    end_if
                next TAB_v%
            next TAB_i%
        end_if
    end_if
' afficher les objets du nouvel onglet
    gosub TAB_aff_objet
' changer le graphisme
    TAB_j% = int(TAB_largeur%(TAB_index%)/TAB_n_onglets%(TAB_index%))
    2d_target_is TAB_numero_objet%
    2d_line 1,21,TAB_largeur%(TAB_index%)-1,21
    if TAB_color_onglets%(TAB_index%,TAB_onglet%(TAB_index%)*4)=1
        TAB_i% = TAB_onglet%(TAB_index%)*4
        color TAB_numero_objet%+1,TAB_color_onglets%(TAB_index%,TAB_i%+1),TAB_color_onglets%(TAB_index%,TAB_i%+2),TAB_color_onglets%(TAB_index%,TAB_i%+3)
    else
        color TAB_numero_objet%+1,TAB_color_onglets%(TAB_index%,1),TAB_color_onglets%(TAB_index%,2),TAB_color_onglets%(TAB_index%,3)
    end_if
    2d_pen_color color_pixel_red(TAB_numero_objet%+1,2,2),color_pixel_green(TAB_numero_objet%+1,2,2),color_pixel_blue(TAB_numero_objet%+1,2,2)
    2d_line (TAB_onglet%(TAB_index%)-1)*TAB_j%+1,21,TAB_onglet%(TAB_index%)*TAB_j%-1,21
    2d_flood (TAB_onglet%(TAB_index%)-1)*TAB_j%+5,5,color_pixel_red(TAB_numero_objet%+1,2,2),color_pixel_green(TAB_numero_objet%+1,2,2),color_pixel_blue(TAB_numero_objet%+1,2,2)
'    2d_flood (TAB_ancien_onglet%(TAB_index%)-1)*TAB_j%+5,5,220,220,220
    2d_pen_color 0,0,0
    gosub TAB_dessiner_page
    return

TAB_aff_objet:
    TAB_j% = TAB_liste_objets%(TAB_index%,TAB_onglet%(TAB_index%))
    if TAB_j%>0
        for TAB_i%=1 to TAB_j%
            on_error_goto TAB_aff_objet_err
            if TAB_type_objets%(TAB_index%,TAB_onglet%(TAB_index%)*20+TAB_i%)=4
              TAB_x% = dll_call3("RichEditFunction",TAB_liste_objets%(TAB_index%,TAB_onglet%(TAB_index%)*20+TAB_i%),8,1) : ' show RE
            else
              show TAB_liste_objets%(TAB_index%,TAB_onglet%(TAB_index%)*20+TAB_i%)
            end_if
TAB_aff_objet_err:
            off_error_goto
                for TAB_v%=1 to TAB_n_tabs%
                    if TAB_liste_objets%(TAB_index%,TAB_onglet%(TAB_index%)*20+TAB_i%)=TAB_liste_tabs%(TAB_v%)
                        if TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%))>0
                            for TAB_k%=1 to TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%))
                                on_error_goto TAB_aff_objet_err2
                                if TAB_type_objets%(TAB_index%,TAB_onglet%(TAB_index%)*20+TAB_i%)=4
                              TAB_x% = dll_call3("RichEditFunction",TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%)*20+TAB_k%),8,1) : ' show RE
                                else
                                  show TAB_liste_objets%(TAB_v%,TAB_onglet%(TAB_v%)*20+TAB_k%)
                        end_if
TAB_aff_objet_err2:
                                off_error_goto
                            next TAB_k%
                        end_if
                        exit_for
                    end_if
                next TAB_v%
        next TAB_i%
    end_if
    TAB_do_aff% = 0
    return

' dessiner les TAB's
TAB_dessiner_tabs:
gosub TAB_dessiner_page
if TAB_do_aff%=1 then gosub TAB_aff_objet
2d_target_is TAB_numero_objet%
2d_fill_color 255,255,255
file_load TAB_numero_objet%,TAB_dossier$+"TAB_vide.bmp"
height TAB_numero_objet%,22
top TAB_numero_objet%,TAB_top%(TAB_index%)
width TAB_numero_objet%,TAB_largeur%(TAB_index%)
left TAB_numero_objet%,TAB_left%(TAB_index%)
print_target_is TAB_numero_objet%
TAB_k% = TAB_n_onglets%(TAB_index%)
TAB_j% = int(TAB_largeur%(TAB_index%)/TAB_k%)
2d_poly_from 1,21
for TAB_i%=1 to TAB_k%
    2d_poly_to (TAB_i%-1)*TAB_j%+1,3
    2d_poly_to (TAB_i%-1)*TAB_j%+1+3,1
    if TAB_i%=TAB_k%
        2d_poly_to (TAB_i%-1)*TAB_j%+TAB_j%-2,1
        2d_poly_to TAB_largeur%(TAB_index%)-1,3
        2d_poly_to TAB_largeur%(TAB_index%)-1,21
    else
        2d_poly_to (TAB_i%-1)*TAB_j%+TAB_j%-3,1
        2d_poly_to (TAB_i%-1)*TAB_j%+TAB_j%-1,3
        2d_poly_to (TAB_i%-1)*TAB_j%+TAB_j%-1,21
        2d_poly_to (TAB_i%-1)*TAB_j%+TAB_j%+1,21
    end_if
next TAB_i%
2d_line 1,21,TAB_largeur%(TAB_index%)-1,21
if TAB_color_onglets%(TAB_index%,TAB_onglet%(TAB_index%)*4)=1
    TAB_i% = TAB_onglet%(TAB_index%)*4
    color TAB_numero_objet%+1,TAB_color_onglets%(TAB_index%,TAB_i%+1),TAB_color_onglets%(TAB_index%,TAB_i%+2),TAB_color_onglets%(TAB_index%,TAB_i%+3)
else
    color TAB_numero_objet%+1,TAB_color_onglets%(TAB_index%,1),TAB_color_onglets%(TAB_index%,2),TAB_color_onglets%(TAB_index%,3)
end_if
TAB_result% = TAB_result%  : ' pour éviter une violation d'accès...
2d_pen_color color_pixel_red(TAB_numero_objet%+1,2,2),color_pixel_green(TAB_numero_objet%+1,2,2),color_pixel_blue(TAB_numero_objet%+1,2,2)
2d_line (TAB_onglet%(TAB_index%)-1)*TAB_j%+1,21,TAB_onglet%(TAB_index%)*TAB_j%-1,21
2d_pen_color 0,0,0
for TAB_i%=1 to TAB_k%
    if TAB_active%(TAB_index%,TAB_i%)=1
        if TAB_color_onglets%(TAB_index%,TAB_i%*4)=1
            2d_flood (TAB_i%-1)*TAB_j%+3,3, TAB_color_onglets%(TAB_index%,TAB_i%*4+1),TAB_color_onglets%(TAB_index%,TAB_i%*4+2),TAB_color_onglets%(TAB_index%,TAB_i%*4+3)
        else
            2d_flood (TAB_i%-1)*TAB_j%+3,3, TAB_color_onglets%(TAB_index%,1), TAB_color_onglets%(TAB_index%,2), TAB_color_onglets%(TAB_index%,3)
        end_if
    else
        2d_flood (TAB_i%-1)*TAB_j%+3,3, 220,220,220
    end_if
    TAB_n% = TAB_i%
    gosub TAB_print_attributs
    print_locate (TAB_i%-1)*TAB_j%+3,5
    print TAB_etiq_onglets$(TAB_index%,TAB_i%)
next TAB_i%
gosub TAB_dessiner_page
return

' dessiner la page utile
TAB_dessiner_page:
2d_fill_color color_pixel_red(TAB_numero_objet%+1,2,3),color_pixel_green(TAB_numero_objet%+1,2,3),color_pixel_blue(TAB_numero_objet%+1,2,3)
height TAB_numero_objet%+1,TAB_hauteur%(TAB_index%) - 20
top TAB_numero_objet%+1,TAB_top%(TAB_index%)+20
width TAB_numero_objet%+1,TAB_largeur%(TAB_index%)
left TAB_numero_objet%+1,TAB_left%(TAB_index%)
2d_target_is TAB_numero_objet%+1
2d_fill_color color_pixel_red(TAB_numero_objet%+1,2,3),color_pixel_green(TAB_numero_objet%+1,2,3),color_pixel_blue(TAB_numero_objet%+1,2,3)
2d_rectangle 1,1,TAB_largeur%(TAB_index%),TAB_hauteur%(TAB_index%)-20
2d_pen_color color_pixel_red(TAB_numero_objet%+1,2,3),color_pixel_green(TAB_numero_objet%+1,2,3),color_pixel_blue(TAB_numero_objet%+1,2,3)
TAB_k% = TAB_n_onglets%(TAB_index%)
TAB_j% = int(TAB_largeur%(TAB_index%)/TAB_k%)
2d_poly_from  (TAB_onglet%(TAB_index%)-1)*TAB_j%+1,1
2d_poly_to    (TAB_onglet%(TAB_index%)-1)*TAB_j%+TAB_j%-1,1
2d_pen_color 0,0,0
return

' analyse des paramètres par Nardo26
TAB_SearchParam:
  for TAB_i%=0 to 10:TAB_par$(TAB_i%,0)="":TAB_par$(TAB_i%,1)="":next TAB_i%
  TAB_par$(0,1)="0" : TAB_j% = 0
  for TAB_i%=1 to len(TAB_params$)
    if mid$(TAB_params$,TAB_i%,1)="|"
      TAB_par$(0,1)=str$(val(TAB_par$(0,1))+1)
      TAB_j%=0
    else
      if mid$(TAB_params$,TAB_i%,1)="="
        TAB_j%=1
      else
        TAB_par$(val(TAB_par$(0,1)),TAB_j%)=TAB_par$(val(TAB_par$(0,1)),TAB_j%)+mid$(TAB_params$,TAB_i%,1)
      end_if
    end_if
  next TAB_i%
  if RIGHT$(TAB_params$,1)="|"
    TAB_par$(0,1)=str$(val(TAB_par$(0,1))-1)
  end_if
return

' retourner un paramèetre numérique
TAB_param_value:
    for TAB_result%=1 to val(TAB_par$(0,1))
        if TAB_par$(TAB_result%,0)=TAB_p$
            TAB_result% = val(TAB_par$(TAB_result%,1))
            return
        end_if
    next TAB_result%
    TAB_result% = -1
    return

' retourner un paramètre string
TAB_param_string_value:
    for TAB_result%=1 to val(TAB_par$(0,1))
        if TAB_par$(TAB_result%,0)=TAB_p$
            TAB_result$ = TAB_par$(TAB_result%,1)
            return
        end_if
    next TAB_result%
    TAB_result$ = ""
    return

' compter le nombre d'affectation pour un objet Panoramic
TAB_count_object:
    TAB_result% = 0
    for TAB_zz%=1 to TAB_n_tabs%
        for TAB_yy%=1 to TAB_n_onglets%(TAB_zz%)
            if TAB_liste_objets%(TAB_zz%,TAB_yy%)>0
                for TAB_xx%=1 to TAB_liste_objets%(TAB_zz%,TAB_yy%)
                    if TAB_liste_objets%(TAB_zz%,TAB_yy%*20+TAB_xx%)=TAB_v% then TAB_result% = TAB_result% + 1
                next TAB_xx%
            end_if
        next TAB_yy%
    next TAB_zz%
    return

' déterminer les attributs pour écriture des libellés de l'onglet TAB_n%
TAB_print_attributs:
    if TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+1)=""
        font_name TAB_numero_objet%,TAB_font$(TAB_index%,0)
        if instr(TAB_font$(TAB_index%,1),"B" )>0
            font_bold TAB_numero_objet%
        else
            font_bold_off TAB_numero_objet%
        end_if
        if instr(TAB_font$(TAB_index%,1),"I" )>0
            font_italic TAB_numero_objet%
        else
            font_italic_off TAB_numero_objet%
        end_if
        if instr(TAB_font$(TAB_index%,1),"U" )>0
            font_underline TAB_numero_objet%
        else
            font_underline_off TAB_numero_objet%
        end_if
    else
        font_name TAB_numero_objet%,TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+1)
        if instr(TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+2),"B" )>0
            font_bold TAB_numero_objet%
        else
            font_bold_off TAB_numero_objet%
        end_if
        if instr(TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+2),"I" )>0
            font_italic TAB_numero_objet%
        else
            font_italic_off TAB_numero_objet%
        end_if
        if instr(TAB_font_onglets$(TAB_index%,(TAB_n%-1)*2+2),"U" )>0
            font_underline TAB_numero_objet%
        else
            font_underline_off TAB_numero_objet%
        end_if
    end_if
    return


' ===================== routine d'évènement on_change appelée en changement d'onglet
' Cette routine est appelée à chaque changement d'onglet, si elle a été activée
' par la fonction Event. Il suffit de copier cette routine dans le programme principal,
' après le #INCLUDE "TAB.bas" et de la mettre en commentaire dans TAB.bas.
' On peut alors adapter la routine aux besoins du programme. Lorsqu'elle est
' appelée, les variables suivantes sont disponibles:
'    TAB_numero_objet% - numero d'objet Panoramic de l'objet TAB dont un onglet a changé
'    TAB_index% - numéro d'ordre de création de l'objets TAB
'    TAB_onglets%(TAB_index%) - numéro de l'onglet activé
TAB_onglet_choisi:
    message "TAB "+str$(TAB_numero_objet%)+" Onglet "+str$(TAB_onglet%(TAB_index%))
    return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Fév 2014 - 20:56

Le fichier TAB.bas utilisée est un fichier généré par ton IDE (dernière version) 
dont j' ai simplement changé le nom.

J' ai repris ce que l' on a vu hier pour la création du Tab avec 5 onglets de couleurs différentes
avec leur propre nom.

J' ai rajouté l' appel à la sub pour ajouter/accrocher un RE à un onglet.
Dans le cas de PPE il y a 5 onglets avec chacun un RE.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 21:02

HEUREKA !

Tu m'en as fait, des belles ! Tu crées les RE en les attachant à la form 0,
et tu espères les voir dans un Tab contenu dans un Panel !

J'ai apporté 2 modifs dans GUI.bas:
1. dans les 5 RichEditCreateWithEvent, j'ai remplacé handle(0) par handle(TB_Pan%)
2. j'ai déplacé les 5 appels à TB_RE_ADD plus bas, lorsque chaque RE est définitivement configuré.
En effet, l'insertion d'un RE dans un Tab change la position (donc sa "géometrie").
Et si tu refais RichEditGeometry après cela, tu défais tout ce que TAB_RE_add a fait.

Voici GUI.bas opérationnel:
Code:
' # GENERAL USER INTERFACE #

Sub GUI()
  dim_local res%,hnd%,i%
  hnd%=handle(0)

'  -- Form 0 --

  O_Form(0,0,1,0,0,600,1000,"Personnal Panoramic Editor")
  res% = DLL_call2("SetMinimizeMaximize",hnd%,0)
  font_name 0,"arial"
 
'  -- Main menu --

  obj%=obj%+1 :MMenu%=obj%
  O_main_menu(obj%,0)
 
  obj%=obj%+1 :SMenu1%=obj%
  O_sub_menu(obj%,MMenu%,"Fichier",1,1)
 
      obj%=obj%+1 :SsMenu1%=obj%
      O_sub_menu(obj%,SMenu1%,"Nouveau projet",1,1)
     
      obj%=obj%+1 :SsMenu2%=obj%
      O_sub_menu(obj%,SMenu1%,"----------",0,0)
     
      obj%=obj%+1 :SsMenu3%=obj%
      O_sub_menu(obj%,SMenu1%,"Ouvrir un projet",1,1)
     
      obj%=obj%+1 :SsMenu4%=obj%
      O_sub_menu(obj%,SMenu1%,"Ouvrir un *.exe",1,1)
     
      obj%=obj%+1 :SsMenu5%=obj%
      O_sub_menu(obj%,SMenu1%,"----------",0,0)
     
      obj%=obj%+1 :SsMenu6%=obj%
      O_sub_menu(obj%,SMenu1%,"Imprimer",1,1)
     
      obj%=obj%+1 :SsMenu7%=obj%
      O_sub_menu(obj%,SMenu1%,"----------",0,0)
     
      obj%=obj%+1 :SsMenu8%=obj%
      O_sub_menu(obj%,SMenu1%,"Enregistrer",1,1)
     
      obj%=obj%+1 :SsMenu9%=obj%
      O_sub_menu(obj%,SMenu1%,"Enregistrer_sous",1,1)
 
  obj%=obj%+1 :SMenu2%=obj%
  O_sub_menu(obj%,MMenu%,"Prévisualiser",1,1)
 
  obj%=obj%+1 :SMenu3%=obj%
  O_sub_menu(obj%,MMenu%,"Compiler",1,1)
 
  obj%=obj%+1 :SMenu4%=obj%
  O_sub_menu(obj%,MMenu%,"Paramètres",1,1)
 
  obj%=obj%+1 :SMenu5%=obj%
  O_sub_menu(obj%,MMenu%,"A Propos...",1,1)
 
  obj%=obj%+1 :SMenu6%=obj%
  O_sub_menu(obj%,MMenu%,"Aide",1,1)

'  -- Toolbar --

  obj%=obj%+1 : TB_Edit%=obj%
  O_Edit(obj%,0,0,0,0,0,0,"",1)

  obj%=obj%+1 : TB_Pan%=obj%
  Panel obj%
 
  Init_TB()
 
'  -- Objets fonctions texte --

'  COMBO (police)
  obj%=obj%+1 : Combo1%=obj%
  O_Combo(obj%,0,1,2,410,0,190,"",1)
  font_name obj%,"arial":font_bold obj%
  font_names_load obj% :text obj%, item_read$(obj%,1)

'  COMBO (taille de la police)
  obj%=obj%+1 : Combo2%=obj%
  O_Combo(obj%,0,1,2,605,0,40,"",1)
  font_name obj%,"arial":font_bold obj% :text obj%,"8"
  for i%=8 to 14 : item_add obj%,str$(i%):next i%

'  -- Liste des variables projet --

  obj%=obj%+1
  O_Alpha(obj%,TB_Pan%,1,5,5,0,0,"Variables Globales Projet")
  font_color obj%,0,0,200 : font_bold obj%

'  LIST
  obj%=obj%+1 : Var_list%=obj%
  O_List(obj%,TB_Pan%,1,20,5,100,195,"",1)

'  EDIT
  obj%=obj%+1 : Edit_AjVar%=obj%
  O_Edit(obj%,TB_Pan%,1,125,5,0,170,"",0)

'  BUTTON
  obj%=obj%+1 : B_picture1%=obj%
  O_Button_Picture(obj%,7001,TB_Pan%,0,1,125,180,20,20,Pict$(1),Pict$(2))
  hint B_picture1%,"Ajouter la variable"
 
'  -- Liste des Labels projet --

  obj%=obj%+1
  O_Alpha(obj%,TB_Pan%,1,150,5,0,0,"Labels Projet")
  font_color obj%,0,0,200 : font_bold obj%

'  LIST
  obj%=obj%+1 : Lab_list%=obj%
  O_List(obj%,TB_Pan%,1,165,5,100,195,"",1)

'  EDIT
  obj%=obj%+1 : Edit_AjLab%=obj%
  O_Edit(obj%,TB_Pan%,1,270,5,0,170,"",0)

'  BUTTON
  obj%=obj%+1 : B_picture2%=obj%
  O_Button_Picture(obj%,7003,TB_Pan%,0,1,270,180,20,20,Pict$(1),Pict$(2))
  hint B_picture2%,"Ajouter le label"
 
'  -- Liste des procédures projet --

  obj%=obj%+1
  O_Alpha(obj%,TB_Pan%,1,295,5,0,0,"Procédures")
  font_color obj%,0,0,200 : font_bold obj%

'  LIST
  obj%=obj%+1 : Proc_list%=obj%
  O_List(obj%,TB_Pan%,1,310,5,150,195,"",1)
 
'  EDIT
  obj%=obj%+1 : Edit_AJProc%=obj%
  O_Edit(obj%,TB_Pan%,1,465,5,0,170,"",0)
 
'  BUTTON
  obj%=obj%+1 : B_picture3%=obj%
  O_Button_Picture(obj%,7005,TB_Pan%,0,1,465,180,20,20,Pict$(1),Pict$(2))
  hint B_picture3%,"Ajouter la procédure"
 
'  -- Liste des mots clef --

'  BUTTON
'  obj%=obj%+1 : B_picture4%=obj%
'  O_Button_Picture(obj%,7007,TB_Pan%,0,1,5,970,20,20,Pict$(3),Pict$(4))
'  hint B_picture4%,"Liste des mots clef Panoramic"
 
'  LIST
'  obj%=obj%+1 : List_Sub%=obj%
'  O_List(obj%,TB_Pan%,1,30,970,380,210,"",1):cursor_point obj%
'  font_name obj%,"arial":font_color obj%,130,0,255
'  on_double_click obj%,DClic
 
'  -- Liste des procédures incorporées --

'  BUTTON
'  obj%=obj%+1 : B_picture5%=obj%
'  O_Button_Picture(obj%,7009,TB_Pan%,0,1,5,995,20,20,Pict$(5),Pict$(6))
'  hint B_picture5%,"Liste des procédures"
 
'  LIST
'  obj%=obj%+1 : List_Sub2%=obj%
'  O_List(obj%,TB_Pan%,0,30,970,380,210,"",1):cursor_point obj%
'  font_name obj%,"arial":font_color obj%,140,105,255
'  on_double_click obj%,DClic
 
'  -- Bouton d' ajout à la base d' un mot clef ou d' une procédure --

'  BUTTON
'  obj%=obj%+1 : B_picture6%=obj%
'  O_Button_Picture(obj%,7011,TB_Pan%,0,1,5,1160,20,20,Pict$(7),Pict$(8))
'  hint B_picture6%,"Ajouter un item "

'  -- TAB --

'  TAB
  obj% = obj% + 1 : Tableur%=obj%
  if variable("TAB_table%")=0 then dim TAB_table%(200)
  if variable("TAB_count%")=0 then dim TAB_count%
  if variable("TAB_f$")=0 then dim TAB_f$
  if variable("TAB_a$")=0 then dim TAB_a$
  TAB_create(obj%,480,760,5,205,5,img$)
  TAB_count% = TAB_count% + 1
  TAB_table%(TAB_count%) = Tableur%
  TAB_parent(obj%,TB_Pan%)
  TAB_label(Tableur%,1,"Main.ppe")
  TAB_label(Tableur%,2,"Dec_Var.ppe")
  TAB_label(Tableur%,3,"Dec_Lab.ppe")
  TAB_label(Tableur%,4,"Labels.ppe")
  TAB_label(Tableur%,5,"Subs.ppe")
  TAB_tab_color(obj%,1,235,235,235)
  TAB_tab_color(obj%,2,229,229,255)
  TAB_tab_color(obj%,3,255,229,229)
  TAB_tab_color(obj%,4,229,255,229)
  TAB_tab_color(obj%,5,255,255,200)
  obj%=obj%+1
 
 
'  EDIT
  obj%=obj%+1 : RE1_Edit%=obj%
  O_Edit(obj%,0,0,0,0,0,0,"",1)
 
'  EDIT
  obj%=obj%+1 : RE2_Edit%=obj%
  O_Edit(obj%,0,0,0,0,0,0,"",1)
 
'  EDIT
  obj%=obj%+1 : RE3_Edit%=obj%
  O_Edit(obj%,0,0,0,0,0,0,"",1)
 
'  EDIT
  obj%=obj%+1 : RE4_Edit%=obj%
  O_Edit(obj%,0,0,0,0,0,0,"",1)
 
'  EDIT
  obj%=obj%+1 : RE5_Edit%=obj%
  O_Edit(obj%,0,0,0,0,0,0,"",1)
 
'  RICHEDIT (main)(Dec_Var)(Dec_Lab)(Labels)(Subs)
  RE%(1) = dll_call2("RichEditCreateWithEvent",handle(TB_Pan%),handle(RE1_Edit%))
'  TAB_RE_add(Tableur%,1,RE%(1))
  RE%(2) = dll_call2("RichEditCreateWithEvent",handle(TB_Pan%),handle(RE2_Edit%))
'  TAB_RE_add(Tableur%,2,RE%(2))
  RE%(3) = dll_call2("RichEditCreateWithEvent",handle(TB_Pan%),handle(RE3_Edit%))
'  TAB_RE_add(Tableur%,3,RE%(3))
  RE%(4) = dll_call2("RichEditCreateWithEvent",handle(TB_Pan%),handle(RE4_Edit%))
'  TAB_RE_add(Tableur%,4,RE%(4))
  RE%(5) = dll_call2("RichEditCreateWithEvent",handle(TB_Pan%),handle(RE5_Edit%))
'  TAB_RE_add(Tableur%,5,RE%(5))
 
  for i%=1 to 5
      res% = dll_call5("RichEditGeometry",RE%(i%),5,5,750,455)
      res% = dll_call3("RichEditFunction",RE%(i%),9,3)
'      res% = dll_call3("RichEditFunction",RE%(i%),10,0)
  next i%
 
  TAB_RE_add(Tableur%,1,RE%(1))
  TAB_RE_add(Tableur%,2,RE%(2))
  TAB_RE_add(Tableur%,3,RE%(3))
  TAB_RE_add(Tableur%,4,RE%(4))
  TAB_RE_add(Tableur%,5,RE%(5))


'  -- StatutBar --

  obj%=obj%+1 : SB%=obj%
  O_Statut_Bar(obj%,0,1,1)

  obj%=obj%+1 : SB_alpha%=obj%
  O_Alpha(obj%,0,1,top(sb%)+3,10,0,0,""):color SB_alpha%,230,230,230
  font_name obj%,"arial":font_color obj%,0,0,250

End_sub

Sub Init_TB()
  dim_local x%,h$,ic$
  TB_res% = dll_call4("CreateToolbar",handle(0),handle(TB_Edit%),0,TB_Position%)
  TB_res% = dll_call4("ModifyToolbar",7,TB_IcoSize%,0,0)
  Adapter_Container()
  TB_res% = dll_call4("ModifyToolbar",2,0,0,0)
  TB_res% = dll_call4("ModifyToolbar",5,adr(TB_Lib$),0,0)
 
      TB_icon$(1) = " "
      TB_icon$(2) = " "
      TB_icon$(3) = " "
      TB_icon$(4) = " "
      TB_icon$(5) = " "
      TB_icon$(6) = " "
      TB_icon$(7) = " "
      TB_icon$(8) = " "
      TB_icon$(9) = " "
      TB_icon$(10)= "USER_1"
      TB_icon$(11)= "USER_2"
      TB_icon$(12)= "USER_3"
      TB_icon$(13)= "USER_15"
      TB_icon$(14)= "USER_4"
      TB_icon$(15)= "USER_5"
      TB_icon$(16)= "USER_6"
      TB_icon$(17)= "USER_7"
      TB_icon$(18)= " "
      TB_icon$(19)= " "
      TB_icon$(20)= " "
      TB_icon$(21)= " "
      TB_icon$(22)= " "
      TB_icon$(23)= " "
      TB_icon$(24)= " "
      TB_icon$(25)= " "
      TB_icon$(26)= " "
      TB_icon$(27)= " "
      TB_icon$(28)= " "
      TB_icon$(29)= " "
      TB_icon$(30)= "USER_10"
      TB_icon$(31)= "USER_15"
      TB_icon$(32)= "USER_13"
      TB_icon$(33)= "USER_12"
      TB_icon$(34)= "USER_15"
      TB_icon$(35)= "USER_11"
      TB_icon$(36)= "USER_14"
      TB_icon$(37)= "USER_15"
      TB_icon$(38)= "USER_8"
      TB_icon$(39)= "USER_9"

      TB_hint$(1) = ""
      TB_hint$(2) = ""
      TB_hint$(3) = ""
      TB_hint$(4) = ""
      TB_hint$(5) = ""
      TB_hint$(6) = ""
      TB_hint$(7) = ""
      TB_hint$(8) = ""
      TB_hint$(9) = ""
      TB_hint$(10)= "Couper"
      TB_hint$(11)= "Copier"
      TB_hint$(12)= "Coller"
      TB_hint$(13)= ""
      TB_hint$(14)= "Gras"
      TB_hint$(15)= "Italique"
      TB_hint$(16)= "Souligné"
      TB_hint$(17)= "Couleur de police"
      TB_hint$(18)= ""
      TB_hint$(19)= ""
      TB_hint$(20)= ""
      TB_hint$(21)= ""
      TB_hint$(22)= ""
      TB_hint$(23)= ""
      TB_hint$(24)= ""
      TB_hint$(25)= ""
      TB_hint$(26)= ""
      TB_hint$(27)= ""
      TB_hint$(28)= ""
      TB_hint$(29)= ""
      TB_hint$(30)= "Boite à outils"
      TB_hint$(31)= ""
      TB_hint$(32)= "Mots clef"
      TB_hint$(33)= "Procédures"
      TB_hint$(34)= ""
      TB_hint$(35)= "Preview"
      TB_hint$(36)= "Compile"
      TB_hint$(37)= ""
      TB_hint$(38)= "Aide Panoramic"
      TB_hint$(39)= "Aide KGF.dll"

  for x%=1 to 39
      h$=TB_hint$(x%)
      ic$=TB_icon$(x%)
      TB_res% = dll_call4("AddButtonToToolbar",x%,x%-1,adr(h$),adr(ic$))
      if ic$="USER_15"
        TB_res% = dll_call4("ModifyToolbar",3,x%,0,0)
      end_if
  next x%
End_sub

Sub Adapter_Container()
  select TB_Position%
    case 0
      top TB_Pan%,TB_IcoSize%+10
      width TB_Pan%,(width(0)-chg_hor%)
      height TB_Pan%,(height(0)-chg_ver%)-33
    case 1
      left TB_Pan%,TB_IcoSize%+12
      width TB_Pan%,(width(0)-chg_hor%)
      height TB_Pan%,(height(0)-chg_ver%)
    case 2
      width TB_Pan%,(width(0)-chg_hor%)
      height TB_Pan%,(height(0)-chg_ver%)
    case 3
      width TB_Pan%,(width(0)-chg_hor%)
      height TB_Pan%,(height(0)-chg_ver%)
  end_select
End_sub

'  ---- FORM OUVERTURE D UN PROJET ----

Sub Form_open_project()
  dim_local a$,b$,b%,x%
  if Form_open_project% >0
      show Form_open_project%
  else
      obj%=obj%+1 : Form_open_project%=obj%
      O_Form(obj%,0,1,top(0),left(0),400,300,"Liste des projets")
      obj%=obj%+1 : OP_liste%=obj%
      O_List(obj%,Form_open_project%,1,5,5,100,100,"",1)
  end_if
  clear OP_liste%
  dir_change user$
  a$=file_find_first$
  a$=file_find_next$
  if left$(a$,1)<>"."
      b%=0
      for x%=1 to len(a$):b$=mid$(a$,x%,1):if b$=".":b%=1:exit_for:end_if:next x%
      if b%=0 : item_add OP_liste%,a$ :end_if
  end_if
  while a$<>"_"
      a$=file_find_next$
      if left$(a$,1)<>"."
        b%=0
        for x%=1 to len(a$):b$=mid$(a$,x%,1):if b$=".":b%=1:exit_for:end_if:next x%
        if b%=0 : item_add OP_liste%,a$ :end_if
      end_if
  end_while
  file_find_close
End_sub

'  ---- FORM OUTILS ----

Sub Form_Tools()
  if Form_tools% >0
      Show Form_tools%
  else
      obj%=obj%+1 : Form_tools%=obj%
      O_Form(obj%,0,1,top(0),left(0)+700,250,300,"Boite à outils")

  '  -- Boutons de sélection de la boite à outils --

  '  BUTTON (Outils string)
      obj%=obj%+1 : B_picture7%=obj%
      O_Button_Picture(obj%,7013,Form_tools%,0,1,5,5,20,20,Pict$(9),Pict$(10))
      hint B_picture7%,"Outils Strings"

  '  BUTTON (Outils code des touches)
      obj%=obj%+1 : B_picture8%=obj%
      O_Button_Picture(obj%,7015,Form_tools%,0,1,5,30,20,20,Pict$(9),Pict$(10))
      hint B_picture8%,"Outils Code des touches"

  '  BUTTON (Outils couleur)
      obj%=obj%+1 : B_picture9%=obj%
      O_Button_Picture(obj%,7017,Form_tools%,0,1,5,55,20,20,Pict$(11),Pict$(12))
      hint B_picture9%,"Outils RVB > Couleurs - Couleurs > RVB"

  '  -- Boite à outils strings --

  '  CONTAINER
      obj%=obj%+1 : Cont1%=obj%
      O_Container(obj%,Form_tools%,1,30,5,180,275,"")

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont1%,1,20,10,0,0,"ASC")
      font_name obj%,"arial":font_bold obj% : font_underline obj%
      font_color obj%,0,0,200

  '  EDIT
      obj%=obj%+1 :ASC_edit%=obj%
      O_Edit(obj%,Cont1%,1,40,10,0,30,"",0)

  '  BUTTON
      obj%=obj%+1 :ASC_button%=obj%
      O_Button(obj%,Cont1%,1,40,50,20,20,">>",1)
      font_bold obj%

  '  ALPHA
      obj%=obj%+1 :ASC_result%=obj%
      ASC_result$="ASC("+chr$(34)+"A"+chr$(34)+")=65"
      O_Alpha(obj%,Cont1%,1,43,80,0,0,ASC_result$)
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont1%,1,70,10,0,0,"Chr$  (0-255)")
      font_name obj%,"arial":font_bold obj% : font_underline obj%
      font_color obj%,0,0,200

  '  EDIT
      obj%=obj%+1 :CHR_edit%=obj%
      O_Edit(obj%,Cont1%,1,90,10,0,30,"",0)

  '  BUTTON
      obj%=obj%+1 :CHR_button%=obj%
      O_Button(obj%,Cont1%,1,90,50,20,20,">>",1)
      font_bold obj%

  '  ALPHA
      obj%=obj%+1 :CHR_result%=obj%
      CHR_result$="Chr$(65)="+chr$(34)+"A"+chr$(34)
      O_Alpha(obj%,Cont1%,1,93,80,0,0,CHR_result$)
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10

  '  -- Boite à outils code des touches  --

  '  EDIT (caché)
      obj%=obj%+1 : Pict_bidon%=obj%
      O_Edit(obj%,Form_tools%,1,40,20,0,10,"",0)

  '  CONTAINER
      obj%=obj%+1 : Cont1%=obj%
      O_Container(obj%,Form_tools%,1,30,5,180,275,"")

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont1%,1,20,10,0,0,"ASC")
      font_name obj%,"arial":font_bold obj% : font_underline obj%
      font_color obj%,0,0,200

  '  EDIT
      obj%=obj%+1 :ASC_edit%=obj%
      O_Edit(obj%,Cont1%,1,40,10,0,30,"",0)

  '  BUTTON
      obj%=obj%+1 :ASC_button%=obj%
      O_Button(obj%,Cont1%,1,40,50,20,20,">>",1)
      font_bold obj%

  '  ALPHA
      obj%=obj%+1 :ASC_result%=obj%
      ASC_result$="ASC("+chr$(34)+"A"+chr$(34)+")=65"
      O_Alpha(obj%,Cont1%,1,43,80,0,0,ASC_result$)
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont1%,1,70,10,0,0,"Chr$  (0-255)")
      font_name obj%,"arial":font_bold obj% : font_underline obj%
      font_color obj%,0,0,200

  '  EDIT
      obj%=obj%+1 :CHR_edit%=obj%
      O_Edit(obj%,Cont1%,1,90,10,0,30,"",0)

  '  BUTTON
      obj%=obj%+1 :CHR_button%=obj%
      O_Button(obj%,Cont1%,1,90,50,20,20,">>",1)
      font_bold obj%

  '  ALPHA
      obj%=obj%+1 :CHR_result%=obj%
      CHR_result$="Chr$(65)="+chr$(34)+"A"+chr$(34)
      O_Alpha(obj%,Cont1%,1,93,80,0,0,CHR_result$)
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10

  '  -- Boite à outils couleurs --

  '  CONTAINER
      obj%=obj%+1 : Cont3%=obj%
      O_Container(obj%,Form_tools%,0,30,5,180,275,"")

  '  PICTURE
      obj%=obj%+1 : Pict1%=obj%
      O_Picture(obj%,Cont3%,1,10,5,80,25,""):color obj%,0,0,0

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont3%,1,12,35,0,0,"R")
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10
      font_color obj%,200,0,0

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont3%,1,42,35,0,0,"G")
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10
      font_color obj%,0,200,0

  '  ALPHA
      obj%=obj%+1
      O_Alpha(obj%,Cont3%,1,72,35,0,0,"B")
      font_name obj%,"arial" :font_bold obj% : font_size obj%,10
      font_color obj%,0,0,200

  '  SPIN
      obj%=obj%+1 : spin_red%=obj%
      O_Spin(obj%,Cont3%,1,10,50,0,50,0,255):cursor_point obj%

  '  SPIN
      obj%=obj%+1 : spin_green%=obj%
      O_Spin(obj%,Cont3%,1,40,50,0,50,0,255):cursor_point obj%

  '  SPIN
      obj%=obj%+1 : spin_blue%=obj%
      O_Spin(obj%,Cont3%,1,70,50,0,50,0,255):cursor_point obj%
  end_if
End_sub

Et maintenant, ça marche parfaitement (j'au utilisé KGF.dll du 25/2/2014).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 21:04

On s'est croisé. J'ai adapté aussi l'IDE pour utiliser ce TAB.bas
que je viens de poster en avant-première, mais ce n'est pas encore sur le WebDav.
Utilise-le - tu verras la différence lorsque tu changes d'onglet...

Prends TAB.bas et GUI.bas ci-dessus, et ce sera bon.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 25 Fév 2014 - 22:34

cheers GENIAL Klaus !!!

Tout fonctionne !!!

Bref j' ai pris TAB.bas + tes modifs de GUI.bas.
Le GUI.bas avait un peu évolué depuis...

Bref, je suis aux anges...

edit: d' ici peu je mettrai une version finie au niveau du GUI
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 22:50

Super.

Bientôt, je vais intégrer le nouveau TAB.bas dans l'IDE.
Je vais aussi mettre à jour la doc de l'IDE pour expliquer les contraintes d'utilisation
des objets Tab et RichEdit.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mar 25 Fév 2014 - 23:26

Nouvelle version:
IDE V1.0.27 du 25/02/2014

Nouveauté:
correction de l'affichage d'un objet Tab généré par l'IDE

Modules modifiés:
IDE.exe
IDE.chm
IDE.doc
IDE.pdf
TAB.rtf


Lors de la génération d'un projet contenant au moins un objet Tab, l'IDE génère un fichier dont le nom est le nom du projet, suivi de "_TAB.bas". Ce fichier peut être utilisé indépendemment de l'IDE, par un simple #INCLUDE, pour avoir accès aux procédures qui gèrent les objets Tab. Elles sont documentées dans TAB.rtf. Mais attention: il est conseillé de renommer alors ce fichier, en TAB.bas par exemple.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
sergeauze

avatar

Nombre de messages : 391
Age : 64
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Début d'un autre IDE    Mer 26 Fév 2014 - 1:35

salut
La dernière version de l'IDE me renvoie une violation d’accès
lien ci- dessous vers le message retourné
http://i56.servimg.com/u/f56/17/26/74/89/l_erre10.jpg
lorsque j'indique le chemin de la version de Panoramic
La version précédante fonctionne
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mer 26 Fév 2014 - 1:59

J'ai renommé mon fichier IDE.ini et relancé l'IDE. Il passe bien dans le dialogue de recherche de l'éditeur. Je le sélectionne dans c:\Program files\Panoramic Editor\... et tout se passe bien.

Et l'IDE n'utilise pas KGF.dll pour cela. Tout se passe par des appels API directs.

Place IDE.exe dans un dossier dans lequel le programme a le droit d'écriture, vérifie que IDE.ini est absent, pis relance-le. Il devrait passer immédiatement dans le dialogue de recherche de l'éditeur, avant de faire autre chose...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
sergeauze

avatar

Nombre de messages : 391
Age : 64
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Début d'un autre IDE    Mer 26 Fév 2014 - 2:12

j'ai renommé  en IDE.ini et ça a suffit pour que tout rentre dans l'ordre
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Klaus

avatar

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

MessageSujet: Re: Début d'un autre IDE    Mer 26 Fév 2014 - 2:15

???
Alors, quel était son nom, auparavant ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
sergeauze

avatar

Nombre de messages : 391
Age : 64
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Début d'un autre IDE    Mer 26 Fév 2014 - 2:39

IDE tout court
Le pb est revenu au deuxième essai
Mais en déplaçant IDE.ini sur le bureau       ça fonctionne
J'ai verifié sur plusieurs essais
bonsoir et merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Klaus

avatar

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

MessageSujet: V1.0.28 du 07/03/2014 - MIN,MAX,POSITION pour SPIN   Ven 7 Mar 2014 - 14:49

Nouvelle version:
IDE V1.0.28 du 07/03/2014

Nouveauté:
Propriétés MIN,MAX,POSITION pour SPIN

Modules modifiés:
IDE.exe

J'ai ajouté ces 3 propriétés pour l'objet SPIN. Je les avais oubliés. Pas de changement de la doc. les sources sont à jour.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 7 Mar 2014 - 15:25

Je vais mettre à jour... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sergeauze

avatar

Nombre de messages : 391
Age : 64
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Début d'un autre IDE    Sam 22 Mar 2014 - 2:31

Salut
une chose m' échappée  dans l'IDE
no% prend un valeur qui s’incrémente de 1  à chaque  objet crée
Ca j'ai compris
Mais ( au risque de  paraitre ridicule) je ne vois pas comment appeler dans un programme
chacun des objets: charger une image dans le picture  3 par exemple  
On ne sait plus  que  la valeur  de no% pour cet objet
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Yannick

avatar

Nombre de messages : 7825
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 22 Mar 2014 - 2:54

Si no% est incrémenté de +1
Chaque objet à sa variable qui prend la valeur de no%

ex :
on incrémente no% et on passe la valeur de no% à la variable Edit_form0% qui représentera le numéro de l' objet Edit


no%=no%+1  : Edit_form0%=no%


on déclare l' objet
( no% n' ayant pas encore été ré-incrémenté, on utilise no% pour éviter l' usure des doigts sur le clavier avec une variable objet
très longue style Edit_du _nom_de_la grand_mere_du_voisin_de_mon_beau_frere%)

Edit no%

Plus tard pour faire référence à cette Edit on mettra Edit_form0% en lieu et place du numéro de l'objet Edit...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sergeauze

avatar

Nombre de messages : 391
Age : 64
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Début d'un autre IDE    Sam 22 Mar 2014 - 3:12

je dois donc accomplir toutes les actions sur  l'objet avant avant que no % ne soit incrément
si j'ai  un scroll-bar avec on change  Label etc  ,  et que je veux agir  sur un objet crée avant ,
ça n'est pas possible
Ai_je bien compris?
Il y a des évidences qui ne me sautent pas forcemént aux yeux
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Contenu sponsorisé




MessageSujet: Re: Début d'un autre IDE    

Revenir en haut Aller en bas
 
Début d'un autre IDE
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 8 sur 9Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8, 9  Suivant
 Sujets similaires
-
» Un autre mystère
» Saga ... C'est une autre Histoire !
» Comment faire un lien vers une autre page du site ?
» mettre à l'heure d'un autre pays
» Comment faire un lien vers un autre site?

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