Översikt över Visual Basic Om denna översikt Denna översikt ger en kort introduktion till de viktigaste delarna i programspråket Visual Basic 6.0. På alla ställen där det beskrivs hur man skriver kod gäller följande: - Exemplen visar hur koden ska indenteras - Ord som är inom klamrar ( < och > ) ska ersättas av programmeraren med ett lämpligt val tex namn på en variabel eller en datatyp. Ett program Ett program i Visual Basic består av ett antal rader. Varje rad kallas för sats (statement). Satserna kan vara Tilldelningar Villkorssatser Repetitionssatser Anrop till procedurer (subrutiner) I många av satserna behöver vi behållare för värden, dessa kallas variabler och är av en viss datatyp. I många satser finns också uttryck. Uttryck Uttryck kan vara aritmetiska eller logiska (inklusive jämförelseuttryck) men kan också bestå av ett anrop till en funktion. I ett uttryck ingår en eller flera operatorer. Aritmetiska och konkatineringsoperatorer har alla högre prioritet än jämförelseoperatorerna som i sin tur har högre prioritet än de logiska operatorerna. Operatorer som har samma prioritet beräknas från vänster till höger i uttrycket. Parenteser kan styra beräkningen (och göra den mer läsbar!) Jämförelseoperatorer (alla ligger på samma prioritetsnivå) = Lika med <> Skiljt ifrån < Mindre än <= Mindre än eller lika med > Större än >= Större än eller lika med Aritmetiska och konkatineringsoperatorer i prioritetsordning Namn Symbol Exempel Upphöjt till ^ 2^3 Unär negation - -5 Multiplikation och *, / 2*3, 5/2 division Heltalsdivision \ 5\2 Modulus Mod 5 Mod 2 Addition och +, 2+3, 4-5 subtraktion Sträng konkatenering & Hej & då! Logiska operatorer (i prioritetsordning) Not Negation, icke And Konjunktion, och Or Disjunktion, eller A Sant Falskt Not A Falskt Sant Sanningstabeller för de logiska operatorerna A B A And B A B A Or B Sant Sant Sant Sant Sant Sant Sant Falskt Falskt Sant Falskt Sant Falskt Sant Falskt Falskt Sant Sant Falskt Falskt Falskt Falskt Falskt Falskt
Variabler Deklaration Dim <variabelnamn> As <datatyp> Deklaration av statiska variabler Static <variabelnamn> As <datatyp> Deklaration av arrayer Dim <variabel> (0 to n) As <datatyp> här anges nedre och högre gräns för index Dim <variabel> (n) As <datatyp> Index 0 till n ger n+1 element Om man vill kunna ändra storleken på en array under körning kan man använda sig av ReDim. För att det ska fungera så måste det göras på ett av följande sätt: Först deklarera variabeln utan storlek Dim <variabel> () As <datatyp> Och sen omdimensionera den längre ned ReDim <variabel> (<given storlek eller variabel>) As <Datatyp> Ett annat alternativ är att först utnyttja en variabel (som man kanske fått via en parameter?), dvs inte ett siffervärde! Dim <variabel> (n) As <datatyp> Då kan man sen omdimensionera arrayen ReDim <variabel> (<given storlek eller variabel>) As <Datatyp> Om man stoppat in element innan man dimensionerar om så kan man få dem att stanna kvar i arrayen med hjälp av ordet Preserve ReDim Preserve <variabel> (<given storlek eller variabel>) As <Datatyp> Konstanter Deklaration av konstanter Const <constantnamn> = <värde> Datatyper Heltal - Byte heltal i området 0 till 255 (8 bitar) - Integer heltal i området -32768 till 32767 (16 bitar) - Long heltal i området -2147483648 till 2147483647 (32 bitar) Decimaltal (lagras med mantissa och exponent) - Single (32 bitar) - Double (64 bitar) - Currency (fast decimalttecken mellan pos 15 o 16 av 19 tecken) String, text skrivs inom och tex Hejsan svejsan, 2 Boolean, logiskt värde kan antingen vara True eller False Date representerar ett datum som ett heltal Variant en datatyp som kan lagra alla slags datatyper Man kan skapa egna datatyper också: Type <Typnamn> <ingående del1> As <datatyp1> <ingående del2> As <datatyp2>... End Type
Tilldelningar <variabelnamn> = <uttryck> Villkorssatser If-satsen Else Annars gör detta End If Else-delen kan uteslutas: End If Annars gör inget... Select case-satsen Select Case <Variabel> Case Else End Select Om else-delen består av en ny if-sats kan man skriva ihop den så här: Else Ev flera Else/ElseIf-satser End If Uttrycken kan vara - ett värde case 7 - ett intervall case 1 to 10 - en variabel case x - ett uttryck case x + 3*a - en jämförelse case Is > 7 - en disjunktion case a, A - kombinationer av ovanstående case 1, 3, 7 to 10, 13 Repetitionssatser For-loopen For <stegvar> = <start> To <slut> Gör detta varje varv Next <stegvar> Man stega med andra steg än 1 också genom att lägga på step i for-loopens start. Några exempel som visar hur det kan se ut: For i = 1 To 10 step 2 intsum = intsum + i Next i For i = 10 To 1 step -1 intsum = intsum + i Next i Do Loop Until-loopen Do Loop Until <villkor> While-loopen While <villkor> Wend
Procedurer/funktioner [Private Public] Sub <procedurenamn>(<argument>) End Sub [Private Public]Function <funktionsnamn>(<argument>)[as <datatype>] End Function Visual Basic skickar parametrar by reference som default o Om man ändrar en parameter inuti en procedur så förändras värdet på den aktuella parametern också o De aktuella parametrarna (argumenten) och de formella parametrarna delar samma minnesutrymme. o Det används om man vill returnera ett/flera värden från en procedur (eller flera värden från en funktion) Kan också skicka parametrar by value o Proceduren skapar en kopia av den aktuella parametern och ändrar inte värdet på originalet o Det är bra metodik att skicka parametrar by value om man inte tänker ändra dem. o Man talar om för Visual Basic att en parameter ska skickas by value genom att skriva ByVal framför parametern i deklarationen Filhantering Öppna filer - Open <filename> For Input Output Append As #<FilNr> o Open-anropet kopplar samman filnamnet och programmets unika nummer. o Filnamnet <filename> måste ha hela sökvägen App.Path ger sökväg till aktuell katalog o Öppna för läsning Input o Öppna för skrivning Output (tömmer en fil) o Öppna för skrivning Append (fyller på i slutet av filen) o <FilNr> är ett unikt tal som identifierar filen i programmet. Nytt unikt nummer fås av funktionen FreeFile EOF(nr) kollar om filen med nummer nr är slut Läsa från filer Line Input #<FilNr>, <stringvariabel> läser in en rad Input #<FilNr>, <var1>, <var2> läser in till variabler OBS! Kräver kommaseparerad fil! Skriva till filer Print #<FilNr>, <stringvariabel> skriver en rad (eller vad som lagras i strängen) Write #<FilNr>, <var1>, <var2> skriver till en kommaseparerad fil Stänga filer Stänger en fil med hjälp av rutinen Close Close #1 eller Close #FilNr Utskrifter Om man har en PictureBox i sitt formulär kan detta användas för utskrifter: - Orden Hej och då på var sin rad picout.print Hej picout.print då - Orden i varsin zon (som är 15 tecken långa) picout.print Hej, då - Orden med 4 blanka emellan picout.print Hej ; space(4); då - En tom rad picout.print
- Orden i en följd trots att Print-satserna är på olika rader picout.print Hej ; picout.print då Vill man visa ett kort meddelande till användaren kan man använda en MsgBox: MsgBox <texten man vill skriva ut> Strängfunktioner i VB - Len(str) längden på en sträng, - Left(str, antal) plockar ut antal tecken från vänster i str, - Right(str, antal) plockar ut antal tecken från höger i str, - Mid(str, start, antal) plockar ut antal tecken från positionen start i str, - strcmp(str1, str2, [JämfMetod]) o jämför två strängar, returnerar -1 om str1 är mindre än str2 o returnerar 0 om str1 är lika med str2 o returnerar 1 om str1 är större än str2 o JämfMetod talar om vilken metod som ska användas, default = binär jämförelse I en binär jämförelse är inte a och A lika varandra. Ange konstanten vbbinarycompare I en textuell jämförelse är de lika. Ange konstanten vbtextcompare - LTrim( Test ) ger Test - RTrim( Test ) ger Test - Trim( Test ) ger Test - InStr([Start], SträngAttSökaI, SökSträng,[JämfMetod]) Söka en delsträng eller tecken i en större sträng (om Jämfmetod se under strcmp) - UCase(str) omvandlar str till upper case, dvs enbart versaler - LCase(str) omvandlar str till upper case, dvs enbart gemener Matematiska funktioner i VB - Exp(x), e x - Log(x), den naturliga logaritmen (basen e) - Sqr(x), roten ur x - Rnd, 0 <= slumptal < 1 - Abs(x), absolutbeloppet av x - Sgn(x), returnerar 1 (x<0), 0 (x=0) eller 1 (x>0) - Fix(x), heltalsdelen närmast 0, Fix(-6.7) => -6 - Int(x), heltalsdelen neråt, Int(-6.7) => -7 - Atn(x), Cos(x), Sin(x), Tan(x) Undantagshantering Ibland vet man inte varför det gått fel. - Err en funktion som ger en felkod för felet (heltal) - Error en funktion som kan översätta felkoden till (engelsk) text Finns två val vad man ska göra efter ett fel uppkommit - avsluta rutinen (Exit Sub) - fortsätta exekveringen på raden efter det att felet uppkom (Resume Next)