Forum Liberty Basic France

Débutant » TextBox et réponse ...
Le 18/12/2012 à 21h14

Libertynaute Actif

Groupe: Membre

Inscrit le: 04/12/2012
Messages: 139
Voilà ... encore des questions de débutants ... Mais comment apprendre si on ne demande pas à ceux qui savent ?
Alors, la question :
Je construis un TEXTBOX, j'utilise les instructions adéquates, et ça fonctionne.
Mais j'aimerai que la fin de ma saisie, soit ENTER soit TAB me mène directement au champ suivant. Possible ? J'utilise OPEN ... FOR WINDOW AS ... ou OPEN ... FOR DIAPLOG AS ... et je n'arrive pas à mes fins. Une solution serait le bienvenus.
Merci d'avance
Cordialement
Horace
____________________
The Basic and I

Mail Web    
Le 19/12/2012 à 01h35

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Il y a ça:
textbox #w.tb, xx, yy, larg, haut
....
.....
#w.tb, "!setfocus" qui donne le focus à #w.tb

Si tu donne des noms avec indice: w.tb01....tb02....tb03
Tu peux faire tourner le focus en extrayant l'indice du handle avec word$(...handle$.... Mais c'est assez velu.
Regarde le prog: "chutes" dans jeux. il y a une gestion des boutons de ce type .......à+



Edité par Roland Le 19/12/2012 à 01h38
____________________
Roro

   
Le 19/12/2012 à 08h59

Libertynaute Actif

Groupe: Membre

Inscrit le: 04/12/2012
Messages: 139
C'est vraiment super ... Pendant que je dors, y en a des qui s'occupe de mes problèmes !
Merci Roland, c'est exactement ce dont j'ai besoin, je vais tester ça ce matin.
Salutations
Horace
____________________
The Basic and I

Mail Web    
Le 19/12/2012 à 10h42

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Denis-Horace:
Voilà ... encore des questions de débutants ... Mais comment apprendre si on ne demande pas à ceux qui savent ?


Moi aussi j'ai cette superbe devise : "mieux vaut un qui sait que moi qui cherche" :top
Mais ça ne m'a jamais retenu de fouiller l'aide de JB :siffle

La pratique étant très souvent bien mieux que la théorie, je te propose de partager avec nous ton code, ça nous sera beaucoup plus facile de t'aider.

Denis-Horace:
Mais j'aimerai que la fin de ma saisie, soit ENTER soit TAB me mène directement au champ suivant.


Si j'ai bien compris, tu as donc plusieurs TEXTBOX. Il me semble que JustBasic fait déjà ça par défaut...!
Les TEXTBOX ou plus généralement les contrôles passent de l'un à l'autre dans l'ordre où ils ont été déclarés avec TAB ou ENTRER, l'idée générale étant de pouvoir créer et utiliser facilement un formulaire par exemple pour enregistrer des données, pour peu que la fenêtre dans laquelle ils sont, ait le focus bien sûr.
Faut voir le code !
Il se pourrait que ce soit encore plus simple que ce que Roland te propose... :top

@+



Edité par cassiope01 Le 20/12/2012 à 11h09
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 19/12/2012 à 21h40

Libertynaute Actif

Groupe: Membre

Inscrit le: 04/12/2012
Messages: 139
Voui, Cassiope07, tu as tout compris. Effectivement, dans une fenêtre, j'ai jusqu'à 8 textbox à remplir.
Je vous prépare un petit bout de code, que je posterai un peu plus tard dans la soirée. Quant au "default", le BASIC 4 de COMODORE 4040 (mon apprentissage !!! Et ça date !" le faisait très bien, avec RETURN ou TAB. Cette façon de faire dans LB me rappelle les premiers pas dans C !
Merci tout plein de l'aide apportée, et ce n'ast pas fini !
Salutations
Horace

____________________
The Basic and I

Mail Web    
Le 19/12/2012 à 22h12

Libertynaute Actif

Groupe: Membre

Inscrit le: 04/12/2012
Messages: 139
Voila un bout de code ... Je me suis servi des balises, comme recommandé !

Merci d'avance

Salutations
Horace
Code VB :
 
 
' nomainwin
    WindowWidth = 360
    WindowHeight = 270
 
    textbox #main.t1, 100, 51, 136, 25
    textbox #main.t2, 100, 81, 136, 25
    button #main, "Entrer", [fermer], UL, 100, 111, 136, 25
 
    button #main.default, "Ok", [afficher], UL, 340, 240
    open "TEST TEXTBOX" for dialog as #main
 
    print #main, "trapclose [fermer]"
    print #main.t1, "!setfocus";
    print #main.t1, "!contents? t1$"
    input  #main.t1, t1$
    print t1$
 
    wait
 
    print #main.t2, "!setfocus";
    print #main.t2, "!contents?"
    input  #main.t1, t2$
    print t2$
    wait
 
[afficher]
    print t1$
'ici on fait quelque chose avec t1$
    print t2$
'ici on fait quelque chose avec t2$

[fermer]
    print t1$
    print t2$
    prompt "On y est "; k$
 
    close #main
 
____________________
The Basic and I

Mail Web    
Le 21/12/2012 à 13h55

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
c'est souvent plus simple qu'il n'y parait :

Code VB :
' nomainwin
    WindowWidth = 380
    WindowHeight = 270
 
    textbox #main.t1, 100, 51, 136, 25
    textbox #main.t2, 100, 81, 136, 25
    button #main.bt1, "Entrer", [afficher], UL, 100, 111, 136, 25
    button #main.bt2, "Ok", [fermer], UL, 150, 150
    open "TEST TEXTBOX" for window_nf as #main  'dialog
    #main "trapclose [fermer]"
 
    #main.t1 "!setfocus"  ' focus sur le premier textbox pour commencer la saisi tout de suite...

    ' TAB passera au contrôle suivant qui est #main.t2, puis au bouton "Entrer" (#main.bt1), etc...

    wait
 
[afficher]  ' à l'appui sur le bouton "Entrer" ( #main.bt1)
    #main.t1 "!contents? t1$"  ' on prend ce qu'il y a dans #main.t1
    print t1$
'ici on fait quelque chose avec t1$
    #main.t2 "!contents? t2$"  ' on prend ce qu'il y a dans #main.t2
    print t2$
'ici on fait quelque chose avec t2$
wait
 
[fermer]
    k$ = t1$;" , ";t2$
    prompt "On y est "; k$
 
    close #main
    END
 


je pense que c'est ce que tu voulais faire, mais c'est vrai qu'on ne valide pas la saisie d'un champ avec "Entrée" et ça peut être troublant...
Peut-être qu'on peut le faire avec une astuce !? faut que je cherche...
Il me semble avoir vu ça sur le forum anglophone, en utilisant un bouton 'caché' pour chaque champ...!


@+



Edité par cassiope01 Le 23/12/2012 à 10h44
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 22/12/2012 à 11h05

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Il existe aussi une solution qui consisterait à déplacer un seul TEXTBOX sur le champ à éditer avec les flèches haut/bas ou bien TAB voire Entrer pourquoi pas, mais c'est un chouia moins simple.
Ce serait grâce à la commande "refresh" qui ne fonctionne pas avec TOUS les contrôles en JustBasic car elle est héritée de LibertyBasic... et en utilisant des variables comme coordonnées du TEXTBOX.

Je peux essayer de te montrer ça si tu me donnes les titres et contenus potentiels de tes 8 TEXTBOX et ce que tu en fais une fois remplis...

Défi sympa... :top

@+



Edité par cassiope01 Le 22/12/2012 à 20h02
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 22/12/2012 à 23h02

Libertynaute Actif

Groupe: Membre

Inscrit le: 04/12/2012
Messages: 139
Merci à tous de ces explications fructueuses... Mais j'ai d'autres priorités dans les quelques jours qui suivent ... Fêtes obligent, et toute la famille (nombreuse !). Reprise de contact après Nouvel An. Joyeuses Fêtes à tous, heureuse année et salutations les plus cordiales.
Denis-Horace
____________________
The Basic and I

Mail Web    
Le 23/12/2012 à 10h38

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Joyeuses fêtes à toi aussi Horace, et à l'année prochaine :miam

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 11/01/2013 à 21h16

Libertynaute Actif

Groupe: Membre

Inscrit le: 04/12/2012
Messages: 139
Pour en revenir à ce problème, voici un bout de code en QB45. J'aimerai le même résultat en LB. Possible ? Bien sûr, avec le confort des fenêtres Windows et des multiples handle ! En plus, pouvoir contrôler et valider chaque champs l'un après l'autre ... encore qu'une validation globale par écran soit supportable !
Merci d'une ouverture ... sinon je vais écrire un certain nombre de fonctions directement en C++ et les appeler kif-kif les API. Ou alors je trouve dans le dictionnaire des API celle qui me convient !!
En attente ... Cordialement à tous
Horace


Code TEXT :
 
MAIN:     
	GOSUB SAISIR
	IF DTE$ = "" THEN END
 
SAISIR:
	CLS
	LOCATE 1, 2
	PRINT "CreEcr"
	LOCATE 1, 10
	PRINT REL$
	LOCATE 1, 70
	PRINT DATE$
	LOCATE 2, 27
	PRINT "CREATION D'UNE ECRITURE"
	LOCATE 6, 2
	PRINT "Nombre d'" + CHR$(130) + "critures : "; NOECR
	LOCATE 6, 30
	PRINT "Ecriture : ", (NOECR + 1)
	LOCATE 9, 2
	PRINT "Date (JJMMAA) F = Fin :"
	LOCATE 11, 2
	PRINT "Libell" + CHR$(130) + "               :"
	LOCATE 13, 2
	PRINT "Du compte             :"
	LOCATE 15, 2
	PRINT "Montant D" + CHR$(130) + "bit         :"
DATE:
	LOCATE 9, 26
	PRINT "                              "
	LOCATE 9, 26
	INPUT " ", DTE$
	IF DTE$ = "" THEN RETURN
	GOSUB VALIDATE
	LOCATE 9, 26
	PRINT DATEW$
TXT:
	LOCATE 11, 26
	PRINT "                              "
	LOCATE 11, 26
	INPUT " ", TXT$
	TXT$ = UCASE$(TXT$)
DEBIT:
	LOCATE 13, 26
	PRINT "                              "
	LOCATE 13, 26
	INPUT " ", DUC$
	GOSUB VALCPT
	LOCATE 13, 34
	PRINT TLICPT$
	LOCATE 13, 54
	PRINT TMONCPT$
DMONTANT:
	LOCATE 15, 26
	PRINT "                              "
	LOCATE 15, 26
	INPUT " ", DMNT$
	DMNT = VAL(DMNT$)
	DMTECR = DMNT& * (-1)
CREDIT:
	LOCATE 17, 2
	PRINT "Au compte             :"
	LOCATE 19, 2
	PRINT "Montant Cr" + CHR$(130) + "dit        :"
CR:
	LOCATE 17, 26
	PRINT "                              "
	LOCATE 17, 26
	INPUT " ", AUC$
	GOSUB VALCPT
	LOCATE 17, 34
	PRINT TLICPT$
	LOCATE 17, 54
	PRINT TMONCPT$
CMONTANT:
	LOCATE 22, 2
	PRINT "                                         "
	LOCATE 19, 26
	PRINT "                   "
	LOCATE 19, 26
	INPUT " ", CMNT$
	CMNT = VAL(CMNT$)
 
VALIDECR:
	LOCATE 22, 2
	PRINT "Ecriture valable ?                 "
	LOCATE 22, 24
	K$ = ""
	INPUT " ", K$
	IF (K$ = "n") OR (K$ = "N") THEN GOTO SAISIR
	GOSUB ECRECR
	GOTO SAISIR
RETURN
 
VALIDATE:
'ICI ON VALIDE LA DATE
	DATEW$ = DTE$
RETURN
 
VALCPT:
'ICI ON VALIDE LE COMPTE
	TLICPT$ = "Libelle d'un compte"
	TMONCPT$ = "Eur"
RETURN
 
ECRECR:
'ICI ON ENVOIE LES ECRITURES SUR LE RESEAU
RETURN
 
 
____________________
The Basic and I

Mail Web    
Le 11/01/2013 à 22h12

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Tu devrais décrire ce que fait ton prog.
Je vais le charger dans un émulateur pour voir ce qui sort.
____________________
Roro

   
Le 11/01/2013 à 22h17

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ah ah, pas la peine de préciser... ça saute aux yeux comme la grenouille dans la mare ..

Dans ton code transcris en JB ou en LB.
Les "locates" Seront remplacés par des "statictext's" indiquants la nature du champs à remplir.
Les "input" peuvent etres remplacés par des "textbox", dont les données sont directement exploitables, par l'interrogation du contenu.
Les "VALIDECR" Peuvent etres remplacer par des "confirm box". Appelées par le bouton de validation de l'entrée.

Finalement, ce que tu devrais faire, c'est un zouli dessin de l'interface qui serait idéale selon toi.
Aprés, il restera à savoir quelle forme de stockage serait la plus pertinente.




Edité par Roland Le 11/01/2013 à 23h19
____________________
Roro

   
Le 12/01/2013 à 15h41

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Salut Horace,

ton bout de code pourrait s'écrire quasiment pareil en JB, à quelques corrections de syntaxe près...

Code VB :
[MAIN]
    GOSUB [SAISIR]
    IF DTE$ = "" THEN END
 
[SAISIR]
    CLS
    LOCATE 1, 2
    PRINT "CreEcr"
    LOCATE 1, 10
    PRINT REL$
    LOCATE 1, 40
    PRINT DATE$
    LOCATE 2, 27
    PRINT "CREATION D'UNE ECRITURE"
    LOCATE 6, 2
    PRINT "Nombre d'écritures : "; NOECR
    LOCATE 6, 30
    PRINT "Ecriture : "; (NOECR + 1)
    LOCATE 9, 2
    PRINT "Date (JJMMAA) F = Fin :"
    LOCATE 11, 2
    PRINT "Libellé               :"
    LOCATE 13, 2
    PRINT "Du compte             :"
    LOCATE 15, 2
    PRINT "Montant Débit         :"
[DATE]
    LOCATE 9, 26
    PRINT "                              "
    LOCATE 9, 26
    INPUT "Date (JJMMAA) F = Fin : "; DTE$
    IF DTE$ = "" THEN RETURN
    GOSUB [VALIDATE]
    LOCATE 9, 26
    PRINT DATEW$
[TXT]
    LOCATE 11, 26
    PRINT "                              "
    LOCATE 11, 26
    INPUT "TXT : "; TXT$
    TXT$ = UPPER$(TXT$)
[DEBIT]
    LOCATE 13, 26
    PRINT "                              "
    LOCATE 13, 26
    INPUT "Débit : "; DUC$
    GOSUB [VALCPT]
    LOCATE 13, 34
    PRINT TLICPT$
    LOCATE 13, 54
    PRINT TMONCPT$
[DMONTANT]
    LOCATE 15, 26
    PRINT "                              "
    LOCATE 15, 26
    INPUT "Montant : "; DMNT$
    DMNT = VAL(DMNT$)
    DMTECR = DMNT * (-1)
[CREDIT]
    LOCATE 17, 2
    PRINT "Au compte             :"
    LOCATE 19, 2
    PRINT "Montant Crédit        :"
[CR]
    LOCATE 17, 26
    PRINT "                              "
    LOCATE 17, 26
    INPUT "Crédit : "; AUC$
    GOSUB [VALCPT]
    LOCATE 17, 34
    PRINT TLICPT$
    LOCATE 17, 54
    PRINT TMONCPT$
[CMONTANT]
    LOCATE 22, 2
    PRINT "                                         "
    LOCATE 19, 26
    PRINT "                   "
    LOCATE 19, 26
    INPUT " "; CMNT$
    CMNT = VAL(CMNT$)
 
[VALIDECR]
    LOCATE 22, 2
    PRINT "Ecriture valable ?                 "
    LOCATE 22, 24
    K$ = ""
    INPUT "O/N "; K$
    IF (K$ = "n") OR (K$ = "N") THEN GOTO [SAISIR]
    GOSUB [ECRECR]
    GOTO [SAISIR]
RETURN
 
[VALIDATE]
'ICI ON VALIDE LA DATE
    DATEW$ = DTE$
RETURN
 
[VALCPT]
'ICI ON VALIDE LE COMPTE
    TLICPT$ = "Libelle d'un compte"
    TMONCPT$ = "Eur"
RETURN
 
[ECRECR]
'ICI ON ENVOIE LES ECRITURES SUR LE RESEAU
RETURN
 


Bon, ça ne donne pas grand chose, mais toutes ces commandes existent aussi en JB...!
Si tu jettes un oeil sur la commande INPUT dans l'aide de JB tu verras qu'elle a diverses formes d'utilisations.

Voici un petit exemple de gestion de base de données, écrit par Stephan sur le Wiki : http://justbasic.wikispaces.com/Simple_Database_Framework#WithGOSUB

Code VB :
' http://justbasic.wikispaces.com/Simple_Database_Framework

[init]
    'predefine item array
    dim items$(1)
 
    'get database contents
    gosub [OpenDB]
    gosub [ReadDB]
    gosub [CloseDB]
 
[MainGUI]
    'Form created with the help of Freeform 3 v01-28-07
    'Generated on Jun 19, 2007 at 22:50:13

    nomainwin
    WindowWidth = 440
    WindowHeight = 230
    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)
 
    listbox #main.itemlist, items$(, [DisplayItem],    5,   5, 175, 185
    statictext #main.NumberTxt,  "Item Number:", 200,   7,  80,  25
    statictext #main.NumberDisp, "",             300,   7,  95,  25
    statictext #main.NameTxt,    "Item Name:",   200,  32,  80,  25
    statictext #main.NameDisp,   "",             300,  32,  95,  25
    statictext #main.PrizeTxt,   "Item Prize:",  200,  57,  80,  25
    statictext #main.PrizeDisp,  "",             300,  57,  95,  25
    button #main.add,   "Add Item",   [add],       UL, 200, 112,  63,  25
    button #main.edit,  "Edit Item",  [edit],      UL, 275, 112,  63,  25
    button #main.delete,"Delete Item",[delete],    UL, 350, 112,  75,  25
    button #main.search,"Search",     [search],    UL, 200, 162,  63,  25
    button #main.exit,  "EXIT",       [quit.main], UL, 350, 162,  39,  25
 
    open "Simple Database Framework" for window as #main
    print #main, "font ms_sans_serif 10"
    print #main, "trapclose [quit.main]"
    #main.itemlist "singleclickselect"
    wait
 
[add]
    extension$ = "add"
    gosub [CheckButton]
    wait
 
[edit]
    extension$ = "edit"
    gosub [CheckButton]
    wait
 
[delete]
    extension$ = "delete"
    gosub [CheckButton]
    wait
 
[DisplayItem]
    'get index of selected item
    #main.itemlist "selectionindex? SelectedItem"
 
    #main.NameDisp word$(items$(SelectedItem), 1, chr$(0))
    #main.NumberDisp word$(items$(SelectedItem), 2, chr$(0))
    #main.PrizeDisp word$(items$(SelectedItem), 3, chr$(0))
    wait
 
[search]
    'search in the database
    WindowWidth = 430
    WindowHeight = 190
 
    'position of dialogs are relative to previous open window
    UpperLeftX=1
    UpperLeftY=1
 
    textbox    #search.String,   5,   5, 175,  25
    button     #search.default,    "Search", [doSearch],  UL, 200,   5,  75,  25
    listbox    #search.itemlist,   search$(,[doDisplay],   5,  35, 175, 120
    statictext #search.NumberTxt,  "Item Number:", 200,  35,  80,  25
    statictext #search.NumberDisp, "",             300,  35,  95,  25
    statictext #search.NameTxt,    "Item Name:",   200,  60,  80,  25
    statictext #search.NameDisp,   "",             300,  60,  95,  25
    statictext #search.PrizeTxt,   "Item Prize:",  200,  85,  80,  25
    statictext #search.PrizeDisp,  "",             300,  85,  95,  25
    button     #search.cancel,     "Close",[quit.search],  UL, 300, 127,  63,  25
 
    'modal windows block access to the previous window
    open "Search Database for Name" for dialog_modal as #search
    print #search, "font ms_sans_serif 10"
    print #search, "trapclose [quit.search]"
    #search.itemlist "singleclickselect"
    wait
 
[doSearch]
    redim search$(MaxItems)
    foundItem = 0
 
    ' search by name = field 1
    FieldNumber = 1
 
    #search.String "!contents? SearchString$"
 
    for Count = 1 to MaxItems
        'ignore case using LOWER$()
        if instr(lower$(word$(items$(Count), FieldNumber, chr$(0))), lower$(SearchString$)) > 0 then
            foundItem = foundItem + 1
            search$(foundItem) = items$(Count)
        end if
    next
 
    #search.itemlist "reload"
    #search.itemlist "selectindex 0"
    wait
 
[doDisplay]
    'get index of selected item
    #search.itemlist "selectionindex? index"
 
    #search.NameDisp word$(search$(index), 1, chr$(0))
    #search.NumberDisp word$(search$(index), 2, chr$(0))
    #search.PrizeDisp word$(search$(index), 3, chr$(0))
    wait
 
[quit.search]
    close #search
    wait
 
[quit.main]
    close #main
    END
 
[CheckButton]
    'select action based on pushed button
    select case extension$
        case "add"
        SelectedItem = MaxItems
        DialogCaption$ = "Add Item"
        gosub [DisplayDialog]
 
        case "edit"
        DialogCaption$ = "Edit Item"
        if SelectedItem > 0 then gosub [DisplayDialog]
 
        case "delete"
        if SelectedItem > 0 then gosub [DeleteItem]
    end select
 
    'refresh listbox contents
    #main.itemlist "reload"
 
    'cancel selection to allow reselection of currently selected item
    #main.itemlist "selectindex 0"
    return
 
[DisplayDialog]
    'Form created with the help of Freeform 3 v01-28-07
    'Generated on Jun 19, 2007 at 22:59:56

    WindowWidth = 275
    WindowHeight = 195
 
    'position of dialogs is relative to previous open window
    UpperLeftX=1
    UpperLeftY=1
 
    statictext #item.NumberTxt, "Item Number:",  10,   7,  80,  25
    statictext #item.NameTxt,   "Item Name:",    10,  42,  80,  25
    statictext #item.PrizeTxt,  "Item Prize:",   10,  77,  80,  25
    textbox #item.Number, 105,   7, 150,  25
    textbox #item.Name,   105,  42, 150,  25
    textbox #item.Prize,  105,  77, 150,  25
    button #item.cancel,  "Close",[quit.item], UL,  95, 127,  63,  25
    button #item.default, "Apply",[apply],     UL, 180, 127,  75,  25
 
    'modal windows block access to the previous window
    open DialogCaption$; " - "; SelectedItem for dialog_modal as #item
    print #item, "font ms_sans_serif 10"
    print #item, "trapclose [quit.item]"
 
    if SelectedItem <> MaxItems then
        #item.Name word$(items$(SelectedItem), 1, chr$(0))
        #item.Number word$(items$(SelectedItem), 2, chr$(0))
        #item.Prize word$(items$(SelectedItem), 3, chr$(0))
    end if
    #item.Number "!setfocus"
    wait
 
[apply]
    ' apply changes
    #item.Number "!contents? Temp1$"
    #item.Name "!contents? Name$"
    #item.Prize "!contents? Temp2$"
 
    ' Make sure info in boxes is the proper type of data (number/string)
    if Temp1$ = str$(val(Temp1$)) then
        Number = val(Temp1$)
    else
        ' Item entered in the Number box is not a number !
        notice "Item Number must be numeric only."
        wait
    end if
    if Temp2$ = str$(val(Temp2$)) then
        Prize = val(Temp2$)
    else
        ' Item entered in the Prize box is not a number !
        notice "Item Prize must be numeric only."
        wait
    end if
 
    'fill the array element with the data
    'separate fields by CHR$(0) to display only the first field in the listbox
    items$(SelectedItem) = trim$(Name$); chr$(0); Number; chr$(0); Prize
 
    gosub [ApplyItemData]
    gosub [quit.item]
    wait
 
[quit.item]
    'exit dialog
    close #item
    return
 
[ApplyItemData]
    gosub [BackupDB]
    gosub [OpenDB]
    gosub [WriteDB]
    gosub [ReadDB]
    gosub [CloseDB]
    return
 
[DeleteItem]
    confirm "Delete Item ... "+str$(SelectedItem)+chr$(13)+_
        "Name ..... "+word$(items$(SelectedItem), 1, chr$(0))+chr$(13)+_
        "Number ... "+word$(items$(SelectedItem), 2, chr$(0))+chr$(13)+_
        "Prize .... "+word$(items$(SelectedItem), 3, chr$(0)); answer
 
    if answer then
        items$(SelectedItem) = ""
 
        gosub [BackupDB]
        gosub [OpenDB]
        gosub [WriteDB]
        gosub [ReadDB]
        gosub [CloseDB]
    end if
    return
 
[OpenDB]
    'open database and define record length
    open "database.dat" for random as #db len=150
 
    'set the fields, include some extra space for future use
    field #db,_
        40 as ItemName$,_
        10 as ItemNumber,_
        10 as ItemPrize,_
        90 as Reserve$
    return
 
[CloseDB]
    close #db
    return
 
[ReadDB]
    'get the number of records in the database
    '= length of database file divided by the record length
    TotalRecords = lof(#db)/150
 
    'check if the database is corrupted
    if TotalRecords <> int(TotalRecords) then
        notice "Database corrupted"; chr$(13); "Please check its contents!"
        TotalRecords = int(TotalRecords + .5)
    end if
 
    'dimension array to enable adding one record
    MaxItems = TotalRecords + 1
    redim items$(MaxItems)
 
    for Record = 1 to TotalRecords
        get #db, Record
 
        'fill the array with the data
        'separate fields by CHR$(0) to display only the first field in the listbox
        items$(Record) = trim$(ItemName$); chr$(0); ItemNumber; chr$(0); ItemPrize
    next
    return
 
[WriteDB]
    Record = 1
 
    for Count = 1 to MaxItems
        if items$(Count) <> "" then
            ItemName$ = word$(items$(Count), 1, chr$(0))
            ItemNumber = val(word$(items$(Count), 2, chr$(0)))
            ItemPrize = val(word$(items$(Count), 3, chr$(0)))
 
            put #db, Record
            Record = Record + 1
        end if
    next
    return
 
[BackupDB]
    if FileExists("database.bak") then kill "database.bak"
 
    name "database.dat" as "database.bak"
    return
 
function FileExists(FilePath$)
    ' returns zero if file does not exist
    ' returns one if file exists
    dim FileExistsInfo$(1,1)
 
    files "", FilePath$, FileExistsInfo$(
 
    FileExists = val(FileExistsInfo$(0,0))
end function
 


C'est une base imaginée par Stephan, mais il y a bien d'autres façons de voir les choses ;)

Je rejoins Roland sur l'idée de dessiner l'interface qui serait idéale selon toi ;)

@+



Edité par cassiope01 Le 12/01/2013 à 17h22
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 27/01/2013 à 14h05

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Cassiope, je profite que tu est sur le site pour te signaler que la base de données codée que tu a envoyée chez les amerloc's, ne marche pas chez moi.
Je mets un texte dans la fenêtre, j'entre un code de plus de 4 caractères, et les boutons restent grisés.
Que j'entre le code avant ou aprés le texte.
Caisse qui se passe ?
.......Et bé y se passe qu'il faut cliquer sur "Enter"...Banane que je suis...



Edité par Roland Le 27/01/2013 à 15h10
____________________
Roro

   
Débutant » TextBox et réponse ...  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie