Toon posts:

[VB6] Picturebox met scrollbalken?

Pagina: 1
Acties:
  • 160 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een programmatje waarmee uit (zeer) grote foto's (soms van 3000 * 2000 pixels bijv) een klein gedeelte (650 * 143 pix) kan worden geknipt. Het knippen en dergelijke gaat prima, ook het opslaan op dat formaat werkt goed.
Ik loop alleen tegen het probleem aan dat doordat de foto soms zo groot is, hij logischerwijs nooit in één keer op het scherm past. Er wordt maar een bepaald gedeelte van de foto getoond, en ook alleen daaruit kan men een stuk knippen.

Een mogelijke oplossingen is dan een imagebox te gebruiken: en dan de optie Stretch op True. Echter, hiermee wordt de foto automatisch verkleind, wat zorgt voor kwaliteitsverlies. Het uitgeknipte stuk maakt namelijk een 1-op-1 kopie van een bepaald gedeelte van de foto, dus met verkleining en met kwaliteitsverlies. Geen optie dus.

Wat ik zelf erg graag zou willen is een scrollbalk naast en onder de foto. Zo kan men scrollen naar een bepaald gedeelte van de foto, en dan daar het stuk uitknippen. Ik zou alleen niet weten hoe ik dit moet doen.

Heeft iemand van jullie een oplossing?

(P.S. Ik heb de executable + dll gezipt, deze vind je hier. De dll in system32 plaatsen hoort voldoende te zijn.)

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 25-05 20:58

Super_ik

haklust!

je zult zelf die balken moeten toevoegen, en met wat code je imagebox verschuiven op t scherm. niet zo moeilijk te maken lijkt me

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Je kunt een Picturebox als een soort frame gebruiken.
Maak een imagebox binnen de picturebox (dus in de container)
Zet de Border van de image op none, zodat je de image niet ziet.
Plaats de image tegen de randen van de picturebox
Zet image width en height op duizenden pixels, autosize op false
Laad de afbeelding in de image
Zorg ervoor dat de image omhoog en omlaag geschoven wordt (verandering van de .top en .left) bij gebruik van de scrollbar

Dit moet duidelijk zijn. Dit doet precies wat jij zoekt, het gebruik van scrollbars om de image te verschuiven. Belangrijk is om de autoredraw van alles op het form op True te zetten. Als je er niet uit komt, laat het weten :)

Verwijderd

Topicstarter
Verwijderd schreef op 18 mei 2004 @ 23:28:
Je kunt een Picturebox als een soort frame gebruiken.
Maak een imagebox binnen de picturebox (dus in de container)
Zet de Border van de image op none, zodat je de image niet ziet.
Plaats de image tegen de randen van de picturebox
Zet image width en height op duizenden pixels, autosize op false
Laad de afbeelding in de image
Zorg ervoor dat de image omhoog en omlaag geschoven wordt (verandering van de .top en .left) bij gebruik van de scrollbar

Dit moet duidelijk zijn. Dit doet precies wat jij zoekt, het gebruik van scrollbars om de image te verschuiven. Belangrijk is om de autoredraw van alles op het form op True te zetten. Als je er niet uit komt, laat het weten :)
Heel erg bedankt voor je reactie, het is gelukt :D. Heb het ietsjes anders gedaan, maar het resultaat is gelijk :).

Dan stuit ik op mijn volgende probleem: bij de ene foto gaat het goed, terwijl de andere een foutmelding (overflow) geeft van een .max van een scrollbar.
Ik heb het zipje in m'n eerste post geupdate, deze keer ook ff de code erbij plus een tweetal foto's. Zou je het programmatje eens willen openen, en kijken wat er fout gaat? Met Foto1.JPG in het zipje gaat het goed, Foto2.JPG geeft de foutmelding.

Alvast ontzettend bedankt _/-\o_ !!!

Verwijderd

Wat er fout gaat zijn de values, ze worden te hoog omdat de tekening te groot wordt. De maximale value van een scroller is 32k, door het programma wordt hij hoger dan 40k, dus krijg je een overflow.

Ik heb het volgende veranderd:
code:
1
2
3
4
5
6
7
8
9
Sub LoadFile(sIN As String)
Dim lW As Long
Dim lH As Long
    
    picSource.Picture = LoadPicture(sFile)
    picDest.Picture = LoadPicture()
    
    HScroll1.Max = (picSource.Width - HScroll1.Width) / 2
    VScroll1.Max = (picSource.Height - VScroll1.Height) / 2


Zo kun je al wat meer. Alleen nu scrollt hij dus maar voor de helft. Bij de scrollbar functies kun je er niet * 2 achter zetten. Voor een of andere stomme reden werkt dit niet, dus heb ik het volgende gedaan daarvoor:

code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub HScroll1_Change()
HScrollValue = -HScroll1.Value
HScrollValue = HScrollValue - HScroll1.Value
picSource.Left = HScrollValue
End Sub

Private Sub VScroll1_Change()
VScrollValue = -VScroll1.Value
VScrollValue = VScrollValue - VScroll1.Value
picSource.TOp = VScrollValue
End Sub


HScrollValue en VScrollValue worden aan het begin gedeclareerd als Long. Nu werkt alles, heb het bestand geupload. Mocht je eventueel met NOG grotere foto's gaan werken kun je het gewoon aanpassen naar /3 of zelfs /4.

http://www.warcraftdatabase.net/ImageCropper.zip

Verwijderd

Topicstarter
Verwijderd schreef op 19 mei 2004 @ 14:37:
Wat er fout gaat zijn de values, ze worden te hoog omdat de tekening te groot wordt. De maximale value van een scroller is 32k, door het programma wordt hij hoger dan 40k, dus krijg je een overflow.

Ik heb het volgende veranderd:
code:
1
2
3
4
5
6
7
8
9
Sub LoadFile(sIN As String)
Dim lW As Long
Dim lH As Long
    
    picSource.Picture = LoadPicture(sFile)
    picDest.Picture = LoadPicture()
    
    HScroll1.Max = (picSource.Width - HScroll1.Width) / 2
    VScroll1.Max = (picSource.Height - VScroll1.Height) / 2


Zo kun je al wat meer. Alleen nu scrollt hij dus maar voor de helft. Bij de scrollbar functies kun je er niet * 2 achter zetten. Voor een of andere stomme reden werkt dit niet, dus heb ik het volgende gedaan daarvoor:

code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub HScroll1_Change()
HScrollValue = -HScroll1.Value
HScrollValue = HScrollValue - HScroll1.Value
picSource.Left = HScrollValue
End Sub

Private Sub VScroll1_Change()
VScrollValue = -VScroll1.Value
VScrollValue = VScrollValue - VScroll1.Value
picSource.TOp = VScrollValue
End Sub


HScrollValue en VScrollValue worden aan het begin gedeclareerd als Long. Nu werkt alles, heb het bestand geupload. Mocht je eventueel met NOG grotere foto's gaan werken kun je het gewoon aanpassen naar /3 of zelfs /4.

http://www.warcraftdatabase.net/ImageCropper.zip
Gaaf!!! Het werkt nu echt perfect :)! Bedankt!!!

(P.S. Is er ook nog een manier om de "scrollblokjes" in de scrollbalken te vergroten? :o)

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Je kan met optie largechange en smallchange dacht ik uit mijn hoofd wat knoeien zodat het blokje op de scrollbalk groter of kleiner wordt.

W3designer.nl


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 25-05 20:58

Super_ik

haklust!

Verwijderd schreef op 19 mei 2004 @ 14:37:
Wat er fout gaat zijn de values, ze worden te hoog omdat de tekening te groot wordt. De maximale value van een scroller is 32k, door het programma wordt hij hoger dan 40k, dus krijg je een overflow.

Ik heb het volgende veranderd:
code:
1
2
3
4
5
6
7
8
9
Sub LoadFile(sIN As String)
Dim lW As Long
Dim lH As Long
    
    picSource.Picture = LoadPicture(sFile)
    picDest.Picture = LoadPicture()
    
    HScroll1.Max = (picSource.Width - HScroll1.Width) / 2
    VScroll1.Max = (picSource.Height - VScroll1.Height) / 2


Zo kun je al wat meer. Alleen nu scrollt hij dus maar voor de helft. Bij de scrollbar functies kun je er niet * 2 achter zetten. [b]Voor een of andere stomme reden werkt dit niet[b], dus heb ik het volgende gedaan daarvoor:

code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub HScroll1_Change()
HScrollValue = -HScroll1.Value
HScrollValue = HScrollValue - HScroll1.Value
picSource.Left = HScrollValue
End Sub

Private Sub VScroll1_Change()
VScrollValue = -VScroll1.Value
VScrollValue = VScrollValue - VScroll1.Value
picSource.TOp = VScrollValue
End Sub


HScrollValue en VScrollValue worden aan het begin gedeclareerd als Long. Nu werkt alles, heb het bestand geupload. Mocht je eventueel met NOG grotere foto's gaan werken kun je het gewoon aanpassen naar /3 of zelfs /4.

http://www.warcraftdatabase.net/ImageCropper.zip
dat heeft te maken met het casten

dit werkt wel, als je x maar groot genoeg defineerd
Visual Basic:
1
2
x = scroll.value
x = x * 2

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
DarkSilence schreef op 19 mei 2004 @ 16:13:
Je kan met optie largechange en smallchange dacht ik uit mijn hoofd wat knoeien zodat het blokje op de scrollbalk groter of kleiner wordt.
Tuurlijk 8)7.

Dan weer een vraag, zelfde programmatje maar dan ander formulier: ik heb een formulier waar contact gemaakt wordt met een FTP server en in een listbox alle bestanden van een bepaalde map op die FTP worden getoond. Deze bestanden zijn allemaal foto's.
Ik heb (alweer :P) een picturebox op dat formulier staan, welke een foto zou moeten laten zien die de gebruiker aanklikt. Normaliter heel eenvoudig, alleen deze foto's staan dus online en dat vindt mijn picturebox wat minder gezellig. Een online foto wil hij niet openen.
Bestaat hier een bepaalde reference of iets dergelijks voor in VB om online images in een picturebox te krijgen?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 25-05 20:58

Super_ik

haklust!

gebruik een internet control (ocx) :)

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
Super_ik schreef op 21 mei 2004 @ 22:00:
gebruik een internet control (ocx) :)
I do :) Daarmee maak ik verbinding met de FTP. Kan ik daarmee ook een picturebox vullen dan?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 25-05 20:58

Super_ik

haklust!

neej, maar wel t plaatje in laten zien, mischien moet je er ff nog 1tje aanmaken dan
toch :?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
Kan wellicht ook ja, zag net per toeval in een ander VB-prog een Webbrowser. Daar wil het ook mee heb ik gezien, dus het is opgelost :).

Verwijderd

Is misschien net zo handig om eerst het plaatje te downloaden en vervolgens erin te laden.
Pagina: 1