Gå til innhold

Visual Basic Roundup!


Anbefalte innlegg

Videoannonse
Annonse

Dette er riktignok laget in C#(Du trenger .NET Framework for å kjøre det), men jeg ville egentlig bare høre hva dere synes.

Det er et program til å tegne elektronikk med, mye som mangler enda.

 

En roterer objekter med roteringsverktøyet, tror at jeg skal sette det til midterste museknapp istedet

 

En kopler poler ved å dra høyere museknapp

 

En kan ikke slette objekter enda, fordi det er ganske mye å skrive for å få det til, som jeg ikke har giddi enda

flow.zip

Lenke til kommentar

:wow:

 

Er det AA jeg ser på ledningene?

 

La merke til et par feil, bla. at den horisontale scrollen i "gadgets" er i en annen farge helt til man trykker på den mens man har vertikal scroll.

 

Og så at objektenes posisjon ikke oppdateres før man trykker på den. (Etter man har flyttet på dem)

 

Edit: Antialaise. (Feil skrevet?)

Endret av Jonas
Lenke til kommentar

Stemmer, Anti-Alias, du kan skru det av i preferences vinduet (edit->Preferences)

 

Det jeg egentlig er mest fornøyd med er at rotering fungerer skikkelig, samt class IniFile, som fungerer som en collection, liker bedre ini filer framfor xml.

 

Egentlig så begynte jeg å lage programmet fordi jeg plutselig kom til å tenke på at en kan bruke modulus for å tegne grid... så først ar det bare en grid man kunne scrolle...

Lenke til kommentar

Etter å ha vært på demo-seminar på TG har jeg lurt litt. De bruker det tydilighvis veldig mye til å lage forskjellige bevegelser o.l.

 

Hva er Cos, Sin og Tan? Hva er så spesielt med disse funksjonene?

 

Etter hva jeg har forstått så gjør man om radianer til pixel. Cos til X, Sin til Y og Tan til Z. Er det riktig?

Lenke til kommentar

Nytt spørsmål, beklager dobbelpost..

 

Jeg skal ha litt fine effekter i bakgrunnen på et program. Dette krever en loop, og da blir det vannsjelig å gjøre noe FØR loopen er ferdig, altså mens loopen looper.

 

Går det ann å få til multitasking i VB, eller må jeg ty til en timer?

Lenke til kommentar
Hva er Cos, Sin og Tan? Hva er så spesielt med disse funksjonene?

Disse funksjonene avstammer fra matematikken og kalles for trigometriske funksjoner; de er ofte definert som forholdet mellom to sider i en rettvinklet trekant i henhold til en vinkel, eller som forholdet mellom punkter på enhetssirkelen. I VB bruker man dem ofte for å regne ut bevegelser i tre dimensjoner, eller for rotere objekter.

 

Går det ann å få til multitasking i VB, eller må jeg ty til en timer?

 

Multitasking i Visual Basic 6, som jeg formoder du sikter til, er svært vanskelig. Hovedproblemet er rett og slett at kompilatoren ikke er designet for slikt. Men det er selvsagt fullt mulig. Se bare på følgende side:

 

http://www.freevbcode.com/ShowCode.Asp?ID=1287

Lenke til kommentar
Tenker jeg bruker en timer :p

Det kan du like så greit, men vær oppmerksom på at Timer-teknikken ikke er multithreading. Du får ikke flere seperate tråder som kjører samstundes, men kun en tråd der en funksjon kalles til visse tider.

 

Det finnes dessuten en annen, muligens lettere, metode for å benytte flere tråder samtidig i VB. Du kan nemlig lage et ActiveX-prosjekt der du setter Threading Model til Apartment Model (eksempel bl. a. her) .

Lenke til kommentar

Det at det skal være multi-thread er egentlig ikke så viktig.

 

Poenget er at jeg ikke kan skrive kode som utføres samtidig som en loop. At timeren "fletter" innstruksjonene sammen med loopen gir meg ønsket effekt ;)

Lenke til kommentar

Funksjoner som kan være greie å ha med i en kalkulator:

- Cos, Sin, Tan

- Regning med binære tall

- Knapper man kan trykke på (Hvis man ikke vil bruke tastaturet)

- Èn tall-rute

- Flere av operatørene i VB, Xor, And, osv. (Istedenfor å bare ha med + / * -)

Lenke til kommentar

Da jeg først satte i gang tok det ikke så altfor lang tid å skrive/designe om kalkulatoren, faktisk mye kortere enn jeg hadde trodd.

 

Det er noen bittesmå småfeil med komma og +/- knappen som jeg skal se om jeg får fikset senere, men hovedproblemet ligger i at jeg ikke får til å koble f.eks <+>-knappen på tastaturet opp mot pluss-kommandoen, eller <ENTER>-tasten mot =-kommandoen.

 

Jeg er ikke sikker på om jeg skal bruke KeyPress eller KeyDown/KeyUp, og heller ikke hvordan jeg skal "koble" det sammen (ASCII, ANSI, #xxx, Asc(xxx), alt går i surr). :(

 

Har bare en gammel VB 3.0 bok her til å hjelpe meg (selv om den forøvrig funker flott til det meste untatt akkurat keyboard-funksjonene).

 

(Sin, Cos og Tan kan jeg ikke. Er det 1., 2. eller 3. klasse-pensum på VGS?)

(% gjør foreløpig ingenting)

Endret av endrebjorsvik89
Lenke til kommentar

(Sin, Cos og Tan kan jeg ikke. Er det 1., 2. eller 3. klasse-pensum på VGS?)

Vi har i hvert fall ikke hatt om dem enda, skjønt jeg går siste år i 10. klasse. Men jeg vet dog hva disse trigometriske funksjonene går ut på.

 

Hva problemet ditt angår, vil jeg anbefale å legge til følgende kode øverst i frmIndex:

 

Public bExit As Boolean

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

' Ymse tastetrykk
Const VK_NUMPAD0 = &H60
Const VK_NUMPAD_MULTIPLY = &H6A
Const VK_NUMPAD_PLUS = &H6B
Const VK_NUMPAD_MINUS = &H6D
Const VK_NUMPAD_DECIMAL = &H6E
Const VK_NUMPAD_DIVIDE = &H6F
Const VK_ENTER = &HD

 

Inkluder dernest denne koden inn nedenfor (husk at den tidligere Form_Load-hendelsen må fjernes):

 

Private Sub Form_Load()

   txtInput.SelStart = 0
   txtInput.SelLength = Len(txtInput.Text)
   
   ' Vis formen
   Show
   
   ' Sjekk tastetrykk
   KeyBoardLoop
   
End Sub

Public Sub KeyBoardLoop()

   Dim Control As Object, LastCharacter As String

   ' Gjennomgå alle tastetrykk og utfør den forutsette kommando dersom noen er nedtrykket
   Do Until bExit
   
       If GetAsyncKeyState(VK_NUMPAD_PLUS) = -32767 Then cmdPluss_Click
       If GetAsyncKeyState(VK_NUMPAD_MINUS) = -32767 Then cmdMinus_Click
       If GetAsyncKeyState(VK_NUMPAD_MULTIPLY) = -32767 Then cmdGange_Click
       If GetAsyncKeyState(VK_NUMPAD_DIVIDE) = -32767 Then cmdDele_Click
       If GetAsyncKeyState(VK_NUMPAD_DECIMAL) = -32767 Then cmdKomma_Click
       If GetAsyncKeyState(VK_ENTER) = -32767 Then cmdErLik_Click
       
       ' Gå gjennom alle objekter i formen og test for talltastene
       For Each Control In Me.Controls
           
           ' Fortsett kun dersom dette er en kommandoknapp
           If TypeOf Control Is CommandButton Then
           
               ' Hent den siste karakteren i navnet på denne kontrollen (er et tall på talltastene)
               LastCharacter = Right(Control.Name, 1)
               
               ' Navnet på tasten må også stemme
               If IsNumeric(LastCharacter) Then
               
                   ' Sjekk om tasten er nedtrykket
                   If GetAsyncKeyState(VK_NUMPAD0 + Val(LastCharacter)) = -32767 Then
           
                       ' Sett denne tasten til fokus
                       Control.SetFocus
                       
                       ' Trykk inn ENTER
                       SendKeys "{ENTER}"
                   
                   End If
           
               End If
           
           End If
           
       Next
       
       ' Vent i ti millisekunder
       Sleep 10
       
       ' Gir alle hendelser en sjangse
       DoEvents
   Loop
   

End Sub

Private Sub Form_Unload(Cancel As Integer)
   
   ' Dersom vi ikke gjør dette, vil ikke applikasjonen avsluttes riktig
   bExit = True

End Sub

Endret av aadnk
Lenke til kommentar

Fin kodesnutt. :) Det tok litt tid å sette seg inn i den, men jeg greide det på en måte. Hvis jeg bruker den slik den er funker ikke tallene over bokstavene (som jeg vet en haug av mine bekjente bruker). Jeg prøvde da å lese og mekke litt mer og kom frem til at denne faktisk fungerer :D :

 

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   
   Select Case KeyCode

       Case 46
           cmdClear_Click

   End Select
   
End Sub


Private Sub Form_KeyPress(KeyAscii As Integer)

   Select Case KeyAscii

       Case 13
           cmdErLik_Click
       Case 43
           cmdPluss_Click
       Case 45
           cmdMinus_Click
       Case 42
           cmdGange_Click
       Case 47
           cmdDele_Click
       Case 44
           cmdKomma_Click
       Case 9
           cmdPlussMinus_Click
       Case 27
           cmdClearAll_Click
       Case 48
           cmd0_Click
       Case 49
           cmd1_Click
       Case 50
           cmd2_Click
       Case 51
           cmd3_Click
       Case 52
           cmd4_Click
       Case 53
           cmd5_Click
       Case 54
           cmd6_Click
       Case 55
           cmd7_Click
       Case 56
           cmd8_Click
       Case 57
           cmd9_Click

   End Select

End Sub

 

Går det an å "komprimere" denne koden slik at den tar opp færre linjer? Hvis jeg skal utvide noe særlig kommer det til å bli litt for mange linjer med bare Select - Case.

 

Jeg har locked text-boksen, og slått av tab-stop på alle knappene + text-boksen. På den måten unngår jeg ulovlig/uheldig data å bli skrevet inn, samtidig som alle de lovlige knappene fungerer perfekt.

 

(Jeg går også i 10. klasse.)

Endret av endrebjorsvik89
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...