Dynamisches Fotoalbum

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von rory.

    Dynamisches Fotoalbum

    Hallo Leute,

    da mein Opa bald Geburtstag hat, kam ich auf die Idee ihm ein Fotoalbum zu programmieren, was Familienfotos aus einem Ordner anzeigt. Ich würde das gerne so machen, das 4 Fotos versetzt auf der Form angezeigt werden (mit 4 Pictureboxen) und die Pictureboxen sich automatisch an das Verhältnis des Fotos anpassen (manche haben kein "normales" Verhältnis). Über eine Trackbar sollen die "Seiten" ausgewählt werden können, wenn man zur nächsten Seite wechselt sollen die nächsten 4 Fotos aus dem Ordner angezeigt werden. Falls es möglich sein sollte, sollte die Trackbar sich automatisch um "Seiten" verlängern, wenn die Anzahl der Fotos sich im Ordner vermehrt. Im Anhang mal grob, wie ich mir das vorstelle.

    Ist so etwas möglich zu realisieren?

    Ich hoffe ich habe mich genau genug ausgedrückt :D

    Liebe Grüße,

    rory
    Bilder
    • Konzept.PNG

      17,68 kB, 1.027×645, 147 mal angesehen
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren

    rory schrieb:

    realisiere
    das mit Powerpoint.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Das ist was völlig anderes und hier vermutlich nicht gefragt. Was, wenn der TE eine Form haben will, die im Hintergrund bleiben kann? Usw.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Pantsuu schrieb:

    klar ist das möglich.
    Was genau ist deine Frage und was ist dein bisheriger Ansatz ?


    Meine Frage wäre dann vor allem, wie man die Trackbar so einsetzt, dass mit Auswahl der Seiten sich die Pictureboxen zwar entsprechend aktualisieren, aber beim zurückgehen wieder die alten Fotos anzeigen und die Pictureboxen sich dem aktuellen Inhalt anpassen.

    Liebe Grüße
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren

    rory schrieb:

    wie man die Trackbar so einsetzt
    Das ist ein "inneres" Problem.
    Formuliere mal schriftlich eine genaue Aufgabenstellung (eine Sammlung "äußerer" Probleme / Aufgaben), was angezeigt werden soll und wie es bedient werden soll.
    Was soll passieren, wenn bestimmte Aktionen ausgelöst werden.
    Wenn das in Deinem Kopf und auf dem Papier völlig klar ist, beginnst Du mit der Implementierung. In dsiesem Zustand bist Du bei Problemen in der Lage, sie so präzise zu beschreiben, dass sie ganz easy zu lösen sind. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany, ich habe mir deinen Vorschlag mal zu Herzen genommen und habe aufgeschrieben, was wie wo passieren soll:

    - Die Pictureboxen sollen Bilder aus einem Ordner anzeigen

    - Die Trackbar agiert als „Seitenauswahl“ --> wird der Zeiger verschoben, so sollen die Pictureboxen sich aktualisieren und die nächsten 4 Fotos aus dem Ordner anzeigen

    - Wenn man von Seite 3 auf Seite 2 wechselt, müssen die Fotos die vorherigen 4 Fotos
    anzeigen --> feste Fotos pro Seite

    - Die Pictureboxen sollen im Verhältnis des aktuellen Fotos sein --> Hoch- und Querformat beachten! (Da könnte ich mir vorstellen, mit SizeMode: Zoom und MaximumSize zu arbeiten)

    - Schön wäre eine vorherige Prüfung, wie viele Fotos in dem Ordner sind, woraufhin sich die Anzahl von Abschnitten der Trackbar sich verändert (wenn Fotos gelöscht werden, weniger Seiten, kommen neue hinzu, mehr Seiten (Fotoanzahl durch 4 , bei Rest neue Seite anfangen))

    Das ist eigentlich alles "Äußere".

    Ich hoffe, das ist jetzt präzise genug formuliert ;)
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren

    rory schrieb:

    präzise genug formuliert
    Jawoll Sir. :D
    Form mit Button, TableLayoutPanel (2x2), pro Panel eine PictureBox, DockStyle = Fill und SizeMode = Zoom.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private files As List(Of IO.FileInfo)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. files = New List(Of IO.FileInfo)
    5. files.AddRange(New IO.DirectoryInfo("c:\Temp").GetFiles("*.png"))
    6. files.AddRange(New IO.DirectoryInfo("c:\Temp").GetFiles("*.jpg"))
    7. Dim anzahl = files.Count
    8. If anzahl Mod 4 = 0 Then
    9. TrackBar1.Maximum = (anzahl \ 4) - 1
    10. Else
    11. TrackBar1.Maximum = (anzahl \ 4)
    12. End If
    13. If TrackBar1.Value = 0 Then
    14. ' 1. Charge darstellen
    15. TrackBar1_Scroll(TrackBar1, EventArgs.Empty)
    16. Else
    17. TrackBar1.Value = 0
    18. End If
    19. End Sub
    20. Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
    21. Dim index1 = TrackBar1.Value * 4
    22. Dim index2 = index1 + 3
    23. If index2 >= files.Count Then
    24. index2 = files.Count - 1
    25. End If
    26. Me.PictureBox1.Image = Nothing
    27. Me.PictureBox2.Image = Nothing
    28. Me.PictureBox3.Image = Nothing
    29. Me.PictureBox4.Image = Nothing
    30. For i = index1 To index2
    31. Select Case i Mod 4
    32. Case 0 : Me.PictureBox1.ImageLocation = Me.files(index1 + 0).FullName
    33. Case 1 : Me.PictureBox2.ImageLocation = Me.files(index1 + 1).FullName
    34. Case 2 : Me.PictureBox3.ImageLocation = Me.files(index1 + 2).FullName
    35. Case 3 : Me.PictureBox4.ImageLocation = Me.files(index1 + 3).FullName
    36. End Select
    37. Next
    38. End Sub
    39. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du könntes mit IO.DirectoryInfo und .GetFiles() die Bilder einlesen.
    Dann kannst du alle Bild-Pfade in eine List Of(..) laden mit .addRange()
    Und dann jewals mit der Trackbar den auf List-Index zugreifen und die Bilder anzeigen.

    EDIT: Och da kommt Rod mit fertigen Source. ^^

    rory schrieb:

    funktioniert
    Wieviele Bilder hast Du?
    Gib ihr .LargeChange = 1.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Im Moment sind es 23 Testbilder, in Wirklichkeit werden es ca. 100-150 sein. Ich habe ihr .LargeChange = 1 gegeben, gebracht hat das leider nichts... Die ersten vier werden auch richtig angezeigt, beim Seitenwechsel wechseln sie aber nicht.

    EDIT: Ich hab wohl irgendwie nen Fehler irgendwo gemacht, ich habe einfach ein paar Schritte zurück gemacht und jetzt geht's :D
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rory“ ()

    rory schrieb:

    beim Seitenwechsel
    Poste mal Deinen Code.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    s. Edit bei meinem letzten Post :D habe das Programm bereits komplett fertiggestellt und es funktioniert wunderbar. :rolleyes:
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren