Oke, ik snap wat je bedoelt, maar mijn probeel is vooral dat ik totaal niet weet hoe ik dit in VB kan doen, ik heb geen ervaring met programmeren (wel scripten, maarja).

dan zou ik ook lekker met een 'echte' taal beginnen ipv basic. ben daar 13 jaar geleden in begonnen (erg he, zo oud ben ik nog niet eens :P), en je leert er nare gewoontes van. variabelen halverwege je programma declareren enzo. een string als integer behandelen en daarna vrolijk weer als string gebruiken.

met die nieuwste VB's is het wat beter, maar omdat ik geen .net fan ben ben ik er niet zo in meegegaan. geef mij maar delphi.

maar goed, zoek eens of VB.net ook een XOR functie heeft. kan het hier even niet controleren, ben niet thuis.

dan sla je de waarde van de poort op in form1.tag.
vervolgens zeg je bij button 1:
form1.tag = form1.tag XOR 1
call portout(&h378,form1.tag)

en bij button 2:
form1.tag = form1.tag XOR 2
call portout(&h378,form1.tag)

@progger. Echte taal .. iets zoals ADA en Fortran en stoten we meteen door naar PL/1 ? Je gaat je wel een big-iron machine zoals een Cray of IBM moeten kopen dan..

taal maakt niks uit. pak hetgeen je het meeste ligt. in visual studio is er gene onderscheid meer tussen CB C C# ironpython en weetikvele wat. Alles wordt naar CLR gemapt en door de JIT gesnokt.

Delphi .. nu brolland failliet is is die toekomst heeeel onzeker.

enfin we wijken af.

wat is dat geknoei met tags ? als je het over de kunde van programmeren hebt ... that's NOT how to do it.

hang een tag vast aan elk van je knoppen. de eerste knop krijgt 1 , de tweede 2 de derde 3 enzovoort

dan assigneer je de clickhandler aan elk van deze knoppen met een assign


sub clickhandler(sender as object) handles button1.click , button2.click , button3.click ...
    static x as integer
    dim mask as integer
    mask = 1 << sender.tag
    if (x and mask) then
       x = x and not(mask)
    else
       x = x  or mask
    end if
    ' en hier vlam je hat naar de poort
end sub

free, je hebt baas boven baas.

eigenlijk zou je zoiets met een globale variabele moeten doen ja.
vanwege de gelimiteerde kennis van TS stelde ik voor om een form1.tag als globale variabele te misbruiken. daarom heb ik ook niet voorgesteld om alles in een functie af te handelen, ook al is dat natuurlijk beter.

vroeger (vb6) deed je dat trouwens met een control-array-index. tegenwoordig zal dat waarschijnlijk met een tag moeten ja. ik weet niet of het uitmaakt of je een tag gebruikt om een mask te maken dmv van bitshift of gelijk het getal als mask gebruikt.

[offtopic]
ik verdien inderdaad mijn (bescheiden) brood met delphi 7.0
had jij nou nog een vacature open?:P
[/offtopic]

@progger: als ik form1.tag vervang door Me.tag dan krijg ik geen foutmeldingen.

@free: jouw code geeft foutmeldingen bij de x'en. Maar dat is waarschijnlijk omdat ik niet weet hoe ik een tag vast hang aan een knop.

Bijna al m'n problemen zijn opgelost, nu heb ik alleen dit nog:

Om de eerste datalijn van de poort hoog te maken gebruikt ik volgende code:

Call PortOut(&H378, 1)

Voor de tweede dan hetzelfde, maar die 1 vervangen door 2, daarna, 4,8,16 enzoverder.

Om nu die lijnen weer laag te maken gebruik ik 0, maar dit klopt niet, want 0 maakt alle lijnen laag. Hoe maak ik dus 1 lijn laag? Door nog eens hetzelfde (1,2,4,8,16..) te sturen?

Ik heb ook ergens gelezen dat als ik 1 lijn hoog maak, dat ik dan een OR functie moet gebruiken om er nog een hoog te maken. Hoe doe ik dit?

En dan nog het volgende: Als ik mijn project in VB2008 run dan kan ik maar 1 button tegelijk indrukken, als ik dus bijv. data0 hoog maak, en ik wil op data7 drukken dan valt button1 (data0) weer automatisch af.

misschien heb je hier wat aan, dit is mijn eigen proggamatje

het is gescheven in een oudere VB

Public Class Form1
    Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short
    Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)
    Dim bit1 As Short = 0
    Dim bit2 As Short = 0
    Dim bit3 As Short = 0
    Dim bit4 As Short = 0
    Dim bit5 As Short = 0
    Dim bit6 As Short = 0
    Dim bit7 As Short = 0
    Dim bit8 As Short = 0
    Dim bitout As Short = 0
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If bit1 = 1 Then bit1 = 0 Else bit1 = 1
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If bit2 = 2 Then bit2 = 0 Else bit2 = 2
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If bit3 = 4 Then bit3 = 0 Else bit3 = 4
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If bit4 = 8 Then bit4 = 0 Else bit4 = 8
    End Sub
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        If bit5 = 16 Then bit5 = 0 Else bit5 = 16
    End Sub
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        If bit6 = 32 Then bit6 = 0 Else bit6 = 32
    End Sub
    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        If bit7 = 64 Then bit7 = 0 Else bit7 = 64
    End Sub
    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        If bit8 = 128 Then bit8 = 0 Else bit8 = 128
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        bitout = bit1 + bit2 + bit3 + bit4 + bit5 + bit6 + bit7 + bit8
        TextBox1.Text = Inp(&H378)
        Out(&H378, bitout)
    End Sub
End Class