Diskuze: Visual Basic - Posun obrázku v PictureBoxu

C# .NET .NET (C# a Visual Basic) Visual Basic - Posun obrázku v PictureBoxu American English version English version

Avatar
Sparklezz
Člen
Avatar
Sparklezz:

Když mám vlastně PictureBox1 o nějaké velikosti (např. 800x400) a v něm obrázek 1920x1080. Dá se nejak udělat to, že najedu na ten PictureBox1 a tahem myší budu v tom boxu posouvat ten obrázek? Děkuji

 
Odpovědět 10.7.2015 14:34
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

A mohu se zeptat jak? díky

 
Nahoru Odpovědět 10.7.2015 18:31
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Sparklezz
Jan Vargovský:

Chceš jen nějaký nápad co k tomu budeš asi potřebovat nebo i kód?

 
Nahoru Odpovědět 10.7.2015 18:44
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

Poprosil bych asi ze vším všudy :D jestli mlžeš, děkuji

 
Nahoru Odpovědět  -1 10.7.2015 18:47
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Sparklezz
Jan Vargovský:
public partial class Form1 : Form
{
    private Image image;
    private Point point;
    private Point pointOnClickDown;

    /// <summary>
    /// indicates if image is rendered in realtime during shift
    /// </summary>
    bool realTimeShift = true;
    bool isMousePressed;

    public Form1()
    {
        InitializeComponent();

        // panel which is used to draw image
        Panel p = new Panel()
        {
            Width = 300,
            Height = 300
        };

        // see http://stackoverflow.com/a/15815254
        // prevents flickering
        // its done by this way, because its access modification is protected
        typeof(Panel).InvokeMember("DoubleBuffered",
        BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
        null, p, new object[] { true });
        this.Controls.Add(p);

        image = Image.FromFile("Untitled.png");
        point = Point.Empty;

        // draw image
        p.Paint += (o, e) =>
        {
            Graphics g = e.Graphics;
            //g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.AssumeLinear;
            g.DrawImage(image, point);
        };

        p.MouseDown += (o, e) =>
        {
            // store starting position
            pointOnClickDown = e.Location;
            isMousePressed = true;
        };

        p.MouseUp += (o, e) =>
        {
            if (!realTimeShift)
            {
                // calculates difference between two points
                Point shift = new Point(e.Location.X - pointOnClickDown.X, e.Location.Y - pointOnClickDown.Y);
                // refresh position of image - shift it with some direction
                point.Offset(shift);
                // force refresh on panel
                p.Invalidate();
            }
            isMousePressed = false;
        };

        p.MouseMove += (o, e) =>
        {
            if (realTimeShift && isMousePressed)
            {
                // calculates difference between two points
                Point shift = new Point(e.Location.X - pointOnClickDown.X, e.Location.Y - pointOnClickDown.Y);
                // refresh position of image - shift it with some direction
                point.Offset(shift);
                // store starting position
                pointOnClickDown = e.Location;
                // force refresh on panel
                p.Invalidate();
            }
        };
    }
}
Editováno 10.7.2015 20:15
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 10.7.2015 20:14
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

A do jaké složky to mám vrznout?

 
Nahoru Odpovědět 10.7.2015 20:29
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

A delam to ve VB.net ne v C

 
Nahoru Odpovědět 10.7.2015 20:30
Avatar
Odpovídá na Sparklezz
Ondřej Štorc:

Zjevně nevíš nic o práci s WinFormi, zkus se kouknout na zdejší návody, pak by ti to mělo být jasný kam to dát :) http://www.itnetwork.cz/…indows-forms

Nahoru Odpovědět 10.7.2015 20:58
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Sparklezz
Jan Vargovský:

Ah, nevšiml sem si toho názvu... Si to dej do nějakého konverteru nebo popros Michal Žůrek (misaz), aby ti to přepsal :P

 
Nahoru Odpovědět  +1 10.7.2015 21:03
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

konvertor (dneska výjimečně funguje, to se mi už dlouho nestalo):

Public Partial Class Form1
        Inherits Form
        Private image As Image
        Private point As Point
        Private pointOnClickDown As Point

        ''' <summary>
        ''' indicates if image is rendered in realtime during shift
        ''' </summary>
        Private realTimeShift As Boolean = True
        Private isMousePressed As Boolean

        Public Sub New()
                InitializeComponent()

                ' panel which is used to draw image
                Dim p As New Panel() With { _
                        Key .Width = 300, _
                        Key .Height = 300 _
                }

                ' see http://stackoverflow.com/a/15815254
                ' prevents flickering
                ' its done by this way, because its access modification is protected
                GetType(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty Or BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, p, New Object() {True})
                Me.Controls.Add(p)

                image = Image.FromFile("Untitled.png")
                point = Point.Empty

                ' draw image
                p.Paint += Function(o, e)
                Dim g As Graphics = e.Graphics
                'g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.AssumeLinear;
                g.DrawImage(image, point)

End Function

                p.MouseDown += Function(o, e)
                ' store starting position
                pointOnClickDown = e.Location
                isMousePressed = True

End Function

                p.MouseUp += Function(o, e)
                If Not realTimeShift Then
                        ' calculates difference between two points
                        Dim shift As New Point(e.Location.X - pointOnClickDown.X, e.Location.Y - pointOnClickDown.Y)
                        ' refresh position of image - shift it with some direction
                        point.Offset(shift)
                        ' force refresh on panel
                        p.Invalidate()
                End If
                isMousePressed = False

End Function

                p.MouseMove += Function(o, e)
                If realTimeShift AndAlso isMousePressed Then
                        ' calculates difference between two points
                        Dim shift As New Point(e.Location.X - pointOnClickDown.X, e.Location.Y - pointOnClickDown.Y)
                        ' refresh position of image - shift it with some direction
                        point.Offset(shift)
                        ' store starting position
                        pointOnClickDown = e.Location
                        ' force refresh on panel
                        p.Invalidate()
                End If

End Function
        End Sub
End Class
Nahoru Odpovědět  +1 10.7.2015 21:05
Nesnáším {}, proto se jim vyhýbám.
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

A do čeho to mám dát prosím vás? do toho pictureboxu?

 
Nahoru Odpovědět 10.7.2015 21:34
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

a vyskakuje mi tam chyba.... u např. p.MouseUP , p.Invalidate (To je písmeno "p" je označeně špatně)

 
Nahoru Odpovědět 10.7.2015 21:37
Avatar
Odpovídá na Sparklezz
Michal Žůrek (misaz):

začni tím, že se naučíš základy jazyka.

Nahoru Odpovědět  +2 10.7.2015 21:38
Nesnáším {}, proto se jim vyhýbám.
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

Stačilo by jen kdybyste mě jen navedli... Tohle mi chybí jako poslední v programu. Já sem grafik ne koder, děkuji za vše

 
Nahoru Odpovědět  +1 10.7.2015 21:42
Avatar
Nahoru Odpovědět  -1 10.7.2015 22:02
Nesnáším {}, proto se jim vyhýbám.
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

To je sice pravda, ale když slušně prosím.... ale mně je to řiť

 
Nahoru Odpovědět  -1 10.7.2015 22:27
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Sparklezz
David Čápka:

Uvědom si, že jsi napsal na fórum, kde si radíme, neděláme tady práci za druhé. Kluci ti to celé napsali a ty si to ani nedokážeš vložit do projektu a ještě si stěžuješ? Jestli si chceš nechat napsat aplikaci, tak si zadej zakázku - http://www.itnetwork.cz/…-v-it/submit a zaplať si za to. Jestli chceš pomoct, tak ti pomůžeme rádi, ale budeš se muset snažit. A nás nezajímá že jsi grafik, to je jako by mi zedník zadarmo něco opravil protože sem programátor? Fakt se zamysli nad tím co pro tebe tady udělali a co jsi pro ně udělal ty.

Nahoru Odpovědět  +3 10.7.2015 22:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Michal Žůrek (misaz):

Dostal jsi kompletní řešení ve dvou programovacích jazycích, třeba nějaké "děkuju"?

Nahoru Odpovědět  +1 10.7.2015 22:40
Nesnáším {}, proto se jim vyhýbám.
Avatar
Sparklezz
Člen
Avatar
Sparklezz:

Dobře uznávám svoji chybu a omlouvám se. Mohu se tedy zeptat, jak to udělat skrz VScrollBar a HScrollBar? Jen prosím říct jak, já si tedy zbytek udělám. Děkuju za vše

 
Nahoru Odpovědět 11.7.2015 0:29
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Sparklezz
Jan Vargovský:

Kdybys klikl na odpovědět, tak by si toho třeba někdo všiml. Pořád to nemáš hotové?

 
Nahoru Odpovědět 15.7.2015 20:00
Avatar
David Mlčoch
Redaktor
Avatar
David Mlčoch:

nn nemám to hotové, proste to nejde

 
Nahoru Odpovědět 2.8.2015 20:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.