Het juiste venster/de goede handler

Nieuwe Liberty BASIC programmeurs kunnen hier om hulp vragen.

Moderators: anthonio, Abcott

Het juiste venster/de goede handler

Berichtdoor Gesp » vr dec 21, 2012 6:05 pm

Omdat ik van plan ben libertyBasic aan te schaffen, ben ik aan het proefdraaien met de trial-versie. Ik ben redelijk goed thuis in het ouderwetse MS-BASIC, dus ik verwacht straks geen problemen met "moeilijke" zaken als meervoudige arrays, random-files, etc.
Tot mijn schrik loop ik echter nu al vast, bij het "makkelijke" allereerste begin, het openings-scherm. :(

In onderstaand programmaatje wil ik de tekst "Nautafin" in een veel groter en vet lettertype printen, en bovendien gecentreerd. Zoeken in handleidingen en op dit forum hebben me allerlei "oplossingen" laten zien, maar mij lukt het niet. Er gaat steeds iets niet goed. Ik kan kennelijk niet de diverse soorten windows combineren met de juiste bijbehorende handles?
Zou iemand dat Nautafin-regeltje voor me willen verbeteren? Van dat voorbeeld leer ik dan wel weer het nodige!

Bij voorbaat dank,
Gesp


[Start]
nomainwin
UpperLeftX = int((DisplayWidth- 376)/2) 'Horizontale midden
UpperLeftY = int((DisplayHeight- 200)/2) 'Verticale midden
BackgroundColor$ = "blue"
ForegroundColor$ = "white"
TextboxColor$ = "white"
WindowWidth = 376
WindowHeight = 200

statictext #venster.statictext0, "Nautafin", 22, 5, 48, 20 'Dit is een foute handle (denk ik), maar anders kan ik die tekst helemaal niet laten zien.
statictext #venster.statictext1, "Naam:", 22, 46, 40, 20
statictext #venster.statictext2, "Wachtwoord:", 22, 76, 64, 20
textbox #venster.textbox1, 102, 36, 248, 25
textbox #venster.textbox2, 102, 66, 248, 25
button #venster.button, "OK", [knop], UL, 294, 130, 58, 25

open "Nautafin" for window as #venster

'Wachten op aanklikken knop
wait

[knop]
close #venster
Gesp
 
Berichten: 6
Geregistreerd: vr dec 21, 2012 1:26 pm

Re: Het juiste venster/de goede handler

Berichtdoor glpape » za dec 22, 2012 12:09 am

Gesp hallo,

Zo bijvoorbeeld :

Code: Selecteer alles
nomainwin
UpperLeftX = int((DisplayWidth- 376)/2)
UpperLeftY = int((DisplayHeight- 200)/2)
BackgroundColor$ = "blue"
ForegroundColor$ = "white"
TextboxColor$ = "white"
WindowWidth = 376
WindowHeight = 200

statictext #venster.statictext0, "Nautafin", 22, 5, 68, 20
statictext #venster.statictext1, "Naam:", 22, 46, 40, 20
statictext #venster.statictext2, "Wachtwoord:", 22, 76, 64, 20
textbox #venster.textbox1, 102, 36, 248, 25
textbox #venster.textbox2, 102, 66, 248, 25
button  #venster.button, "OK", [knop], UL, 294, 130, 58, 25

open "Nautafin" for window as #venster
#venster "trapclose [knop]"                          ' trapclose

#venster.statictext0 "!font MS_SANS_SERIF 12 bold"   ' font
wait

[knop]
close #venster
End


Je initieert controls voordat je het venster opent. Nadat je het venster hebt geopend kun je de control manipuleren, font, verplaatsen, hide, show; en zo nog een paar. Met uitroepteken ervoor geeft je een commando aan je static text control; zonder uitroepteken wordt het de tekst op het scherm.
MS SANS SERIF is geloof ik Liberty 's default font voor controls.

Lees ook het <<trapclose>> commando eens na in de help file.

Succes !

George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

@ glpape / Documentatie

Berichtdoor Gesp » za dec 22, 2012 12:22 pm

Hi George,

In de eerste plaats: dank voor je reactie. Ik zou nooit op het idee gekomen zijn "achteraf" (dus na het OPEN-statement) nog iets aan te vullen op wat vóór dat statement staat!
Naar aanleiding daarvan een vraag: op de BL-site wordt een aantal boeken genoemd die als basis voor het programmeren kunnen dienen. Kun jij één van die boeken aanbevelen? Ik zoek een "ouderwets degelijk" leerboek.

Groetjes,
Gesp
Gesp
 
Berichten: 6
Geregistreerd: vr dec 21, 2012 1:26 pm

Re: Het juiste venster/de goede handler

Berichtdoor Gordon » za dec 22, 2012 4:45 pm

Hi Gesp,

Je zou misschien ook de statictext ruimte alleen kunnen reserveren.
statictext #venster.statictext0, "", 22, 5, 68, 20

Nadat het venster geopend is kun je de tekst nog invoeren:
#venster.statictext0 "Nautafin"

Let op: Gewoon alleen de handler oproepen. Ook de komma weglaten.

Trouwens het tekstvlak kun je achteraf nog verplaatsen met het locate commando.
De kleur van de tekst, grootte enz, kun je allemaal achteraf nog wijzigen.
Windows is veelzijdig en LB gebruikt alle interne code (API) van Windows.

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

Re: Het juiste venster/de goede handler

Berichtdoor glpape » zo dec 23, 2012 6:03 am

Gesp hallo,

Boeken:

Zelf heb ik ooit "Beginning Programming for Dummies" doorgewerkt. Erg langdradig, maar het was in elk geval een begin: als je eenmaal een begin hebt wordt het veel makkelijker om verder te leren. Ik had een oude editie gekocht via Internet, die zijn helemaal op Liberty gebaseerd; vanaf de 4de druk is dat niet meer zo.

Beste is vermoed ik "Beginning Programming with Liberty Basic" van Carl Gundel himself, maar zelf ken ik het boek niet.
http://libertybasic.conforums.com/index ... 1260074077 .

Heel mooi, nogal uitgebreid, is Alyce Watson's "Liberty Basic 4 Companion Guide". Volgens mij: moet je kopen. Alyce noemt haar website een restaurant, dus
google naar alycesrestaurant.com. Het is een e-book.

En dan nog, geen boek, maar nu nog dit : bel of e-mail Gordon Rahman. Hij is binnen de BASIC groep van de Hobby Computer Club de man voor Liberty Basic. Als je in de buurt woont: een keer elke maand komt Gordon, zwaar beladen met zijn beamer en een grote tas vol documentatie naar Amstelveen en demonstreert daar Liberty Basic code. Leerzaam, maar er gaat ook veel stimulans van uit als je meedoet in een groep. Het niveau is gemiddeld, met jouw Nautafin venster kun je het makkelijk bijhouden.
Ooit had Gordon ook Liberty Basic licenties met korting, weet niet of dat nog zo is.

Je Nautafin venster oogt mooi, maar : heb je al text ingetypt in de textbox ?

Vr groet,

George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

Re: Het juiste venster/de goede handler

Berichtdoor Gesp » zo dec 23, 2012 9:17 pm

Hallo George,

Ja ik heb wel al geprobeerd tekst in te typen en daar wat zinnigs mee te doen, maar dat gaat helemaal mis. Ik heb duidelijk nog geen flauwe notie van de juiste syntax binnen de window-structuur. Ik ga dus op zoek naar een boek.
Dat "restaurant" van Alice heb ik al overwogen, maar het stuit me een beetje tegen de borst om allerlei gegevens (naam, adres, telefoonnummer) te moeten verstrekken voor een eenvoudige online-aankoop waar ze geen enkel risico op niet-betalen mee lopen. Ik ben een beetje dwarsig in die dingen :D, maar misschien zal ik wel moeten.
Ik denk dat ik ook nog even op Marktplaats naar die Dummy ga zoeken, en de lessen van Gordon zijn ook zeker het overwegen waard.

Ik moet alles nog maar eens goed op een rijtje zetten!

Groeten,
Gesp
Gesp
 
Berichten: 6
Geregistreerd: vr dec 21, 2012 1:26 pm

Re: Het juiste venster/de goede handler

Berichtdoor Gesp » zo dec 23, 2012 10:42 pm

Onderstaand mijn "topprestatie" tot op dit moment.
T.z.t. moet een gebruiker natuurlijk de eerste keer zijn wachtwoord zelf kiezen, maar eerst moet ik de syntax etc. van de windows onder de knie zien te krijgen voor ik verder kan

nomainwin
UpperLeftX = int((DisplayWidth- 376)/2)
UpperLeftY = int((DisplayHeight- 260)/2)
BackgroundColor$ = "blue"
ForegroundColor$ = "black"
TextboxColor$ = "white"
WindowWidth = 376
WindowHeight = 260

statictext #venster.statictext0, "Nautafin", 125, 5, 130, 40
statictext #venster.statictext00, "versie 6.01", 165, 48, 60, 20
statictext #venster.statictext1, "Naam:", 22, 86, 40, 20
statictext #venster.statictext2, "Wachtwoord:", 22, 116, 64, 20
textbox #venster.textbox1, 102, 76, 248, 25
textbox #venster.textbox2, 102, 106, 248, 25
button #venster.button, "OK", [knop], UL, 290, 170, 58, 25

open "Nautafin" for window as #venster
#venster "trapclose [knop]" ' trapclose

#venster.statictext0 "!font edwardian_script_ITC 30 bold" ' font
wait

[knop]
print #venster.textbox1, "!contents? naam$"
print #venster.textbox2, "!contents? ww$"

[controle]
if naam$ = "Pietje" and ww$= "Puk" then [notice]
notice "Dit is een foute ingave. Verbeter s.v.p."
print #venster.textbox1, ""
print #venster.textbox2, ""
wait
goto [knop]


[einde]
close #venster
End

[notice]
notice "OK. Ga verder."
goto [einde]
Gesp
 
Berichten: 6
Geregistreerd: vr dec 21, 2012 1:26 pm

Re: Het juiste venster/de goede handler

Berichtdoor glpape » ma dec 24, 2012 3:36 am

Gesp hallo,

Een mooie stap voorwaarts is dat je nu niet langer witte letters hebt (ForegroundColor$) in een witte textbox !

Bedenk wat je wilt; hou het simpel.
Zorg eerst dat je programma werkt en ga dan pas friemelen met details van de opmaak : lettertypes, kleuren (dank aan Janet Terra).

Een paar punten :

ForegroundColor$ = "black"

Dit is de default, kun je weglaten.

#venster "trapclose [knop]"

Het branch label moet verwijzen naar de code die het programma afsluit, hier dus [einde].

print #venster.textbox1, ""
print #venster.textbox2, ""
wait
goto [knop]

Bij <<wait>> wacht het programma; <<goto [knop]>> er achter aan doet dus niets.

Het Dummies boek, de 2de druk, heb ik ooit gratis (illegaal?) van internet kunnen downloaden.
Maar vraag maar eens aan Gordon of je niet heel veel beter af bent met het boek van Carl Gundel, 200 bladzijden, van de man die Liberty Basic heeft gemaakt, geschreven voor beginners. Gordon heeft het boek zelf, hij kan er wel wat over zeggen.

Vr groet,

George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

Re: Het juiste venster/de goede handler

Berichtdoor Gordon » di dec 25, 2012 10:08 pm

Hallo Gesp,

George vergat nog te vermelden dat ook na jouw notice statement geen goto, maar
gewoon weer met wait mag vervolgen. LB betekent "event driven" programmeren.
Telkens als je op button "knop" drukt ontstaat er een event. Bij wait staat
de computer gewoon stil.

Ik heb me nog nooit verdiept in wachtwoord programma's.

Code: Selecteer alles
nomainwin

nomainwin

stylebits #main.txt, _ES_PASSWORD, _ES_MULTILINE, 0, 0
textbox #main.txt, 10, 10, 100, 30
BUTTON  #main.bt, "OK" , [ok],UL , 40, 50,  30, 20
open "Password Box" for window as #main
#main "trapclose [quit]"
wait

[ok]
PRINT #main.txt, "!contents? varname$"
' ----- hier de invoer bewerken en controleren
wait

[quit] close #main : end


[notice]
notice "OK. Ga verder."
wait



Let op het stylebits statement. Lees er alles over in de helpfile. Het wachtwoord overschrijf teken
kan ook gewijzigd worden. Ik ben het even kwijt hoe dat ging.
Ik zou in een wachtwoord listing natuurlijk nooit een wachtwoord (ook niet ter controle)
zichtbaar plaatsen. Ik zou de invoer gewoon in een string variabele laten
plaatsen en die invoer dan coderen (hashen) en dan met een geheime
codering uit een ander bestand vergelijken.
Toegegeven, als je een .exe bestand ervan maakt dan kunt ook uit
de tkn file het wachtwoord niet destilleren.

Bezoek ook http://libertybasic.conforums.com/index.cgi
en natuurlijk ook http://lbpe.wikispaces.com/

Succes.

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

Re: Het juiste venster/de goede handler

Berichtdoor Gordon » di dec 25, 2012 11:38 pm

ok, even diep ademhalen.
We moeten als beginner nu reeds even Windows bestuderen.
Om het teken uit de password stylebits te wijzigen, moeten we
een call naar de dll user32.dll van windows maken.
    open "user32.dll" for dll #user32
is echter niet nodig. User32.dll wordt standaard door LB geopend
en blijft standaard open.
Dus gewoon een calldll maken naar user32 en de functie SendmessageA aanroepen.
Nu vooral de goede Windows parameters (variabelen) ingeven.
_EM_SETPASSWORDCHAR
HWND(#main.txt)
ASC("*")


Code: Selecteer alles
'nomainwin

stylebits #main.txt, _ES_PASSWORD, _ES_MULTILINE, 0, 0
textbox #main.txt, 10, 10, 100, 30
BUTTON  #main.bt, "OK" , [ok],UL , 40, 50,  30, 20

open "Password Box" for window as #main
#main "trapclose [quit]"

h = hwnd(#main.txt)
u = _EM_SETPASSWORDCHAR
c = asc("*")
print u, c, r

calldll #user32, "SendMessageA",_
h as ulong,_     'de handle van de textbox
u as ulong,_     'set pwd parameter
c as ulong,_     'teken
l as ulong,_     '
r as long        'return waarde 1=true 0 = false denk ik

#main.txt "setfocus"
print r          'return waarde 1=true 0 = false denk ik

wait

[ok]
PRINT #main.txt, "!contents? varname$"
' ----- hier de invoer bewerken en controleren
wait

[quit] close #main : end


[notice]
notice "OK. Ga verder."
wait



Gordon
p.s. Ik durf een beginner niet naar de MSDN site van Microsoft te verwijzen.
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Re: Het juiste venster/de goede handler

Berichtdoor Gesp » wo jan 09, 2013 11:03 pm

Hallo Gordon,

Dank voor je uitvoerige reactie.
Ik heb net een nieuwe computer "gekregen" (gebouwd door een deskundig vriendje), maar het inrichten daarvan blijkt meer tijd te kosten dan voorzien. LibertyBasic is dus tijdelijk even naar de achtergrond verdwenen, ook al omdat delen van de broncode van m'n oude MS-Basic programma niet meer toegankelijk blijken. En dáár was het nou net allemaal om begonnen: dat programma vertalen naar LibertyBasic.

Ik zal dus voorlopig een tijdje wegblijven van dit forum :-(
Gesp
 
Berichten: 6
Geregistreerd: vr dec 21, 2012 1:26 pm


Keer terug naar Beginner

Wie is er online

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

cron