ARBIS2003kurs

ARBIS 2003 VISUAL BASIC KURS/Mac Ramsay

FÖRORD

Fö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 Appli­cations (VBA)

Ytterligare en komponent Activex som är förknippad med VB och Activex är ”färdiga” kompo­nenter 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 undervis­nings­program 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 programmering

Programmeringsarbetet 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 programmet

Nä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ångs­vä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,

  1. Vad skall hända när programmet startar? Dessa saker skriver vi in i FORM ”load”.

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.

  1. Programmering av de enskilda komponenterna. Vi börjar med SLUTA knappen. Klicka två gånger på den och skriv i funktionen cmdSluta_Click,

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 kommandon

Uppstä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” namn­givning 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 kom­po­nen­tens namn exempel ”txtKund”. Detta betyder att du har en textruta som heter txtKund. Nedan några exempel på komponenter och namn,

komponent  

exempel

typ

anmärkning

Cmd/ trycknapp

cmdSlut

sluta-knapp

Ingen punkt

För checkbox/chk

chkValuta    

valutakontroll

 

För textruta    /txt

TxtIn

Text in ryta

 

För bild/pic

picDjur

djurbild

 

För bild /img

imgHund

hundbild

 

Lista/ lst

lstKunder

kundlista

 

Combo box/cbo

cboNamn

namncombo

 

Etikett/ lbl

lblKunder

kundetikett

 

frm för form

frmMekanik

form

 

Fra för ram

fraInstallning

Ram för komponenter

Med eller utan text

Mnu för menu

mnuSluta

Menu uppe på sidan

 

Opt för option

optStor

 

 

Tmr för timer

tmrFlytta

 

 

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 kom­ponenter 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 namn

Om 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  FUNKTIONER

Funktionerna 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ång­er, 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!

De nedre bildramarna har jag lag på varandra, för att påminna att de bara är ”sparade” på formen. Dessa bilder skall ha egenskapen visible=false, men övre bilden imgHuvudb.visible= True

Form skall ha bakgrundsfärg vit, för att fjärilbilderna har samma färg. Dessutom skall form vara maximerad.

 

CmdSluta skall ha End och timern kan läggas var som helst, den syns inte när programmet körs.

 BOOLEAN kallas värden där du bara har två möjligheter rätt (YES) eller fel (NOT) som oftast ges i siffror 1 och 0.

 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å.

GRAFIK

Grafik 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 bildtittarprogram

Skillnaden mellan ”kaktus” (picture) och ”berg” (image) bilder är närmast den, att berg­bilden 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.

I förra programmet  hade vi bilden imgHuvudb som laddar in i sig bilderna Bfly1 och  Bfly2  med 0,5 s mellanrum och bilderna behöver inte sparas skilt för de finns redan i ”Form” som skilda bildramar.Vi lär oss meny, bildladdning, dir -list, fillist och bildformer. Gör formen enligt bilden nedan och namnge den klokt.

Här behövs DRIVE-list, DIR-list, FIL-list, ett pic-fönster och en etikett. Sluta funktionen sättes in i en menu som heter ”Börja”, men som bara har ”Töm rutan” och ”Sluta” som innehåll.

 

Här har vi till vänster en menyram och under en Dir box som visar prompten och roten. Iden är att söka fram en bild och sedan ladda in den i bildramen. Samtidigt kommer bildens rot in i etikett­­rutan (lblIn). 

I bildtittarprogrammet behöver du en meny med ”Börja”, ”Töm rutan”, och ”sluta”. Gör denna meny även så, att man klarar funktionerna utan mus, dvs med Ctrl + bokstav. 

Sedan behövs en ”Station -ram”, en ”Mapp -ram” samt en ”Fil –ram”. Lägst nere en etikett, som visar den bild som finns i bildramen ovanför. Sätt in komponenterna i en form, namnge dem och spara projektet.

 

Börja med menueditorn som finns i ”Tools” och du får bilden nedan. Tryck på ”Tools ”och välj Menu Editor, så öppnar sig en ruta som nedan. Skriv först ”Börja” i Caption och sedan i Name=mnuBorja. Shortcut dvs Ctrl + en bokstav lämnar du tom, denna högsta nivå öppnar man utan mus med ”Alt”.

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 Öppna ladda ner och spara

Hä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.

Fullständig kod finns i Gemensam mappen, men några saker,I kommandot frmSpara.Show har jag satt in open som öppnar och plockar in de sparade värdena,Open  ”L:\elevdokument\VB5kurs\spara\stycken.dat” ELLEROpen A:”stycken.dat” for Input as #1

Input #1, st ‘tar in värdet st

LblSt.Caption = st ’lägger värdet i lblSt

TxtIn.text=”” ’tömmer textrutan

MsgBox ”Inladdat =” & st ’meddelar

Close #1 ’viktigt att genast stänga

Tillägg Kill ”St” och minnet töms på st.

Efter detta öppnas en annan kanal #2 från vilken listans innehåll tas in (A:lista.dat)

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 program­stumpar.

5.2.2003 Mac Ramsay