Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Drag and Drop in Userform3 (Nepumuk)

Drag and Drop in Userform3 (Nepumuk)
03.07.2014 11:39:54
Ewald
Hallo Nepumuk,
du hast den Code für die Galerie von Ivonne „Drag and Drop in Userform geschrieben.
Da ja jetzt die WM ist, kam der Gedanke dies für die Darstellung der Mannschaftsaufstellung zu benutzen.
Dies ist auch durch Erweiterung deines Codes gelungen.
Nur gibt es einen Unterschied den ich nicht hinbekomme.
Die Images der ersten Klasse(Drag) werden nicht beim Starten der Userform erstellt und gefüllt, sondern dies soll erst nach Auswahl einer Mannschaft durch eine Combobox erfolgen.
Also Land in Combobox auswählen, Land in Tabelle suchen und dann aus dieser Spalte die Bildadressen nehmen und die Image füllen.(aus Nebenspalte den Controltiptext.)
Frage ist jetzt, da ja zwei Comboboxen(für jede Mannschaft eine) , wie bekomme ich die Images dann in die Klasse.
Wenn eine Mannschaft ausgewählt ist, habe ich ja erst 23 Images von 46, wenn ich jetzt die 46 in die Klasse schreiben will, bekomme ich einen Fehler. Außerdem soll es egal sein, welche Mannschaft ich zuerst auswähle.
Auch soll es möglich sein, jedem Spieler eventuell bekommene Karten(gelb,gelbrot,rot) hinzuzufügen und auch geschossene Tore.
Ob dies auch mit Image oder besser mit Label passiert ist mir noch unklar. Für ein Label müßte ich dann ja per Klick dieses Image als aktives Control auslesen.
Darstellung soll die Farbe der Karte und die Min sein.
Die Min kann aus einem auf der Userform laufendem Timer ausgelesen werden.
Der jetzige Code in der Userform (Klassen wie bei dir)
Private mobjSourceImageClassCollection As Collection
Private mobjTargetImageClassCollection As Collection
Private Sub UserForm_Activate()
Dim ialngIndex As Long
Dim sngLeft As Single
Dim avntValues As Variant
Dim objImage As MSForms.Image
Dim objSourceImageClass As clsSourceImage
Dim objTargetImageClass As clsTargetImage
With Worksheets("Tabelle2")
avntValues = .Range("A1:E46").Value2
End With
Set mobjSourceImageClassCollection = New Collection
sngLeft = 10
For ialngIndex = 1 To 23
Set objImage = Controls.Add(bstrProgID:="Forms.Image.1", _
Name:="Image" & CStr(ialngIndex))
With objImage
.Left = sngLeft
.Top = 0
.Width = 30
.Height = 40
.PictureSizeMode = fmPictureSizeModeStretch
Set .Picture = LoadPicture(avntValues(ialngIndex, 1))
.ControlTipText = avntValues(ialngIndex, 5)
End With
Set objSourceImageClass = New clsSourceImage
Set objSourceImageClass.Image = objImage
Call mobjSourceImageClassCollection.Add(Item:=objSourceImageClass)
sngLeft = sngLeft + 30
Next
sngLeft = 10
For ialngIndex = 24 To 46
Set objImage = Controls.Add(bstrProgID:="Forms.Image.1", _
Name:="Image" & CStr(ialngIndex))
With objImage
.Left = sngLeft
.Top = 490
.Width = 30
.Height = 40
.PictureSizeMode = fmPictureSizeModeStretch
Set .Picture = LoadPicture(avntValues(ialngIndex, 1))
.ControlTipText = avntValues(ialngIndex, 5)
End With
Set objSourceImageClass = New clsSourceImage
Set objSourceImageClass.Image = objImage
Call mobjSourceImageClassCollection.Add(Item:=objSourceImageClass)
sngLeft = sngLeft + 30
Next
Set mobjTargetImageClassCollection = New Collection
For ialngIndex = 50 To 71
Set objTargetImageClass = New clsTargetImage
With objTargetImageClass
Set .Image = Controls("Image" & CStr(ialngIndex))
Set .ChildImage = Controls("Image" & CStr(ialngIndex + 22))
Set .UserForm = Me
End With
Call mobjTargetImageClassCollection.Add(Item:=objTargetImageClass)
Next
For ialngIndex = 72 To 93
Set objTargetImageClass = New clsTargetImage
With objTargetImageClass
Set .Image = Controls("Image" & CStr(ialngIndex))
Set .UserForm = Me
End With
Call mobjTargetImageClassCollection.Add(Item:=objTargetImageClass)
Next
Set objTargetImageClass = Nothing
Set objSourceImageClass = Nothing
Set objImage = Nothing
End Sub
Private Sub UserForm_Terminate()
Set mobjSourceImageClassCollection = Nothing
Set mobjTargetImageClassCollection = Nothing
HBZ = False
VHZ = False
End Sub
Gruß Ewald

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Drag and Drop in Userform3 (Nepumuk)
05.07.2014 11:12:02
Nepumuk
Hallo,
auch nach 5mal lesen versteh ich nur Bahnhof. Und eine Prozedur zu posten die ich geschrieben habe bringt nicht wirklich Licht in die Sache.
Gruß
Nepumuk

