Sluiten vensters

Nieuwe Liberty BASIC programmeurs kunnen hier om hulp vragen.

Moderators: anthonio, Abcott

Sluiten vensters

Berichtdoor KeesW » vr maart 19, 2010 12:12 pm

Beste mensen eem volgend probleem kom ik niet uit.
Er staan twee vensters open, ik verlaat het laatst geopende venster met close #Handler, dan wordt het ondergelegen eerste venster weer zichtbaar en bruikbaar. Als ik dat eerste venster nu wil sluiten (ddor op het kruis te klikken) krijg ik de volgende foutmelding, wat gaat er nu fout?
En een aansluitende vraag: Kan ik eenvenster maken zonder dat kruis maar niet met de codes _nsb want dan heb ook geen rand.

Runtime error: invalid branch label: [quit] (Komt uit [quit]
close #main : END)

Error(Exception)>>defaultAction
Error(Exception)>>activateHandler: <anUndefinedObject>
Error(Exception)>>handle
Error(Exception)>>signal
Error class(Exception class)>>signal: <'invalid branch label...'>
BasicProgram(Object)>>error: <'invalid branch label...'>
BasicProgram>>goto: <'[quit]'>
BasicProgram>>gotoAndIfStoppedBegin: <'[quit]'>
BasicProgram>>handlerName: <'[quit]'> evaluate: <aBlockClosure> callParameters: <anOrderedCollection>
BasicProgram>>submitHandlerName: <'[quit]'> evaluate: <aBlockClosure> callParameters: <anOrderedCollection>
BasicProgram>>submitHandlerName: <'[quit]'> callParameters: <anOrderedCollection>
BasicDialogTopPane>>trapClose
BasicDialogTopPane>>close
[] in NotificationManager>>closeAllWindows
[] in Dictionary>>do:
LinearHashTable>>elementsDo: <aBlockClosure>
Dictionary(HashedCollection)>>do: <aBlockClosure>
Dictionary>>do: <aBlockClosure>
NotificationManager>>closeAllWindows
SessionModel>>exitWindowSystem1
SessionModel>>exitSession
SystemDictionary>>exit
BasicSourceTopPane>>close
Message>>perform
NotificationManager>>empty
NotificationManager>>runPendingEvents
NotificationManager>>runEventLoop
Message>>perform
Message>>evaluate
Process>>safelyEvaluate: <aMessage>
Process>>evaluate: <aMessage>
KeesW
 
Berichten: 23
Geregistreerd: do dec 10, 2009 2:32 pm

Re: Sluiten vensters

Berichtdoor Gordon » vr maart 19, 2010 3:54 pm

De [quit] fout:
Zou je dat deel van de code waar het om gaat kunnen tonen?
Ik kan de fout niet re-produceren.

Venster zonder afsluitkruisje:
Dat ben ik nog niet tegen gekomen, maar
heb je iets aan stylebits?

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Sluiten vensters

Berichtdoor KeesW » za maart 20, 2010 12:16 pm

Nee aan de stylebits heb ik niets, heb ze al geprobeerd. Je het kruis met de stylebits kwijtraken als je ook de rand weghaald, maar de rand wil ik houden.

het eerste venster, vandaar uit wort er gesprongen naar het tweede venser
Code: Selecteer alles
statictext  #main.statictext1, "Voledige Achternaam", 15, 35, 135, 20
statictext  #main.statictext2, "Straatnaam", 15, 60, 135, 20
statictext  #main.statictext3, "Huisnr.&toev.&postcode", 15, 85, 150, 20
statictext  #main.statictext4, "Plaatsnaam", 15, 110, 150, 20
statictext  #main.statictext5, "Telefoon&Mobiel", 15, 135, 150, 20
statictext  #main.statictext6, "Mailadres", 15, 160, 150, 20
statictext  #main.statictext7, "Autonummer", 15, 185, 150, 20
statictext  #main.statictext8, "Jaar", 255, 185, 35, 20
statictext  #main.statictext9, "Postcode & huisnummer", 370, 35, 155, 20
statictext  #main.statictext10, "Achternaam", 370, 60, 75, 25
statictext  #main.statictext11, "Aankomst", 365, 120, 65, 25
statictext  #main.statictext12, "Verblijf", 545, 120, 50, 20
statictext  #main.statictext13, "Pers.", 635, 120, 35, 25
statictext  #main.statictext14, "Kampeermiddel", 360, 150, 100, 20
statictext  #main.statictext15, "Plaatsnummer", 580, 150, 90, 20
stylebits   #main.button1, _BS_MULTILINE, 0, 0, 0
button      #main.button1, "Zoeken", button2.click, UL, 635, 30, 60, 50
stylebits   #main.button3, _BS_MULTILINE, 0, 0, 0
button      #main.button3, "Controle bezetting", button3.click, UL, 365, 193, 120, 45
stylebits   #main.button4, _BS_MULTILINE, 0, 0, 0
button      #main.button4, "Vastleggen gegevens", button4.click, UL, 515, 190, 170, 40
button      #main.button5, "Vastleggen Klantgegevens", button5.click, UL, 15, 210, 170, 30
button      #main.button6, "Wijzige Klantgegevens", button5.click, UL, 15, 210, 170, 30
bmpbutton   #main.bmpbutton3, "d:\libert~1\libert~1.03\bmp\kalender.bmp",bmpbutton3.click,UL, 507, 110
bmpbutton   #main.bmpbutton5, "d:\libert~1\libert~1.03\bmp\button04.bmp",bmpbutton5.click,UL, 430, 118
            TextboxColor$ = "White"
textbox     #main.textbox1, 170, 30, 170, 25    'Achternaam
            TextboxColor$ = "White"
textbox     #main.textbox2, 170, 55, 170, 25    'Straat
            TextboxColor$ = "White"
textbox     #main.textbox3, 170, 80, 35, 25     'Hsnr
            TextboxColor$ = "White"
textbox     #main.textbox4, 210, 80, 35, 25     'Toev
            TextboxColor$ = "White"
textbox     #main.textbox5, 285, 80, 55, 25     'Postcode
            TextboxColor$ = "White"
textbox     #main.textbox6, 170, 105, 170, 25   'Plaats
            TextboxColor$ = "White"
textbox     #main.textbox7, 170, 130, 80, 25    'Telf
            TextboxColor$ = "White"
textbox     #main.textbox8, 170, 155, 170, 25   'Email
            TextboxColor$ = "White"
textbox     #main.textbox9, 260, 130, 80, 25    'Mobiel
            TextboxColor$ = "White"
textbox     #main.textbox10, 170, 180, 80, 25   'Autonummer
            TextboxColor$ = "White"
textbox     #main.textbox11, 295, 180, 45, 25   'Jaar
            TextboxColor$ = "White"
textbox     #main.textbox12, 530, 30, 55, 25    'Zoek postcode
            TextboxColor$ = "White"
textbox     #main.textbox13, 595, 30, 35, 25    'Zoek hsnr
            TextboxColor$ = "White"
textbox     #main.textbox14, 460, 55, 170, 25   'Zoek achternaam
            TextboxColor$ = "White"
textbox     #main.textbox15, 440, 115, 70, 25
            TextboxColor$ = "White"
textbox     #main.textbox16, 595, 115, 25, 25   'Verblijf
            TextboxColor$ = "White"
textbox     #main.textbox17, 670, 115, 25, 25   'Personen
            TextboxColor$ = "White"
textbox     #main.textbox18, 670, 145, 25, 25   'Plaatsnummer
            ComboboxColor$ = "White"
combobox    #main.combo1,Combo1$(), combobox1.click, 470, 150, 100, 300
groupbox    #main.group1, "Klantgegevens", 5, 15, 345, 228
groupbox    #main.groupbox2, "Zoeken klanten", 360, 15, 345, 75
groupbox    #main.groupbox3, "Reservering", 360, 95, 345, 90
groupbox    #main.groupbox4, "", 360, 180, 130, 60

Open "Klanten reservering" for Dialog_modal as #main
    #main "trapclose [quit]"
    #main.combo1 "selectindex 1"
    #main "font ms_sans_serif 10"
    Call MakeTooltips HWND(#main)

[loop]
print #main.button6, "!hide"
print #main.button3, "!disable"
    Wait
   
[quit]
    close #main :  END


Sprong naar het tweede venser: planning

Code: Selecteer alles
Sub button3.click handle$       'Plan inzien
    '#handle$ contains button handle
    varplaats = 0
    print #main.textbox15, "!contents? Aankomst$"
    Aank$=Aankomst$
    if Aank$="" then exit sub
    call planning Aank$
trace 2
 if varplaats>0 then
        print  #main.textbox18, varplaats
    end if   
End Sub


Het tweede venster:

Code: Selecteer alles
sub planning Aank$
    WindowWidth = 1000 : WindowHeight = 610
    posX =posX + 40 :posY =posY - 80
    UpperLeftY = posY
    UpperLeftX = posX

loadbmp "copyimage", "D:\Liberty-basic\libertybasic\Camping\Code\camping.bmp"
statictext  #plan.statictext1, "Druk op de knop van de plaats voor meer informatie", 20, 550, 335, 40
button      #plan.button, " ","" , UL, 5, 350, 5, 5

'Boven
button      #plan.button01, " 1 ", button40.click, UL, 220, 45, 35, 20
button      #plan.button02, " 2 ", button40.click, UL, 300, 45, 35, 20
button      #plan.button03, " 3 ", button40.click, UL, 380, 45, 35, 20
button      #plan.button04, " 4 ", button40.click, UL, 460, 45, 35, 20
button      #plan.button05, " 5 ", button40.click, UL, 540, 45, 35, 20
button      #plan.button06, " 6 ", button40.click, UL, 620, 45, 35, 20
button      #plan.button07, " 7 ", button40.click, UL, 700, 45, 35, 20
'Rechts
button      #plan.button08, " 8 ", button40.click, UL, 959, 68, 20, 35
button      #plan.button09, " 9 ", button40.click, UL, 959, 158, 20, 35
button      #plan.button10, " 10 ", button40.click, UL, 959, 248, 20, 35
button      #plan.button11, " 11 ", button40.click, UL, 959, 338, 20, 35
button      #plan.button12, " 12 ", button40.click, UL, 959, 428, 20, 35
'Onder
button      #plan.button13, " 13 ", button40.click, UL, 800, 512, 35, 20
button      #plan.button14, " 14 ", button40.click, UL, 720, 512, 35, 20
button      #plan.button15, " 15 ", button40.click, UL, 640, 512, 35, 20
button      #plan.button16, " 16 ", button40.click, UL, 560, 512, 35, 20
button      #plan.button17, " 17 ", button40.click, UL, 480, 512, 35, 20
button      #plan.button18, " 18 ", button40.click, UL, 400, 512, 35, 20
button      #plan.button19, " 19 ", button40.click, UL, 320, 512, 35, 20
'Extra
button      #plan.button20, " 20 ", button40.click, UL, 740, 190, 20, 35
button      #plan.button21, " 21 ", button40.click, UL, 740, 270, 20, 35
    TextboxColor$ = "Green"
textbox     #plan.textbox2, 250, 330, 170, 25 

'bmpbutton   #main.bmpbutton22, "d:\libert~1\libert~1.03\bmp\lbttn.bmp", bmpbutton3Click, UL, 420, 300, 20, 35
'button      #plan.button30, "klik ", button30.click, UL, 5, 150, 25, 25

open "Planning plaatsen" for graphics_nf_nsb       as #plan
print #plan, "drawbmp copyimage 1 1"
print #plan, "backcolor yellow"
print #plan.statictext1, "!font times_new_roman 12"
    #plan "trapclose [uit]"

tekst$="Van " + Aank$ + ", 14 dagen"
print #plan.textbox2, tekst$
'Hierna worden er blokjes getekend en ingekleurd
[uit]
unloadbmp("copyimage")
close #plan
'end sub


vervolgens moet het scherm zich sluiten en terug gesprongen worden naar het eerste scherm wat nog open staat onder dit scherm via de volgende routine:

Code: Selecteer alles
sub button40.click BtnHndl$ 'Knop boven de plaatsen
'Haalt plaatsnummer op
    gevonden=0
    stopen =0
    Char$ = (mid$(BtnHndl$, instr(BtnHndl$, ".")+7, 2))
    Char=val(Char$)
    d$=Aank$
    open "Planning.lbf" FOR RANDOM AS #1 LEN=35
    FIELD #1,4 as KlId$, 10 as Aankomst$, 2 as Verblijf, 2 as Pers, 15 as Middel$, 2 as PNr   
    totRecno= lof(#1) / 35
    for x=1 to totRecno
        get #1, (x)     
        if trim$(Aankomst$)=trim$(d$) and Char=PNr then
            klantnr$=KlId$
            open "Klanten.lbf" FOR RANDOM AS #kl LEN=150
            FIELD #kl,4 as IdNr$, 1 as Gld$, 25 as ANaam$,_
                25 as SNaam$, 4 as HNr$, 4 as HTv$,_
                6 as PCode$, 25 as PNaam$, 10 as TelNr$, 10 as MobNr$,_
                20 as Em$, 12 as ANr$, 4 as Jr$
            tr= int(lof(#kl) / 150)
            for y=1 to tr
                get #kl, (y)
                if trim$(klantnr$)=trim$(IdNr$) then
                    response$="Aangekomen: " + Aankomst$ + ". Verblijf:" + str$(Verblijf) + " dagen."   
                    prompt "Plaats "+ str$(PNr) + " bezet door:" + Chr$ (13) + trim$(ANaam$)_
                    + " " + trim$(SNaam$) + " " + trim$(HNr$) + " " + trim$(PNaam$); response$
                    gevonden=1
                    trace 2
                    if response$<>"" then
                        stoppen=1
                     
                        exit for
                    end if
                end if           
            next
            close #kl
            if gevonden=1 then
                exit for
            end if           
        end if
    next
    if gevonden=0 then
        varplaats=Char
    end if
    close #1
if stoppen=1 then
 '   call sluiten
      unloadbmp("copyimage")
close #plan
end if
end sub


Als je hier niet uitkomt moet ik de hele codelist sturen, maar die is vrij groot

Kees
KeesW
 
Berichten: 23
Geregistreerd: do dec 10, 2009 2:32 pm

Re: Sluiten vensters

Berichtdoor KeesW » za maart 20, 2010 1:17 pm

Ter aanvulling op voorgaand bericht:
De fout treed op als na het sluiten van het tweede scherm het eerste scherm gesloten wordt met behulp van het kruisje.
Het programma wekt de indruk dat het in een oneindige lus terecht komt, het scherm moet dan via taakbeheer-beeindigen prosessen gesloten worden.

Er is nog een scherm open maar dat werkt uitstekend en geeft geen problemen met sluiten, ook niet i.v.m. de andere schermen.
KeesW
 
Berichten: 23
Geregistreerd: do dec 10, 2009 2:32 pm

Re: Sluiten vensters

Berichtdoor Gordon » za maart 20, 2010 4:12 pm

Ik kan de fout nog niet reproduceren.
Ik sluit het 2e venster en daarna het 1e foutloos. En zeker geen
label probleem. Let op dat je nergens de WAIT commando's
vergeet. Want anders loop je door een sub.

Maar ik heb wel iets vreemds (een bug?) in LB aangetroffen.

Code: Selecteer alles
button #m.1, "button", button, UL, 30, 30
open "Test" for window as #m
wait
print "hallo"
wait


Ik geef dit als een bug door.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Sluiten vensters

Berichtdoor KeesW » za maart 20, 2010 4:58 pm

Het sluiten van de vensters zou ook wel eens een bug kunnen zijn:
Als je het volgt met de optie 'debug' gebeurt er het volgende

Het tweede venster wordt gesloten in de subroutine en stop bij end sub.
het venster is dus weg.
Als je vervolgens op het kruisje van het eerste venster klikt gaat de debug aanwijzer door naar [uit] van het tweede scherm (de [uit] moet opvangen het drukken op het kruisje van scherm 2) maar dat scherm is officieel al gesloten.

Druk je scherm 2 uit via het kruisje en daarna scherm 1 met het kruisje is er geen probleem.

Ergo: het programma van scherm twee wordt NIET verlaten of niet gesloten, want als dat wel het geval zou zijn, zou het programma moeten worden vervolgt in de sub van venster 1 van waaruit venster 2 werd aangeroepen.

Kees
KeesW
 
Berichten: 23
Geregistreerd: do dec 10, 2009 2:32 pm

Re: Sluiten vensters

Berichtdoor Gordon » zo maart 21, 2010 1:10 am

Hier is mijn "vertaling"
Code: Selecteer alles
UpperLeftX = 200 : UpperLeftY = 200
nomainwin

button #1.1 "button", knop, ul,30,30
open "Eerste venster" for window as #1
#1 "trapclose [quit]"
wait

sub knop h$
call twee
end sub

[quit]
close #1
end

sub twee
open "Tweede venster" for window as #2
#2 "trapclose [q]"
wait
[q]
close #2
end sub



Ik zou het wat anders programmeren, maar iedereen heeft
het recht de computer te laten doen wat je vraagt.
Door sub met labels te gebruiken loop je steeds het gevaar
van labels die buiten een sub liggen en niet gezien kunnen
worden.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Sluiten vensters

Berichtdoor KeesW » ma maart 22, 2010 11:59 am

Ik heb je programma wat uitgebreid en het geeft nu presies het probleem weer waar ik mee zit
Bij het drukken op het kruis van venster 1 gaat het programma de verkeerde kant op. probeel het maar met debug aan

Kees


Code: Selecteer alles
UpperLeftX = 200 : UpperLeftY = 200
nomainwin

button #1.1 "button", knop, ul,30,30
open "Eerste venster" for window as #1
#1 "trapclose [quit]"
trace 2
wait

sub knop h$
call twee           'maak tweede scherm
end sub

[quit]
close #1
end

sub twee
button #2.1 "button", knop2, ul,30,30
open "Tweede venster" for window as #2

#2 "trapclose [q]"

wait

[q]
close #2            'Gaat hier naartoe bij indrukken van kruis op het eerste scherm, dus fout, immers scherm is bij
                        'vorige handeling gesloten en de handle is niet meer van torpassing
end sub

sub knop2 h$
close #2            'Sluit het tweede scherm
end sub             'Blijt hier steken, gaat niet terug naar aanroepende opdracht, de knop
KeesW
 
Berichten: 23
Geregistreerd: do dec 10, 2009 2:32 pm

Re: Sluiten vensters

Berichtdoor KeesW » ma maart 22, 2010 1:02 pm

Mogelijk heb ik de oplossing gevonden, ik weet alleen nog niet hoe deze oplossing in mijn project past, dat moet ik nog uit proberen.
Als dit volgens jouw een goede oplossing is, en niet algemeen bekend zal zijn, plaats hem dan bij de tips ?

Kees

Code: Selecteer alles
UpperLeftX = 200 : UpperLeftY = 200
'nomainwin

button #1.1 "button", knop, ul,30,30
open "Eerste venster" for window as #1
 #1 "trapclose quit handle$"         'SLUIT HET SCHERM VIA EEN SUB ROUTINE
trace 2
wait

sub knop h$
call twee           'maak tweede scherm
end sub

sub quit handle$        'SLUIT DE VENSTERS AFHANKELIJK VAN DE WAARDE VAN DE HANDLE
print handle$
select case handle$
case "#1"
close #1
case "#2"
close #2
end select
end sub


sub twee
button #2.1 "button", knop2, ul,30,30
open "Tweede venster" for window as #2

#2 "trapclose quit handle$"      'SLUIT HET SCHERM VIA EEN SUB ROUTINE

wait

'NIET MEER IN GEBRUIK------
'[q]
'close #2            'Gaat hier naartoe bij indrukken van kruis op het eerste scherm, dus fout, immers scherm is bij
                        'vorige handeling gesloten en de handle is niet meer van torpassing
 '----------------------------------
end sub

sub knop2 h$
'close #2            'Sluit het tweede scherm
handle$="#2"
call quit handle$   'SLUIT HET SCHERM VIA EEN SUB ROUTINE
end sub             'Blijt hier steken, gaat niet terug naar aanroepende opdracht, de knop



KeesW
 
Berichten: 23
Geregistreerd: do dec 10, 2009 2:32 pm

Re: Sluiten vensters

Berichtdoor Gordon » do maart 25, 2010 11:24 pm

Ok, plaats het bij de tips.
De discussie of het gedrag van LB (sub bij controls)
nog gewijzigd moet worden, is intussen nog gaande.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am


Keer terug naar Beginner

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron