Gå til innhold

VB 6.0 og ass. nybegynner spørsmål


Anbefalte innlegg

Heisann!

 

Blir snart rød her... av sinne. Sinne for at jeg ikke forstår!

 

Kan noen forklare hvordan jeg skal gå fram når:

 

Vil bruke Mathworks strip (Matlab komponent) for å tegne opp en strip-graf. I hjelpen til denne står det bl.a.

DESCRIPTION

 

Used to append a Y value to the end of the desired data set.  In this case, the associated X value is optained from the VariableLastX and VariableDeltaX properties.   The index parameter corresponds to the desired VariableID.  This method is an excellent way to plot a variable whose X value is incrementing by a fixed value.  For instance, if you are counting the number of widgets going along an assembly line and taking a reading off each widget (your Y value), this would be the method to use.

 

SYNTAX

 

Visual Basic:

 

control.AddY(Index as integer, Y as double)

 

Copyright © 1998 Global Majic Software, Inc.

 

Jeg har følgende kode som kjører når jeg trykker på en knapp (stripcharten heter Strip1)

Private Sub btnDraw_Click()

Dim Index As Integer

Dim Y As Double

 

Index = 1

Y = 10

 

    Strip1.Variables = 1

    Strip1.VariableID = 1

    Strip1.VariableType = Analog

    Strip1.VariableDeltaX = 1

    Strip1.VariableTrackID = 1

    Strip1.VariableVisible = True

    Strip1.AddY(Index, Y)

       

End Sub

 

Det er "Strip1.AddY = (Index, Y)" som er innteresant her. Jeg får denne feilmeldinga:

Expected: =

 

Jeg modder linja til

    Strip1.AddY = (Index, Y)

men når jeg da trykker "enter" så markeres komma'et og feilmeldinga "Compile Error: Expected: )" kommer opp.. Alltså den vil ha parantes etter Index. Men dersom jeg setter parantes i steden for komma, så sier den at argument is not optional (såklart, for jeg må jo gi den en Y-verdi også)

 

Jeg fatter ikke, noen som vet hvordan den vil ha dette egentlig??????? ARG!

Takk for all hjelp!!!

Endret av Dargar
Lenke til kommentar
Videoannonse
Annonse

Takk Jonas, det fungerte det! Mye jeg har å lære ennå, heldigvis?!

 

Strip-chart: Har du sett sånne skrivere som plotter ut på et langt ark (tapet) som rører seg? f.eks seismografer, løgndetektorer etc. Det er en strip-chart.

 

I VB her så dreier det seg om en komponent som man kan gi forskjellige parametrer til og deretter gi den X og Y data slik at den grafer ut. Jeg skal bruke den til å grafe ut ett antall oppmålte strømmer og spenninger som jeg får inn digitalt via serie porten. Grafen kommer da til å vise hvordan disse varierer med tiden.

 

Skal se om jeg får det til å fungere, men nå skal jeg ta en bastu etter jobben og sove, klokka er jo nå 5 på morgenen, så jeg tror ikke jeg orker å være mer produktiv nå. :)

 

Takk igjen for at du fikk meg i gang!!

Lenke til kommentar

Kult att du kan så mye att du har laga ein sjøl!!

 

Eg er jo fremdeles fast på riktig nybegynner nivå (og selvlært dessuten, så jeg har store gapende hull i fundamentet når det gjelder VB)..

 

Har igjen ett liknende problem.

 

Fra hjelp-fila:

DESCRIPTION

 

Returns the maximum, minimum, average, and standard deviation values of all data values within the buffer for the variable currently selected by VariableID.

 

SYNTAX

 

Visual Basic:

 

[value =] control.VariableAvg

 

[value =] control.VariableMax

 

[value =] control.VariableMin

 

[value =] control.VariableStdDev

 

Copyright © 1998 Global Majic Software, Inc.

 

men når jeg har en variable Dummy som er av typen Double og skriver:

 

Dummy = Strip1.VariableMax

 

så får jeg igjen at argument ikke er optional (og teksten ".VariableMax" er markert i VB editoren. Samme resultat om jeg bar tar bort = tegnet (men det virker jo fullstendig ulogiskt å gjøre).

 

 

Som du ser så virker det som om det er noe fundamentalt her som jeg ikke forstår, siden jeg klarer å få til liknende feil hele tiden. Med din forrige hjelp så har jeg kommt ganske godt i gang egentlig, men kjører stadig fast på sånne "smådetaljer"....

 

Om du orker å dele med deg av din visdom?

 

[edit]

Det som jeg til slutt vil oppnå er jo å skrive ut verdien i en label, f.eks. ved å kjøre

lblGraphMax.Caption = Dummy eller noe slikt.

[/edit]

Endret av Dargar
Lenke til kommentar

Skal prøve, men burde ikke alle parametrer og slikt stå i hjelp-fila? Se mitt sitat over for det som stod om VariableMax i hjelp/dokumentasjonen.

 

 

Eh. Jaha.

 

Tusen takk. skal benytte meg mer av den featuren fra og med nå.

 

Det viste seg at den vil ha TrackID som inn-parameter, til tross for at dette ikke nevnes i dokumentasjonen. Takk takk!

Endret av Dargar
Lenke til kommentar

For å endre bakgrunnsfargen til alle scrollbar-ene i en form, må du legge følgende inn i en modul:

 

Option Explicit

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Declare Function GetScrollBarInfo Lib "user32" (ByVal hwnd As Long, ByVal idObject As Long, psbi As SCROLLBARINFO) As Long
Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Type RECT
   left As Long
   top As Long
   right As Long
   bottom As Long
End Type

Private Type SCROLLBARINFO
   cbSize As Long
   rcScrollBar As RECT
   dxyLineButton As Long
   xyThumbTop As Long
   xyThumbBottom As Long
   reserved As Long
   rgstate(0 To 5) As Long
End Type

Public Const OBJID_CLIENT = &HFFFFFFFC
Public Const GWL_WNDPROC = (-4)
Public Const WM_CTLCOLORSCROLLBAR = &H137
Public Const SBM_GETSCROLLBARINFO = &HEB

Public Sub SubclassControl(Control As Object, BackColor As Long)

   SetProp Control.hwnd, "PrevProc", SetWindowLong(Control.hwnd, GWL_WNDPROC, AddressOf WindowProc)
   SetProp Control.hwnd, "BackColor", CreateSolidBrush(BackColor)

End Sub

Public Sub UnSubclassControl(Control As Object)

   SetWindowLong Control.hwnd, GWL_WNDPROC, GetProp(Control.hwnd, "PrevProc")
   DeleteObject GetProp(Control.hwnd, "BackColor")
   RemoveProp Control.hwnd, "PrevProc"
   RemoveProp Control.hwnd, "BackColor"
   
End Sub

Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
   
   Dim ScrollInfo As SCROLLBARINFO, PrevProc As Long
   
   PrevProc = GetProp(hwnd, "PrevProc")
   
   Select Case uMsg
   Case WM_CTLCOLORSCROLLBAR
   
       WindowProc = GetProp(hwnd, "BackColor")
       Exit Function
   
   End Select
   
   WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
   
End Function

 

Og deretter dette i formene du vil endre fargen:

 

Private Sub Form_Load()

   ' Bruk en annen farge enn vbRed om du ikke ønsker rød bakgrunn.
   SubclassControl Me, vbRed

End Sub

Private Sub Form_Unload(Cancel As Integer)

   UnSubclassControl Me

End Sub

 

Off-topic: Huff, så lang tid dette tok.

Lenke til kommentar

WOW

 

Det var mer jobb å få til enn jeg hadde regna med!! phew!

 

 

Sitter og irriterer meg grønn over noe nytt nå...

 

I properties så fungerer scroll-hjulet på musa, men ikke i selve Code-editoren (der som jeg skriver koden).

 

Skal det være sånn? Kan man enndre på dette ett eller annet sted? Det er grusomt irriterende når man skal bla opp eller ned i koden og så kan man ikke bruke mus-hjulet!

Lenke til kommentar

Har sittet her en stund nå med en for-sats som tilsynelatende ikke fungerer. Har søkt i MSDN men ser ikke hva jeg gjør feil.

 

    For i = 0 To i = UBound(Buffer, 1)

        Label1.Caption = Label1.Caption & Chr(Buffer(i))

    Next i

 

Buffer er definert som

 

Dim Buffer() as Byte

 

Buffer har blitt tildelt verdier mha.

 

Buffer = MSComm1.Input

 

og om jeg skriver ut UBound(Buffer, 1) i en label, så får jeg 59, så jeg vet at det finns 60 tegn som venter på meg i Buffer.

 

Men, når programmet kjører for-loopen over så hender det ingenting med Label1.

Det merkelige er at dersom jeg tar bort for-loopen og kjører følgende :

 

Label1.Caption = Label1.Caption & Chr(Buffer(0)) 'eller 1 eller 2 eller 3 etc...

så får jeg opp bokstavene i labelen! Det er derfor jeg tror at noe er feil med for-loopen...

Lenke til kommentar

Bare en syntax error. Slik skal en for-loop skrives:

    For i = 0 To UBound(Buffer, 1)
       Label1.Caption = Label1.Caption & Chr(Buffer(i))
   Next i

Edit: Man starter alltid telle forskjellige ting, på null, så arrayet inneholder 60 elementer, men slutter på 59.

Endret av Jonas
Lenke til kommentar

:blush: men, men... jaja. sorry. (lamt av VB å ikke kunne si fra om den typen syntax-feil da.)

 

Vil bare benytte kjangsen å takke for att jeg har fått så mange og kjappe svar, det er virkelig til stor hjelp for meg når jeg setter meg fast og kan komme igang igjen så kjapt!

 

 

Med tanke på at jeg skrev for-satsen etter hva jeg trodde var korekt tolkning av MSDN, så kanskje jeg har missoppfatta dette også:

I MSDN stod det noe slikt i example:

 

MSComm1.Output = "ATV1Q0" & Chr$(13) ' Ensure that

 

Men det fungerer også slik, i mitt program iallefall:

 

MPEGCom.Output = txtCommand & Chr$(13)

 

Men nå har jeg prøvd både med og uten $ karaktæren, og det fungerer i begge tilfellene, så hva gjør $ i denne situasjonen?

 

Slik jeg har forstått det så brukes $ for å lage streng-variabler med "flytende" størrelse, f.eks. msg$ [streng fra 0 til XXXX tegn stor], men Chr er jo en funksjon og ikke en variabel?

 

 

----

Jeg kommenterer koden og forsøker å benytte fornuftige navn, så jeg tenkte at når jeg er klar med programmet (er i skole-sammenheng, og ganske mange andre elever sine prosjekter avhenger av meg, så det BLIR ferdig) så kan jeg dele det med alle dere på forumet her. Tror nok at mange andre nybegynnere kan lære seg ett og annet da. :)

Lenke til kommentar

Den eneste forskjellen mellom funksjonene Chr og Chr$, er at forstenevnte returnerer en Variant, mens den andre returnerer en streng. En Variant, som forøvrig kan inneholde alle typer data, har en langt dårligere ytelse enn rene, "flytende" strenger. Så for all del, BRUK streng-versjonen av alle funksjoner såfremt det er mulig!

Lenke til kommentar
Den eneste forskjellen mellom funksjonene Chr og Chr$, er at forstenevnte returnerer en Variant, mens den andre returnerer en streng. En Variant, som forøvrig kan inneholde alle typer data, har en langt dårligere ytelse enn rene, "flytende" strenger. Så for all del, BRUK streng-versjonen av alle funksjoner såfremt det er mulig!

men hva er egentlig forskjellen på en variant og en streng?

 

en streng kan jo også egentlig inneholde all type data, kan den ikke?

Endret av dga01
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å
×
×
  • Opprett ny...