ARBIS 2003 VISUAL BASIC KURS/Mac Ramsay FÖRORDFörr ansågs Visual Basic (VB) vara ett programmeringsspråk för "barn" som inte dög till någonting. Med VB5 har alla problem överkommits, t.ex. VB5 är objektorienterat, vilket förut ansågs vara det största problemet. VB programmering kan användas överallt, men minst i t.ex. hemelektronik, såsom i mobila telefoner mm, där C-språket är vanligast, för att det ligger nära sk maskinspråk. Microsoft har gjort VB till sitt makro och sitt programmeringsspråk i sina program såsom MS -Office, så programmet är känt och mycket utbrett. Dessa applikationer kallas Visual Basic Applications (VBA) Ytterligare en komponent Activex som är förknippad med VB och Activex är ”färdiga” komponenter för VB/VBA och det finns 10 000 tals gratis komponenter Nedan fördelar och nackdelar med VB5 såsom jag er dem. Fördelar är följande, - det är lätt och logiskt, - man gör snabbt fungerande program, - programmet rättar till fel automatiskt, eller meddelar om fel genast, - ofta kan de flesta definitioner glömmas, det finns färdiga ”utgångsvärden” (eng. default) - det finns mycket färdig kod och programvara att få t.ex (OCX, Activex kontroller), - använder windows komponenter direkt - direkt kontakt med Access, Excel och MS-program, - man behöver inte "börja" eller "sluta" tecken, Som enda nackdel ser jag det, att programmet behöver "hjälpfiler" närmast "vbrunx00"-filer på några megabit. Denna nackdel kommer fram i fall där man har ensamstående program som t.ex. i telefoner, tvättmaskiner mikrougnar mm. Dessa hjälpfiler å andra sidan gör att felsökning är lätt - man kan köra ett program utan att göra .exe -fil varje gång man provar det. En hemdator med många program har i de flesta fallen redan installerat hjälpfilerna, så problem uppstår inte med onödiga filer. Ett annat problem är ständigt nya versioner på VB, där nya komponenter kommer in och gamla versioner får nya utgångsvärden. Därför kan man inte gå ”bakåt” i versionerna. Från VB 6,0 måste man köpa hjälpfilerna separat. Visual Basic 5 (VB 5) programmet Programmet finns att få i flera versioner bl.a. learning, standard och professional. Den dyraste versionen kallas enterprice. Dessutom finns det en stor del tilläggsdelar att köpa. Den billigaste versionen är learning, (ofta samma som standard), som inte har alla utökade funktioner, men vilken går att använda bra för eget bruk och för undervisning. Utmärkande för programmet är, - det är ett 32 bit program och måste ha minst WIN 95 brukssystem, - det kommer med "set up" modul med vilken man kan göra distributionsfiler, - det kommer med inbyggd Access databasprogram. Med learning programmet kommer fyra Cd-rom av vilka ett är programmet, ett är undervisningsprogram och två är demon på "tilläggs" -program, som man kan köpa licens till och sedan med kod få ut ur disketten. Denna kurs Målsättningen med denna kurs är att eleven skall lära sig principerna för VB programmering och kunna göra enkla egna program. Huvudvikten fästs vid övningar som jag förberett. Detta för att tiden inte räcker till att börja med egna, eller med nya program, närmast pga felsökning. Största problemet med programmering är svårare felsökning, det kan ta dagar att hitta en del fel - som oftast t.ex kan vara en extra punkt eller att man i misstag placerat två fristående "element" innanför varandra. VB programmeringProgrammeringsarbetet består av tre delar av vilka den första är den viktigaste. Delarna är, a. Förberedelser som innefattar, - vad vill jag att programmet gör? - vilka komponenter skall ingå? - hu skall layout bli? - åt vem är programmet ämnat ? - skall programmet fungera på flera språk? - grafisk layout av själva programmet. Detta förarbete är viktigt, det sparar senare korrigeringar och problem. . VB utläggning av komponenterna visuellt som innebär, - att man öppnar ett projekt och sätter in de behövliga komponenterna, - att man namnger komponenterna logiskt, helst med ”polsk” namngivning, - man gör visuella korrigeringar och följer standardsystem. c. Själva programmeringen som innebär, - programmering av alla komponenter, - skapande av moduler, funktioner och komponenter, - felsökning och korrigering, - görandet av .exe -fil - testning och finjustering. Efter detta kan man göra ett program för distribution.
Förberedelser före själva programmeringen. Jag tar ett exempel där förberedelserna framkommer väl. Du har som uppgift att göra ett skolprogram, med vilket man kan öva sig på oregelbundna engelska verb. Först måste du ha verben ca 150 st i presens, imperfekt och perfekt. Dessutom bör du ha verben på svenska. En logisk första lösning är att göra en Access-databas med alla formerna, från vilken programmet plockar ut den behövda formen. När du valt en databas så kostar det mycket litet att lägga till språk t.ex. finska (en kolumn till). Dessutom lönar det sig att numrera verben (index är bra), och att lämna ett par tomma kolumner för framtida bruk. För att få programmet mer intressant så lönar det sig att bygga det så, att man kan läsa den i alfabetisk ordning och dessutom slumpmässigt. Numreringen av verben gör det lätt att välja ut en slumpmässig läsning. För att göra programmet ännu mer intressant så lönar det sig att dessutom göra en tävling t.ex. se hur många verb man slumpmässigt löser på 2 minuter. Andra objekt man kan tänka sig är t.ex. användarens namn, klass samt utskrivning av resultat och satser med de ifrågavarande verben. Man kan även göra något som visar fel och rätt svar, både med extra bild och med ljud. Utöver dessa "första" tankar kan man ha många andra ide´r. Det är bäst att börja med en grundide´ och sedan utöka den efter att första programmet är färdigt och utprovat. Nästa steg är att fundera ut lösningar på själva uppgiften med penna och papper. Starta VB programmetNär du startar programmet får du olika alternativ på vad du skall öppna. Det vanliga är att öppna ”Standard EXE” som är början till ett vanligt program utan några specialiteter. Du kan välja mellan ny, existerande eller nyligen behandlat program (se flikarna). Tryck på standard EXE (New) och arbetsbordet öppnar sig. FORM och arbetsbordet Denna är en ”ram” i vilken vi bygger programmet av olika komponenter, närmast från objektrutan. Varje objekt har en Properties = egenskaper ruta, med vilken man ställer in olika egenskaper t.ex. text, färg, ramar och numeriska värden. Med denna ruta ställer man in sk. ”defaults” dvs utgångsvärden. Ett viktigt värde är om objektet skall synas eller inte. De flesta värden har insatt ett utgångsgsvärde t.ex. komponentens namn. Komponenter man kan skriva i såsom textrutor heter utgångstexten TEXT, men CAPTION på komponenter man inte skriver i såsom t.ex. tryckknappar. Alla fönster och komponenter går att flyta på och deras storlek kan ställas in enligt önskemål. Börja med att spara ditt projekt. När du sparar så passa på vart filerna går och spara inte med utgångsnamn dvs. PROJEKT1 eller FORM1. Först sparas form som xxx.frm och sedan projekt som xxx.vbp. Använd kloka namn på båda, se polsk namngivning nedan. Se till att båda filerna sparas på samma ställe. Se till att båda filerna sparas i samma mapp/diskett. ÖVNING 1. Öva dig med att förstora/minska de olika fönstren och lägg till flera FORM fönster (från Projekt och Add Form). En metod som är vanlig i VB är att kopiera både text och programrader. Ett enkelt sätt är att ta ett färdigt program VB och sedan öppna en ny ruta, så att du har två VB program parallellt. Sedan kopierar du komponenter från ena programmet till det andra. Samma kan du göra på denna kurs, i mappen ”gemensam/elever/VB5kurs” finns alla exempel vi gör på kursen och dessutom många andra VB program, samt länkat till gratisprogram. Även kopiering inom ett program kan ske behändigt. Enda problemet jag ser i VB är de olika versionerna, uppgradering är enkelt, men problem kan uppstå med ”gamla” komponenter. Förut fanns det gratis komponenter t.ex. ”hypertext” som inte mera är gratis. Därför rådet ANVÄND STANDARD VB KOMPONENTER SÅ LÅNGT SOM MÖJLIGT. I menun uppe finns ”Project” i vilken alla projektuppgifter finns t.ex. AddForm, AddModule etc. Här finns även ”RemoveForm” och ”Add File” som är viktiga. Lägst nere finns ProjectProperties, som visar projektets egenskaper. Här kan du namnge versioner mm, men viktigast är ”Startup Object”. Här kan du bestämma var programmet börjar. Om du t.ex. bygger upp ett projekt med t.ex. 5 st Form så kan det vara bra att börja test av programmet i den form du håller på att bygga upp – det kan ta lång tid att köra programmet ”normalt” från början varje gång du vill se vad som fungerar. ÖVNING 2 Gör ett program med tre Labels (etikettrutor), tre textrutor samt med tre tryckknappar i Form 1. Se bilden nedan. Formen har punkter för att man lättare skall kunna fästa objekt. Dessa syns inte i .exe programmet.
Plocka in de olika komponenterna från komponent rutan och drag dem på FORM1 med musen. Kopiera dem genom att aktivera komponenten och gå till ”Edit” copy och paste. Märk att skriva ”NO” när datorn frågar om du vill ha ”array”, d.v.s indexerade komponenter. Den kopierade komponenten kommer in i den komponent som är aktiverad. Se till att form är aktiverad när du trycker på ”Paste”. Skriv komponenternas namn rätt ”txtUpp” och text egenskap = ”UPPE”. Du kan få komponenterna i linje genom att aktivera dem med att hålla ”shift” nere och sedan trycka på komponenten med musknappen så att flera komponenter aktiveras samtidigt. Håll shift nere och klicka i tur och ordning på etiketterna (3st) och textrutorna ( 3st). Gå sedan till egenskap ”Left” och sätt in t.ex. 7000. Nu har alla aktiverade komponenter värdet left=7000. Klicka sedan på Label1 komponenten och F4 (Med F4 får du egenskaper fram) och ställ in färger, ramar och skriv in text i egenskap som på engelska heter ”CAPTION”, detta för att man inte skall blanda med textrutans ”TEXT”. Etikettens text kan man inte ändra på annat än genom programmering, medan man kan skriva in i en textruta. På samma sätt ställer du in egenskaperna för tryckknapparna. Deras text kan vara TRYCK 1 och TRYCK 2. Ställ in font och deras storlek t.ex New Times Roman är en bra font och storlek 12,14 bra. Arial narrow är bra, när det behövs mera text, t.ex i trycknapp. Lägg till en extra knapp ”Sluta”. Själva FORM1 egenskapen nere ”window” state kan ställas in på tre olika sätt ”0-normal” dvs formen har samma storlek i programmet som du gjort, eller minimerad eller hela monitorn dvs maximerad. Maximerad används oftast. Skriv i Form egenskap ”CAPTION”= Mitt första program” och texten kommer upp i den blå balken. Spara programmet och skriv namn för form frmForsta och i stället för Projekt1 skriv ”proForsta” Var noga med att se vart programmet går och att Form och projekt går i samma mapp! OBS! Om du sparar projektet med ”Save as” så räcker det inte att bara spara Projekt, utan du måste sedan även spara form skilt. Efter detta sker själva programmeringen Programmering är att skriva in kommandon i de olika komponenterna. Dessutom kan du skriva egna kommandon i GENERAL delen av programmen. Din egen logik bestämmer i vilka komponenter du vill ha programmering. Principen är t.ex. följande,
Varje komponent har en funktion enligt följande, Private Sub Form_Load() End Sub Private betyder att funktionen är ”privat”, den gäller bara här. Motsatsen är ”Public”, som gäller för hela projektet. och används i stora program med många funktioner. Sub betyder underfunktion och sedan kommer var funktionen verkar, här vid Form load (annat exempel t.ex. Command1_Click). Den sista parentesen är normalt tom men om man vill att funktionen skall hämta ett värde, så kan man skriva in det t.ex. (Dim nummer as Integer). Värdet nummer hämtas för vidare behandling och är heltal = Integer. Uppe till höger kan du klicka Load och se hur många andra möjligheter till programmering det finns. I detta första program vill vi ladda in text i textrutor och etiketter. Vi skriver, Private Sub Form_Load() txtUppe.text = ”Skriv här ett namn” txtMellan.text = ”Skriv här ett nummer” txtNedre.text = ”Skriv lösenordet” lbl.Uppe.Caption = ”NAMN” lbl.Mellan.Caption =” NUMMER” lbl.Nere.Caption = “Lösenord” End Sub När programmet laddas så kommer texterna in på sina platser.
Private Sub Form_Load() End (eller Unload Me) End Sub Med End har du programmerat SLUTA knappen så att programmet tar slut. Unload Me används i stora program som tar mycket minne. Starta programmet med ”Run”-knappen eller tryck på F5. Kontrollera att allt det du gjort fungerar. C: Knappen TRYCK1(cmdUppe) kan vi på samma sätt programmera så att textrutan txtUppe töms t.ex., txtUppe.text = ”” D. Knappen TRYCK2 (cmdMitten) kan vi programmera så att både knappen och textrutan försvinner ex, cmdMitten.visible=False txtMellan.visible= False Knappen TRYCK3 (cmdNere) kan vi programmera så att texten i textrutan txtUppe blir ”Du kom in” ifall lösenordet är Gustav. Detta gör vi med en IF funktion (OM funktion) ex., If txtNere.text = ”Gustav” Then txtUppe.text = ”Du kom in” Else End If Om du inte vill att bokstäverna skall synas i textrutan nere, så gå till txtNere egenskaper och ”PasswordChar” och skriv in t.ex. *, så blir alla bokstäver *. Kör programmet och pröva att ändra på texter. Om komponenter, egenskaper och kommandonUppställningen är, Objekt.komponent.egenskap = värde EXEMPEL: FORM1.TEXT1.TEXT=”Mac är King” Objekt (här Form1) behövs inte om du är i samma FORM så normalt är Text1.text = ”Mac är King” Text1 är textrutan text, text är egenskapen text och texten inne i rutan är ”Mac är King”, inom citationstecken. Om jag vill ha Textrutan1s text i Label1 skriver jag, LABEL1.CAPTION = TEXT1.TEXT Jag kan dela upp programmet t.ex., A = TEXT1.TEXT LABEL1.CAPTION = A ‘A är funktion och därför inga citationstecken. Fundera när det skall vara txtForsta.Text = A eller A= txtForsta.Text, det är stor skillnad. I det första fallet lägger du in funktionen A i textrutan, i det andra fallet är A funktionen lika med den text som finns i rutan txtForsta. NAMNGIVNING ÄR VIKTIGT I det långa loppet lönar det sig att ha bra namngivning t.ex. Först tre små bokstäver för objektet och sedan logiskt namn ex. ”txtInmatning”. Inom programmering bör man ha en logisk och bra namngivning och den bästa är sk. ”polsk” namngivning med vissa regler. VB har ju färdiga namn för alla komponenter t.ex. Form1 för första formen och sedan Form2, Form3 osv. Eller Label1, Label2, Label3. Denna namngivning är inte tillräckligt logisk och dessutom finns faran att du i misstag sparar två projekt eller form på varandra om båda heter samma exempel Projekt1. Därför är sk. ”polsk” namngivning att föredra. Denna bygger på principen att du först har tre små bokstäver, som säger vilken komponent det gäller och sedan (utan punkt) med stor bokstav komponentens namn exempel ”txtKund”. Detta betyder att du har en textruta som heter txtKund. Nedan några exempel på komponenter och namn,
Så gott som alla programmerare använder detta system, så lär dig det från början. Själv har jag gjort ett undantag i stora program, jag låter datorns utgångsvärde t.ex. Label1, Text1 osv bli kvar för komponenter som inte ändras under hela programmet. Om jag har en etikett med t.ex. texten ”Programmet gjort av Mac”, så får den heta Label1, för denna text ändras inte i något skede. Märk att Label1 och label11 och Label kan läsas fel, l och 1 stör varandra. Komponenternas namn kan väl vara på svenska men använd inte å,ä eller ö. Undvik dessutom specialtecken och vissa kommandoord t.ex. ”Print” i namnen. Termer och namnOm du börjar med att skriva ”Option Explicit” högst uppe på programmeringslistan, i ”General”-delen, så måste du deklarera varje variabel (såsom i Pascal). Dollartecknet ($) betyder ”string” eller ”bokstavsrad”, märk skillnaden ”Mac” och ”Mac$”.’ Med ”Dim” deklarerar man i en procedur en variabel t.ex. ”Dim mac”. Denna variabel är lokal och har en begränsad livstid, ifall du inte deklarerat den som ”Static”. Dim betyder lokal. Du använder ”Static” för lokala variabler med permanent livstid. Du skall aldrig deklarera en procedur till static, det ändrar betydelsen på dim och programmet fungerar ej rätt. Du använder ”Private” för variablar inom en och samma modul. Avvänd ”Public” för variablar som skall synas i hela programmet. Exempel Dim c,f,h,i As Long (här är bara i long) eller Dim c As Long, h,i Dim c As Integer, i as Integer, h As Long Dim mark As currency Du kan göra dig själv regler för vad som är variablar och vad som är konstanter, t.ex. clrTittel är en variabel och clrRöd en konstant (ofta ett nunner). OM FUNKTIONERFunktionerna förenar programmet till en helhet (projekt). Funktionerna är i VB ”sub”-program och dessa gör det enklare att läsa programmet och dessutom kan man använda funtionerna många gånger, vilket gör programmet enklare. Funktioner som inte kan/går att sätta in i objekt kan man sätta in som ”general” med egna namn t.ex. en ”print”-funktion, som skriver ut. Projektet blir sålunda en lång rad med funktioner som programmet går igenom i en viss ordning. Vid behov kan man kalla behövliga funktioner såsom t.ex. ”print” om man vill skriva ut något. I funktionens början finns en parentes, som oftast är tom, därför att funktionen inte tar in några speciellt bestämda argument, oftast för att funktionen redan har ”utgångsvärden”. Argument är data t.ex. heltal, som du flyttar från programmet till funktionen. Argumenten gör att samma funktion kan fungera på olika sätt vid behov. Du kan då utnyttja samma funktion på olika sätt. Som exempel en ”print”-funktion, där du kan sätta in argument t.ex. (Dim n as Integer). Med argumentet n kan du bestämma hur många kopior som skall tryckas ut. VB bygger på Windows och du kan lätt hitta färdiga funktioner både i Windows och i Internet, vilka du kan kopiera gratis som exempel felsökare (errorhandler). ÖVNING 3 Vi gör en fjäril som flyger Programmet består av tre image bildramar. Två av bilderna är hjälpbilder som är gömda (visible= False). Av dessa bilder är en med vingarna öppna och den andra med vingarna slutna. Programmet behöver en Timer, som räknar tiden mellan vingslagen. Inställningar som behövs för egenskaper är följande, A. I FORM Bakgrund vit ”BackColor=White” ”Caption=Fjäriln vingad” ”WindowState= 2-Maximized” B. TIMER ”Interval=500”, som är 0,5 sekunder Sök i egenskap ”Picture” bilderna (BFLY1 Och BFLY2) från nätet, eller diskett. För detta program behöver vi tre stycken Image rutor, en timer samt en ”Sluta” knapp. Synliga är bara imgHuvudb, de två andra imgOpen och imgClosed är sådana som används i stället för filer. På detta sätt glömmer vi inte bort filerna, när vi gör det slutgiltiga programmet. Vi kan börja med Timern, vars egenskaper skall vara ”Enabled=True” och ”Interval=500”. Detta betyder 500/1000 dels sekunder eller ½ s. Själva programmet lägga in i timern. (Logiken, att hela programmet går i timern tycker jag är ologiskt!
Programmet är följande, (se nedan) Först en deklaration Static som ger variabeln PickBmp värdet 0 eller 1 och utan denna funggerar programmet inte. Efter detta flyttas bilden 50 punkter till höger och 25 punkter ner (Y-koordinaterna växer nedåt). Här räcker kommatecken för y-värdet.. Sedan kommer en if sats, om bilden är 1 (YES) eller 0 (NO) så byts bilden. I slutet ändras bilden till 0. Jag har lagt till print raderna för att kontrollera att programmet fungerar rätt. Med F8 kan du köra programmet en rad i gången. Ändra på nummervärdena och se vad som händer. Här byts bilderna imgOpen och imgClosed efter 0,5s och sista raden ändrar PickBmp värdet mellan 0 och 1, fastän det verkar som om värdet alltid skulle ändras till 0 – NOT betyder motsatsen. I VB5 finns ett liknande mer invecklat övningsprogram VCR, som det lönar sig att titta på. GRAFIKGrafik i Windows har med pixels dvs punkter att göra. De vanligaste sätten är att använda PICTURE eller IMAGE komponenter (rutor) att visa bilder i. Dessa har vissa skillnader i sina egenskaper av vilka den viktigaste är att man i PICTURE kan rita grafik med ”penna” vilket inte fungerar med IMAGE. Image kan å andra sidan fås osynlig, så du kan göra osynliga ”knappar” med den. Det finns ett hundratal olika bildformat, men VB godkänner bara direkt bmp, wmf, ico och gif filer. Andra format måste du kringgå t.ex. genom att t.ex. utnyttja ”clip boarden”. Bildkomponenterna har många egenskaper av vilka ”redraw true” är viktig om du byter/ändrar innehållet. Egenskapen ”Picture” ställer in den bild du vill ha som utgångsbild. Bilden blir inne i komponenten så dess filnamn syns inte i programmet. Detta kan du utnyttja om du inte vill att dina bilder skall kopieras. Om du laddat in en bild i en Picture eller Form, så kan du inte tömma den, utan du måste ladda in en tom bild, exempel Form.Picture= LoadPicture(””). I FORM kan man på samma sätt ladda in en bakgrundsbild t.ex. Form1.Picture= LoadPicture(”c:\minabilder\hund.gif”). Bildens filnamn måste ha slutändelsen, här .gif. TIPS! Om du laddar bilder från filen C:\minabilder så måste bilderna finnas i denna fil när du distribuerar ut det färdiga programmet. Detta är sällan möjligt, så det finns två sätt att kringgå detta. Första sättet är att ladda in bilderna i bildramar Picture1, Picture2... osv. Detta är enkelt om du har få bilder t.ex. 10-20 st. På detta sätt är bilderna ”gömda” i ditt program och ingen kan kopiera dem enkelt åt sig själv. Det andra sättet är att ändra sökvägen för bilderna. Med sök/ersätt tar du bildernas sökväg t.ex. ”C:\minabilder” och ersätter den med en tom sökväg ””, först då, när du gör ditt distributionsprogram. Kom ihåg att kontrollera att installationen fungerar. Rörliga bilden gör man genom att med klocka ändra bilder efter varandra, detta liknar GIF-animations. Ett annat sätt är att röra på bildramen med t.ex. kommandot Picture1.left=Picture1.left + 100.Mängden här 100 är det bäst att pröva ut. För lågt värde gör att datorn inte ”hinner” med. ÖVNING 4. Vi gör bildtittarprogramSkillnaden mellan ”kaktus” (picture) och ”berg” (image) bilder är närmast den, att bergbilden har ramar, vilket gör den lätt att användas som t.ex. ”knapp”, man ser på ramen när bilden är aktiv. Med denna kan man göra ikoner som sedan kan vara knappar. I ”picture” kan man rita kurvor och linjer med egna formler, mera om detta senare. Gamla Visual Basic ville ha .bmp bilder, men VB 5 tar dessutom emot .wmf och .gif bilder. Själv använder jag helst .gif bilder, de är lätta att överföra till Internet. Om man har laddat in bilder i bildramar så behöver man inte spara bilderna skilt, men om man byter bild under processen, så försvinner den första bilden.
Tryck
sedan på Next och på pilen som visar åt höger, du får en ny rad med tre
punkter. Skriv Caption= ”Töm bildrutan”, och Name=mnuTom. Sätt sedan i
Shortcut=Ctrl +T. Tryck på Next och skriv ”Slut, mnuSlut, och Ctrl +S”
såsom i bilden nedan.Tryck
sedan på ok och du har en färdig meny. Gå till menyn tryck två ggr på
sluta och skriv in End.
detta sätter du in programmering för de olika komponenterna
Dubbelklicka
på ”station” och skriv in efter (Private Sub Drive_1Change()) koden, Dir1.Path
= Drive1.Drive (komponenten heter Dir1 och du ställer in den att visa
station1) Sedan
skriver du in I Private Sub_Dir1.Change, File1.Path=
Dir1.Path (Du
gör att filfönstret File1 visar mapparna i övre Dir1 fönstret). I
filfönstret skriver du efter Private Sub File1_Click(), Selected
file = File1.Path & ”\” & File1.filename (=första
raden) Image1.Picture
= LoadPicture(SelectedFile)
(=andra raden) I
första raden bestämmer du en funktion som heter SelectedFile och att den
skall vara den fil som finns i filfönstret och mappfönstret. Märk att
datorn inte automatiskt kan sätta in \, så det måste sättas in för hand
med och=& och tecknet \. I andra raden skall image1 rutan ladda in i sig
den valda filen. Sist
skriver du i mnuTom Image1.Picture
= LoadPicture() Om
man laddar in en tom bild dvs skriver () istället för filnamn så blir rutan
tom. OBS! För att programmet var kort och för att jag kopierade största delen av det, så gav jag inte polska namn åt komponenterna. Även i långa program, exempel databaser, lönar det sig att kopiera färdiga komponenter utan att ändra namn. Koden för hela programmet blir, Option
Explicit Private
Sub Dir1_Change() File1.Path
= Dir1.Path 'söker filerna End
Sub Private
Sub Drive1_Change() Dir1.Path
= Drive1.Drive ' söker roten End
Sub Sub
File1_DblClick() If
Right(File1.Path, 1) <> "\" Then Label1.Caption
= File1.Path & "\" & File1.FileName Else Label1.Caption
= FilePath & File1.FileName End
If Form1.Open.Picture
= LoadPicture(Label1.Caption) ‘laddar in
filen som finns i Label1 End
Sub Sub
mnuSluta_Click() End End Sub ÖVNING 5 Öppnaladda ner och sparaHär gör vi en lista med namn, som vi sparar i en fil, så att namnen finns kvar, när listan öppnas följande gång. Vi har en textbox och en listbox (en combobox skulle även ha varit ok), en etikett, som visar hur många namn vi har och dessutom tre knappar ”lägg till”, ”bort” och ”töm lista”. På en menu har vi sluta som även sparar namnlistan och antalet. Problemet är att få programmet att fungera första gången. Det man måste göra att man först skapar den datafil, som skall spara texten i listan och numret i etiketten. Filen får heta Sparad.dat och kan t.ex. skapas i dos läge. Programmet börjar med att ladda in texten och därför måste den finnas. Se i bilaga frmSpara exakt kod. Till höger har jag lagt en imagebild (som inte syns) och i den har jag programmerat ”End” när man klickar på den – en osynlig knapp.
Sparandet
sker på samma sätt och insatt i kommandot ”Sluta/Menyn”. Här öppnas
kanalen ”for Output As #1, och
skriva in med Write #1, st I lblSt
kan du få mängden av namn även med kommandot
”lblSt.caption=List1.Listcount”. Listcount är eget kommando. I
början kan man göra en hjälpfil (Lista) på följande sätt, Open
“Lista” for OutputAas #1 Write
#1, Kalle Close
#1 ÖVNING
6 Vi börjar med tidsbomb. Denna
funktion startar automatiskt när Formen laddas. Skriv i Sub
Form_Load() Const
StopDate = ”12-12-99” ’dvs en konstant det datum programmet stoppar. If
date > DateValue(StopDate) Then MsgBox
”Tiden har gått ut – köp nytt program!” End
’om
du vill sluta Else
End
If Om
datorns datum är över stopdate så kommer automatiskt ett meddelande
fram och programmet slutar automatiskt. Märk att Else och End If måste
skrivas fastän du inte har några andra optioner används. Meddelandet
kan visas på två olika sätt, 1.
Direkt med Msg = ”Tiden har gått ut” 2.
Med MsgBox av önskad form. Ex.
Msg= ”Tiden har gått ut” Title=
”Tidsbomb” MsgBox
(Msg,,Title) Märk
inget = tecken och två komma. Om
man sätter in mellan komma olika siffror får man olika boxar, för
t.ex. input eller ja/nej. T.ex.
3= Yes/No/Cancel; 4= Yes/No osv. Sedan
lösenordet. Du kan skriva som default i etiketten lblIn ”Skriv lösenordet”.
*(Ett annat sätt kunde ha varit att sätta texten efrer Else
lblIn= ”Skriv lösenordet!”) Sedan
väljer du inställningsvärdet åt txtIn (Tryck F4) och gå till
PasswordChar och skriv in det tecken som skall synas i stället för
bokstav t.ex. ”*”. Sedan
dubbelklickar du på txtIn rutan och skriver in koden in ”Private sub
txtIn_Click()”, If
txtIn.text = ”Mac22” Then lblIn.Caption
= ”Du kom in.” Show
frmIn ’
(ifall
du har en annan form som heter frmIN, så visas den) Else lblIn.Caption
= ”Fel ord pröva på nytt!” txtIn.text
= ”” txtIn.Setfocus
’kursorn
kommer hit End
If Det
du programmerat är det att om man skriver ”Mac22” (=rätt lösenord)
i txtIn så skriver datorn i rutan ”Du kom in!”, annars kommer i
lblIntexten ”Fel ord....” och texIn –rutan tömmes och den
får focus dvs kursorn. Du
måste välja var i txtIn programmet du sätter in koden, sätter du in
den i ”Private Sub txtIn_Change()” så utförs programmet
automatiskt om du skriver rätt ord, men inte om du skriver fel ord. Därför
är det bäst att sätta koden in i txtIn_Click(). Det finns flera andra
sätt att göra detta t.ex. utnyttja ”Lost Focus” -egenskapen. ÖVNING 7 DATA KONTROLL och verb program.Med
datakontroll kan man behandla information från olika databaser, utan
att man behöver skriva någon kod. Med VB5 kommer Access databas 2,0 (äldre
16 bit) och 7,0 (ny 32 bit) och för enkelhetens skull lönar det sig
att använda dessa. Access är inbyggd i VB5, se ”Add_Ins” och
”Visual Data Manager”. Om du är inkommen i Access och har
programmet kan du göra databasen med Access. När
databasen är färdig är det bara att i ”Properties” binda olika
element t.ex. textrutor till databasen via datakontrollen.
Datakontrollen har pilar för ”första, nästa, tillbaka och sista”,
så klickandet av pilarna leder till följande värde. Man början med
att fylla i datakontrollens värden ”DatabaseName och RecordSource”.
I egenskapen ”Connect” ställer du in andra databaser än Acess. Databasen
går att ställa in på flera sätt, t.ex. att bara du har tillgång
till den eller så kan den låsas, man kan inte ändra på värden. Om
du vill tillägga nytt värde med en knapp ”Lägg till” så blir
koden Data1.Recordset.AddNew. På samma sätt kan man spara databasen med kommandot
”Data1.Recordset.Uppdate” eller ta bort ett värde med
”Data1.Recordset.Delete” samt ”Data1.Recordset.MoveNext”
för att det inte skall uppstå ett tomt värde. Med
Data1.Recordset.MoveLast kommer du till slutet. Vid
sökandet av ett värde kan man använda sk SQL-förfrågan t.ex. Data1.DatabaseName=
”BIBLIO.MBD” Data1.RecordSource=
”Select *from Publishers where state = ’NY’” (OBS märk dubbla
’”) Data1.Refresh En
sök knapp kunde även se ut såhär; men se till att du är i BOF läge, Dim
sok As String prompt$ = "Skriv namnet rätt."
a =
InputBox(prompt$, "Sök presens verb")
'Print a
Data1.DatabaseName = "a:verbeng7.mdb" ‘här
koppling till databas
Data1.Refresh
Do While Data1.Recordset.EOF = False
If Text1.Text = a Then GoTo Slut
Else
Data1.Recordset.MoveNext
End If
Loop
Slut: När
de gäller databaser är det bäst att använda som ”mall” en av de
färdiga som finns på VB5 övningsskiva. Detta för att du skall få in
rätt errorhandlers och alla behövliga funktioner. VB5 vill att du
kopplar databasen via en ”databalk” dvs den det står ”engelska
verb” på. Denna har knappar för ”första, en bakåt, en framåt
och sista”. Denna kan göras osynlig ifall du inte vill att den syns. Databaserna
använder egna kommandon, som oftast innehåller order ”Recordset”
t.ex, DatVerb.Recordset.movenext
’betyder att man går till nästa data i
datVerd
Detta
program har många textrutor och etiketter, som är kopplade till en
Access databas verbeng7.mdb. Bilden nere är bara för nöjes skull och
den rör på sig. Huvudiden med programmet är att jag ovanpå etiketter
lagt en textruta. Om etikettens text är samma som textrutans, så
faller textrutan ner. På detta sätt kommer användaren inte åt att ändra
på verblistan (verben7.mdb). Uppe till vänster en ram med olika alternativ, som bestämmer hur många textrutor som är täckta. I menyn finns flera alternativ som visar olika språk finska/svenska och vad som visas. Dessutom finns möjlighet till tävling. Verifikation sker med OK knapp. En annan möjlighet skulle vara ”change” i textrutorna, men då uppkommer nya problem. En annan specialitet är att all text som skrivs in ändras till kapitel, så att programmet reagerar fast orden skrivs med små bokstäver. Se kod nedan, Private
Sub txtPresens2_LostFocus() txtPresens2.Text
= UCase(txtPresens2) ‘här ändras texten
till kapitel If
txtPresens2.Text
= lblPresens2.Caption Then ‘här
jämförs textrutans text med etikettens Picture1.Left
= 5350 For
n = 1 To 25 Step 0.03 txtPresens2.Top
= txtPresens2.Top + n ‘om samma så faller
textrutan ner Next
n txtPresens2.Text
= ""
‘textrutan tömms txtPresens2.Visible
= False ‘textrutan visas inte txtPresens2.Top
= 2640 ‘den flyttas till ursprunglig plats lblRatt.Caption
= lblRatt.Caption + 1 ‘räknaren lägger
till en rätt lblAlla.Caption
= lblAlla.Caption + 1 Else txtPresens2.Text
= "Fel" lblAlla.Caption
= lblAlla.Caption + 1 End
If End
Sub Filöppning
och sparandet Öppnandet
placeras i allmänhet i ”Form load” och vid öppnandet öppnar du en
”kanal” som du skall stänga före du öppnar nästa. Därför är
det bra att stänga genast efter öppnandet. Man kan öppna filer för
olika bruk, som text eller binärkod och för att bara skriva i eller både
för läsande och skrivande. Exempel på öppnande, Open
”TESTFIL” For Input As #1 ’detta
öppnar och sträng genast Close
#1 eller
i binärform, Open
”TESTFIL” For Binary Acess Write
As #1 ’detta
öppnar binär och endast skriv Close
#1 Eller
öppna binär bara för läsning här och andra processer kan inte läsa
filen, Open
”TESTFIL” For Binary Acess Read Lock Read
As #1 ’detta
öppnar binär och endast skriv Close
#1 När
man sparar sina ”element” kan det ske med en egen knapp ”Spara”
eller så sätter man koden först i ”Sluta” knappen. Ett
exempel på sparandet OPEN
Test$ For Output As 1 Write
#1, mintext Close
#1 Hittills
har de flesta värdena försvunnit när vi avslutat programmet, vi har
inte sparat något förutom databaserna som automatiskt sparar med ”Refresh”.
Filer kan öppnas på tre olika sätt, Random, Sequential och Binary. I
Random acess öpnar du en fil som innehåller en serie av uppgifter, med
samma fält (t.ex. databas). Se bild nedan,
På
bilden har du flera ”Records” med samma fält och en record är
definierad som ”Type” här alltså, Type
Arbetare
Eftern String * 10 ’fält1
Titel String * 4
’fält2
Alder String * 2
’ fält3 End
Type OBS!
Denna typ av fil kan undvikas om du använder Acess. Sequential
Access används närmast för textfiler och binär för binära data. I
sequential Access är principen den att man laddar in hela filen i t.ex.
en textruta, sedan editerar man texten och spara den. ÖVNING
8 Lissjaus kurva (Grafik) Här
ritas kurvan in i en bildram, som har räta linjer för skala –1 till
+1. Den röda linjen till vänster fungerar som indikator att programmet
är i gång. Om inmatningsvärdena är vissa så kan det se ut som om
bilden har låst sig, men röda ”pelaren” växer och visar att allt
är igång. Själva
ritandet av kurvan är programmerad i knappen ”Visa kurva” och är,
Private
Sub Command4_Click() Dim
see, d, alku, loppu As Integer 'mera
definitioner Label1.Move
Label1.Left, Label1.Top + 3000 n
= Val(Label11.Caption) ‘input värde 1 m
= Val(Label12.Caption) ‘ inputvärde2 txtLissa.Visible
= False Const
Pi = 3.14159265 ‘konstant 3,14 räcker
inte If
n > 12 Or m > 12 Then
‘om värdet över 12 så ritas kurvan med mera punkter d
= 0.1 Else:
d = 0.2 End
If alku
= Text1.Text 'början från text1 If
alku < 0 Or
alku > 360 Then 'om
värdet negativt eller över 360 grader Msg2
= "Måste vara 0-360" Title
= "Tönt" sy20
= InputBox(Msg2, Title, sy20) 'input box alku
= sy20 Text1.Text
= sy20 Else End
If loppu
= Text5.Text If
loppu < 0 Or loppu > 360 Then Msg2 = "Täytyy olla välillä 0-360" Title
= "Tönt2" sy10
= InputBox(Msg2, Title, sy10) loppu
= sy10 Text5.Text
= sy10 'visar slutpunkten i text5 rutan Else End
If Picture1.Visible
= True For
angle = alku To loppu Step
d ‘kurvor ritas med radianer och en förvandling
måste ske rad1
= m * angle * Pi / 180 rad2
= n * angle * Pi / 180 X
= 2000 * Sin(rad1) Y
= 1500 * Sin(rad2) Picture1.ForeColor
= &HFF& ‘kurvans normala färg =
grön Picture1.Line
(X + 2630, Y + 1890)-(X + 2630, Y + 1900) Picture1.Line
(X + 2640, Y + 1895)-(X + 2650, Y + 1900) '
drar två korta linjer (i X mönster) i stället för punkter ’
men märk liten skillnad på värdena tjockare linje '
värdena 2630, 1900 provat fram och beror på bildens storlek see
= 100 * angle / (loppu - alku) 'VMeter1.PartsComplete
= see 'lägger till på mätaren Next
angle End
Sub Tips
och trick + repetition 1. Input box såhär Forstanr
= InputBox$(Prompt) 2. Konstatner såhär Const Pi= 3.14159 eller Public Const a = 3.1 3. lblTid.Caption = ”Klockan är ” & Time & ”den” &
Date 4. If sats på en rad If nummer>=20 Then lblUt.Caption = ”Du vann!” 4a. If med flera möjligheter
If nummer =
20 Then
lbl.Ut= ”Du vann!”
Elseif nunner <10 Then
lblUt.Caption= ”Större!”
Else
lblUt.Caption= ”Fortsätt”
End If OM FEL a. Här ett logiskt fel
If
Age > 13 And Age < 20 Then Text2.Text
= "You're a teenager." Else Text2.Text
= "You're not a teenager." End
If b.
Syntaxfel Består
ofta av felstavade variabler och/eller egenskaper. VB
säger nästan alltid till, texten blir röd. c.
Fel vid körning av programmet. Dessa
kan uppstå av många orsaker felstavade namn på filer eller stationer,
eller på andra yttre orsaker t.ex. Datorminne eller på timer som
blivit på, eller division med 0. Att
öppna ett annat program i VB5 Med
kommandot Shell öppnar man
ett annat program i VB5 exempel öppna wordpad i ett program, Dim
hInstance,x hInstance
= Shell(c:\windows\tillbehör\wordpad.exe
C.\minfil.doc”,1) Kom
ihåg att sökvägen alltid blir rätt. Om den öppnade filen inte finns,
så går programmet ned i balken, som minimerad. GRID
CONTROL Grid
control är ett fönster som liknar Excel med rader och kolumner man kan
bestämma själv. Learning edition har begränsningar i detta. Principen
att aktivera en cell är, Form1.Grid1.Col
= 2 Form1.Grid1.Row=
2 Form1.Grid1.Text
= Mac Här
förflyttar du till kolumn2 och rad två och skriver in Mac Griderna
lämpar sig speciellt för output av databaser och det finns speciella
grid för detta. Skriva
ut Man
skriver på bildskärmen med kommandot print ex, print Text1.Text.
På printern printrar man med Printer.Print För att printern
genast skall skriva skall du tillägga Printer.EndDoc. Format Utskrivningaformat
måste ofta ställas in.exempel, Nummer
= Format(nummer,”00.00”) Funktionen
nummer får två helsiffror, två decimaler Felhantering Felhantering
behandlas ofta med en ”fälla” t.ex. On Error go to Errorhandler.
Ett enklare sätt är att skriva On Error Resume Next. Texten
skrivs överst på objektet. AddItem
ex. List1.AddItem ”Rolle”, 0 ’noll sätter namnet överst Man
kan ställa in listan så att den sorterar namnen. Med RemoveItem får
man bort ett namn ex. List1.RemoveItem 0 ’här noll = index =första
namnet bort Listan
kan tömmas med List1.Clear. Combo
Box Combo
box är en textruta med en knapp där man ser en lista om man trycker på
knappen. Det finns olika slag av comboboxar. Namn på listan laddas i
allmänhet med form load ex, Sub
Form_load() List1.addItem
= ”Kalle” List1.addItem
= ”Pelle” List1.addItem
= ”Olle” List1.addItem
= ”Åffe” End
Sub Slutord Använd mycket de färdiga exemplen som kommer med VB5. Öppna två ggr programmet och kopiera. Förhandsplanering och rätt namngivning är viktigt. Sök på Internet färdiga programstumpar. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5.2.2003
Mac Ramsay |