Einfach oder nicht ?

Von: , Frage gestellt am Mo, 3. Sep 2007

Nabend,

Ich habe auf einer Form 16 Punkte, die auf 2 reihen a 8 Punkte aufgeteilt sind. Nun würde ich gern einen Punkt aus der ersten reihe mit einem beliebigen aus reihe 2 verbinden. Zusätzlich würde ich gern in einer Liste den text bekommen:" Punkt 1 wurde mit Punkt 9 verbunden.
Die beiden Punkte sollten entweder mit der gleichen Farbe gekennzeichnet oder mit einer linie verbunden werden.

Wie gross wäre der Aufwand ?

besten Dank. mfg jonny

48 Antworten zu dieser Frage

  1. Antwort von nach 20 Minuten 0 hilfreich
    Re: Einfach oder nicht ?

    Hi Joe, Wie gross wäre der Aufwand ?
    zwei Zeilen. :-) ... und etwas drum herum.

    Option Explicit
    
    Dim Start As Integer
    
    Private Sub Picture1_Click(Index As Integer)
        Start = Index
    End Sub
    
    Private Sub Picture2_Click(Index As Integer)
        Line (Picture1(Start).Left, Picture1(Start).Top)-(Picture2(Index).Left, Picture2(Index).Top)
    End Sub
    

    ... läuft, getestet.

    Gruß, Rainer

    • Antwort von nach 41 Minuten 0 hilfreich
      Re^2: Einfach oder nicht ?

      Im ersten Moment schien es überschaubar :P
      ich habe eine Form mit Picture1 & Picture2 + deinen Code.

      Compile error:
      Procedur declaration does not match description of event or procedure have the same name.

      wir reden über vb6 (wie immer, oder)

      Thx , joe [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach 48 Minuten 0 hilfreich
        Re^3: Einfach oder nicht ?

        Hi Joe,

        Private Sub Picture1_Click(Index As Integer)

        Die Eigenschaft 'Index' haben nur Steuerelementefelder, die Pics zum anklicken in der einen Zeile heißen alle Picture1 und haben den Index von 0 bis 7, die anderen acht heißen Picture1 mit dem Index 0 bis 7.

        Gruß, Rainer

        • Antwort von nach einer Stunde 0 hilfreich
          Re^4: Einfach oder nicht ?

          WoW, nun bin ich schon beeindruckt!!
          war wieder ein anfängerfehler von mir.

          Nun habe ich das ganze bis Reihe 4 a 8 Pictures gebaut.
          Wie kann ich sagen das von einem Punkt nur eine Linie weggehen darf. bzw wie könnte ich eine line wieder entfernen ?

          Option Explicit
          
          Dim Start As Integer
          
          Private Sub Picture1_Click(Index As Integer)
          Start = Index
          End Sub
          
          Private Sub Picture2_Click(Index As Integer)
          Line (Picture1(Start).Left, Picture1(Start).Top)-(Picture2(Index).Left, Picture2(Index).Top)
          End Sub
          
          Private Sub Picture3_Click(Index As Integer)
          Line (Picture1(Start).Left, Picture1(Start).Top)-(Picture3(Index).Left, Picture3(Index).Top)
          End Sub
          

          • Antwort von nach einer Stunde 0 hilfreich
            Re^5: Einfach oder nicht ?

            Hi Joe, Nun habe ich das ganze bis Reihe 4 a 8 Pictures gebaut.
            OK. Verschärfte Bedingungen. :-) Wie kann ich sagen das von einem Punkt nur eine Linie weggehen
            darf.
            Du kannst das Pic disablen. Beispiel:

            Picture1(Index).enabled = False

            Wenn die Linie vom picture1(Index) abgeht. In der Basisversion ist eine Reihe ja immer nur Start, die andere immer nur Ziel. Wenn das nicht so sein soll, wird der Code etwas komplizierter, aber nicht viel. Ursprünglich ging es ja um möglichst wenig Code. :-) bzw wie könnte ich eine line wieder entfernen ?
            Indem Du für jedes Pic speicherst, daß eine Linie abgeht und wohin. Dazu nimmst Du am Besten zu jeder der Zeilen ein eigenes Array mit identischen Indizes und dimensioniert die als Objekt, dann hast Du alle Eigenschaften ... Und schon sind wir mit dem einfachen Programm in der objektorientierten Programmierung angekommen. *fg* So schnell kann das gehen. Klar?

            Gruß, Rainer

            • Antwort von nach 2 Stunden 0 hilfreich
              Re^6: Einfach oder nicht ?

              A hoi Rainer.
              Array..Array ..da war doch was.

              1. Wenn ich Picture1 index 0-15 brauche, also 16 Bilder pro reihe, muss ich auf Long umsteigen, oder?

              2. Picture1(Index).Enabled & Picture2(Index).Enabled = False
              Funktioniert bei Picture2 einbahnfrei. Aber bei Picture1 leider nicht sooo gut da beim disablen ja noch ein wert im index drinsteht. soll ich da einfach nach einem klick sagen index = "" ?

              3. Wie war das mit einer Listbox die nach jedem klick sagt:
              Picture1 index1 wurde mit Picture2 index4 verbunden :/

              danke mfg joe [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

            • Antwort von nach 2 Stunden 0 hilfreich
              Re^7: Einfach oder nicht ?

              Hi Joe, Array..Array ..da war doch was.
              *gg* 1. Wenn ich Picture1 index 0-15 brauche, also 16 Bilder pro
              reihe, muss ich auf Long umsteigen, oder?
              Byte ist 1 Byte groß, ein Byte hat 8 Bit. 2^0 = 1 + 2^1 = 2 ... + 2^7 = 128 ... Summe 255. 1 Byte reicht also um bis 255 zu zählen. Integer ist 2 Byte groß, also 255 * 255 = 65025. Aber damit man negative Zahlen darstellen kann von -32512 bis +32512. Long hat 4 Byte, Double 8 Byte ... ab hier darfst Du selbst rechnen. 2. Picture1(Index).Enabled & Picture2(Index).Enabled = False
              Funktioniert bei Picture2 einbahnfrei. Aber bei Picture1
              leider nicht sooo gut da beim disablen ja noch ein wert im
              index drinsteht. soll ich da einfach nach einem klick sagen
              index = "" ?
              Index ist eine Variable, die Du vom System bekommst, das ist immer der Index des angeklickten Bildes. Wenn Du selbst Variablen setzen möchtest, verwende einen anderen Namen. 3. Wie war das mit einer Listbox die nach jedem klick sagt:
              Picture1 index1 wurde mit Picture2 index4 verbunden :/
              Aber nur für die Anzeige! Nicht, daß Du damit arbeiten willst, das wird extrem langsam, nicht zu gebrauchen.
              Nimm eine Variable, ich würde die 'Src' nennen. (Source) und deklariere sie als Integer. (Index ist ebenfalls Integer)
              Wenn Du Deine Pics nun von 1 bis n numerierst (Null weg lassen, ein Array mit Pics reicht ja auch ...) Dann kannst Du mit ...

              If Src = 0 Then
                  Src = Index
              Else
                  Line (Pic(Src).Left, Pic(Src).Top) - (Pic(Index).Left, Pic(Index).Top), VbBlack
                  List1.AddItem CStr(Src) & " - " & CStr(Index)
                  Dest(Index) = Src
                  Dest(src) = Index
              End If
              

              Sowohl die Linie ziehen als auch die Punkte in die Liste eintragen.
              Für die Arbeit würde ich dann aber doch ein Array 'Dest(Count)' anlegen und dort immer den Index des anderen Feldes eintragen, zu dem die Linie führt. (Oben schon mal eingebaut) Wenn Du ein Zeil eintragen willst und da steht schon eins, dann muss die Linie gelöscht werden. Das habe ich jetzt noch nicht eingebaut, versuch's mal selbst.
              Line (Pic(Dest(Index)).Left, Pic(Dest(Index)).Top) - (Pic(Index).Left, Pic(Index).Top), Me.BackColor
              

              Gruß, Rainer

            • Antwort von nach 3 Stunden 0 hilfreich
              Code ...

              Hi Joe,

              erst lesen, wenn du nicht mehr weiter kommst:

              Option Explicit
              
              Dim Dest() As Integer
              Dim Src As Integer
              
              Private Sub Form_Load()
                  ReDim Dest(Pic.LBound To Pic.UBound)
              End Sub
              
              Private Sub Pic_Click(Index As Integer)
                  If Dest(Index) <> 0 Then
                      Line (Pic(Index).Left, Pic(Index).Top)-(Pic(Dest(Index)).Left, Pic(Dest(Index)).Top), Me.BackColor
                      Dest(Dest(Index)) = 0
                      Dest(Index) = 0
                  End If
                  
                  If Src = 0 Then
                      Src = Index
                      Pic(Index).BackColor = vbRed
                  Else
                      Line (Pic(Src).Left, Pic(Src).Top)-(Pic(Index).Left, Pic(Index).Top), vbBlack
                      Pic(Src).BackColor = vbWhite
                      Dest(Index) = Src
                      Dest(Src) = Index
                      Src = 0
                  End If
              End Sub
              


              Es gibt nur ein Steuerelementefeld, die Pics heißen Pic(Index). Wo die liegen ist ja egal. Verwendest Du mehrere, wird nur der Code komplizierter, bringt aber keinen Nutzen.

              Gruß, Rainer

            • Antwort von nach 2 Tagen 0 hilfreich
              Re: Code ...leckaaa Code

              Moin Rainer,
              ich würde gern beide Bilder weiß einfärben nicht nur den startpunkt.
              Es ist doch ein Array, also könnte ich mir zu jedem zeitpunkt alle verbindungen ausgeben lassen ? also Button press... 22->44, 2->10

              ? mfg jonny [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!