AW: Drag and Drop in Userform3 (Nepumuk)
05.07.2014 21:57:30
Ewald
Hallo Nepumuk,
es ist ja schon der abgeänderte Code von dir angepaßt an die jetzige Situation.
vielleicht hilft ja ein Vergleich Fall1 = die Vorgabe von Ivonne, Fall2 = meine Vorstellung.
Fall1
30 Images werden beim Starten der Userform erstellt und mit Bildern, deren Adressen in einer Tabelle in einem bestimmten Bereich stehen gefüllt.
20 Images fest in Userform, 10 sichtbar,10 unsichtbar, durch Doppelklick auf eines der 10 sichtbaren wird das parallele Image eingeblendet.
jedes der 20 Images kann per Drag and Drop aus den 30 Images gefüllt werden.
Fall2
46 Images sollen erstellt werden und mit Bildern gefüllt werden (23 am oberen Rand der Userform,23 am unteren Rand der Userform.) Dies soll aber nicht beim Starten der Userform passieren,sondern durch Auswahl in 2 Comboboxen. Combobox1 für die oberen 23, Combobox2 für die unteren 23 Images.Die Bildadressen stehen in der Spalte wo in Zeile1 der ausgewählte Ländername steht.zb.Algerien, (erste Auswahl in den Comboboxen),Adressen stehen in Spalte B,ControlTiptext in Spalte C. Argentinien(zweite Auswahl) Daten stehen in Spalte D+E usw.
44 Images fest, davon 22 ausgeblendet,Vorgehensweise wie in Fall 1
Das jetzt erstmal dieser Teil, der sich nur durch die Anzahl der Images und eine andere Vorgehensweise unterscheidet.
Gruß Ewald

Anzeige
AW: Drag and Drop in Userform3 (Nepumuk)
06.07.2014 11:01:17
Nepumuk
Hallo,
die Klasse enthält doch "nur" die Controls, nicht deren Bilder. Da du ja von Anfang an weißt, wie viele Images es sind und welche Funktion sie haben sollen, seh ich das Problem nicht.
Ich würde die Controls auch nicht zur Laufzeit erstellen, ihre Anzahl und Eigenschaften stehen doch fest.
Gruß
Nepumuk

AW: Drag and Drop in Userform3 (Nepumuk)
09.07.2014 21:35:22
Ewald
Hallo Nepumuk,
habe es jetzt so gemacht, wie du vorgeschlagen hast, die Image werden direkt beim Start erstellt,wie gehabt, das Füllen mit Bildern passiert dann über die Comboboxen.
Private Sub ComboBox1_Change()
Dim iSpalte As Integer
Dim avntValues As Variant
Dim ialngIndex As Long
iSpalte = (ComboBox1.ListIndex + 1) * 2
With Worksheets("Tabelle3")
avntValues = Range(.Cells(2, iSpalte), .Cells(24, iSpalte + 1)).Value2
End With
For ialngIndex = 1 To 23
With Me.Controls("Image" & CStr(ialngIndex))
.Picture = LoadPicture(avntValues(ialngIndex, 1))
.ControlTipText = avntValues(ialngIndex, 2)
End With
Next
End Sub
Private Sub ComboBox2_Change()
Dim iSpalte As Integer
Dim avntValues As Variant
Dim ialngIndex As Long
iSpalte = (ComboBox2.ListIndex + 1) * 2
With Worksheets("Tabelle3")
avntValues = Range(.Cells(2, iSpalte), .Cells(24, iSpalte + 1)).Value2
End With
For ialngIndex = 24 To 46
With Me.Controls("Image" & CStr(ialngIndex))
.Picture = LoadPicture(avntValues(ialngIndex - 23, 1))
.ControlTipText = avntValues(ialngIndex - 23, 2)
End With
Next
End Sub
das funktioniert jetzt auch.
Um jetzt jedem Spieler(Image) eine Karte oder ein Tor zuzuordnen, habe ich mich für Labels entschieden.
Bei Klick auf ein Label wird eine Variabel gesetzt und falls diese True wird bei Doppelklick auf das Image ein Label dort erstellt.
Bisher sieht das so aus

Private Sub Label24_Click() 'gelb
Karte = True
Farbe = &HFFFF&
Info = Secmin(Zähler) & " min"
End Sub
Private Sub Label25_Click() 'rot
Karte = True
Farbe = &HFF&
Info = Secmin(Zähler) & " min"
End Sub
Private Sub Label26_Click() 'Tor
Karte = True
Farbe = &HFFFF00
Info = Secmin(Zähler) & " min"
End Sub
in der Klasse der Doppelklick
Private Sub mobjImage_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim objLabel As MSForms.Label
'Doppelklick zm ein- und ausblenden der Childimages
If Karte Then
Set objLabel = UserForm1.Controls.Add(bstrProgID:="Forms.Label.1")
With objLabel
.Left = mobjImage.Left - 15
.Top = mobjImage.Top
.Width = 15
.Height = 10
.BackColor = Farbe
.Caption = Info
End With
'mobjImage.ControlTipText = mobjImage.ControlTipText & "  " & Info
Karte = False
Exit Sub
End If
If Not ChildImage Is Nothing Then
With ChildImage
'Bild beim Ausblenden löschen
' If .Visible Then
' Set .Picture = Nothing
' .ControlTipText = vbNullString
' End If
.Visible = Not .Visible
End With
End If
End Sub
Allerdings gibt es noch folgende Probleme, beim StandardImage wie oben die Label auf der linken Seite, sollte es aber ein Parallellabel sein, müssen die Label auf die rechte Seite.
Außerdem kann es ja mehrere Label für ein Image geben, beim Setzen eines Labels muß dies also irgendwie festgehalten werden,damit das nächste Label dann unter dem ersten erscheint.
Weißt du da einen Weg.
Gruß Ewald
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige