Avatar billede r9 Nybegynder
18. juli 2003 - 09:22 Der er 3 kommentarer og
1 løsning

GDI+ hjælp

Jeg har tegnet en figur med GDI+.
Figuren er tegnet på en pictureBox.
Lige nu er figuren helt "flad", men jeg vil gerne have at den som standard er "hævet".
Og når man klikker på den (med musen), så skal den blive "flad" som nu.

Dvs. at min figur skal opfører som en alm. button opfører sig.


Mit problem er altså:
- Hvordan får jeg figuren hævet
- Hvordan "fanger" jeg at man klikker med musen på figuren.

200 point til den som kan løse det.


Koden indtil nu:
    System.Drawing.Graphics formGraphics = null;
            System.Drawing.Pen myPen;
            formGraphics = pictureBox7.CreateGraphics();
            myPen = new System.Drawing.Pen(System.Drawing.Color.Black,1);

            formGraphics.DrawLine(myPen, 4, 4, 50, 4);             formGraphics.DrawLine(myPen, 4, 4, 4, 100);
            formGraphics.DrawLine(myPen, 50, 4, 50, 100);
            formGraphics.DrawLine(myPen, 4, 100, 27, 120);
            formGraphics.DrawLine(myPen, 50, 100, 27, 120);

            myPen.Dispose();
            formGraphics.Dispose();
Avatar billede burningice Nybegynder
19. juli 2003 - 02:05 #1
hvorfor subklasser du ikke bare button-klassen, og override OnPaint, så din figur bliver tegnet på knappen?
Avatar billede r9 Nybegynder
19. juli 2003 - 09:38 #2
det prøver jeg lige
Avatar billede r9 Nybegynder
22. juli 2003 - 08:40 #3
cyberfessor:

har du erfaring med at nedarve fra Button klassen?


Dette her virker nemlig ikke:
(Windows Control Library)

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace ctlCuteButton
{

    public class cuteButton : System.Windows.Forms.Button
    {
        private System.Windows.Forms.PictureBox pictureBox1;

        private System.ComponentModel.Container components = null;

        public cuteButton()
        {
            InitializeComponent();
        }

   
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if( components != null )
                    components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            //
            // pictureBox1
            //
            this.pictureBox1.Location = new System.Drawing.Point(17, 17);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;

        }
        #endregion

        protected override void OnPaint(PaintEventArgs pe)
        {
                base.OnPaint(pe);
   
                System.Drawing.Pen myPen;

                myPen = new System.Drawing.Pen(System.Drawing.Color.Black,1);
                pe.Graphics.DrawLine(myPen, 5, 20, 90, 20);
                pe.Graphics.DrawLine(myPen, 5, 20, 5, 90);
                pe.Graphics.DrawLine(myPen, 90, 20, 90, 90);

                pe.Graphics.DrawLine(myPen, 5,90,30,115);
                pe.Graphics.DrawLine(myPen, 90, 90, 65, 115);
                pe.Graphics.DrawLine(myPen, 30, 115, 65, 115);

        }
    }
}
Avatar billede Lasse Novice
01. august 2003 - 16:44 #4
Ja, jeg ville ogsaa lige bidrage her. Det er altid laekkert at nedarve fra button klassen, men for at kunne lave andre kontroller udover det, saa kig lige paa foelgende:

using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;

namespace Expertsys.Forms
{
    /// <summary>
    /// Summary description for InertButton.
    /// </summary>
    public class InertButton : System.Windows.Forms.Control
    {   
        protected Modes _mode = Modes.Normal;
        protected System.Drawing.Image _normalPic;
        protected bool _clickAvailable = false;

        protected enum Modes
        {
            Normal,
            Over,
            Down
        }

        public InertButton()
        {
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            if(!this.Enabled)
                System.Windows.Forms.ControlPaint.DrawImageDisabled(e.Graphics, _normalPic, 2, 2, System.Drawing.SystemColors.Control);
            else
            {
                if(_normalPic != null)
                {
                    System.Drawing.Rectangle rectsource = new System.Drawing.Rectangle(0,0, _normalPic.Width, _normalPic.Height);
                    System.Drawing.Rectangle rectdestination = new System.Drawing.Rectangle(2,2, _normalPic.Width, _normalPic.Height);
                    e.Graphics.DrawImage(_normalPic, rectdestination, rectsource, System.Drawing.GraphicsUnit.Pixel);
                }
               
                // I det naeste skal du aendre parametrene til DrawBorder funktionen
                switch(_mode)
                {
                    case Modes.Over:
                        System.Windows.Forms.ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Outset,    this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Outset, this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Outset,    this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Outset);
                        break;
                    case Modes.Down:
                        System.Windows.Forms.ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Inset,    this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Inset, this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Inset, this.BackColor, 2, System.Windows.Forms.ButtonBorderStyle.Inset);
                        break;
                }
            }
        }

        protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
        {
            if(!this.Enabled)
                return;

            _mode = Modes.Down;
            this.Refresh();
        }

        protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
        {
            if(!this.Enabled)
                return;

            if(_mode == Modes.Down || _mode == Modes.Over)
                return;
           
            _mode = Modes.Over;
            this.Refresh();
        }

        protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
        {
            if(!this.Enabled)
                return;

            if(_mode == Modes.Over)
                return;

            _mode = Modes.Over;
            _clickAvailable = true;
            this.OnClick(new System.EventArgs());
            this.Refresh();
        }

        protected override void OnClick(System.EventArgs e)
        {
            if(_clickAvailable)
            {
                _clickAvailable = false;
                this.Invalidate();
                base.OnClick(e);
            }
        }

        protected override void OnMouseLeave(System.EventArgs e)
        {
            _mode = Modes.Normal;
            this.Refresh();
        }

        public System.Drawing.Image Picture
        {
            get {return _normalPic;}
            set
            {
                _normalPic = value;
                this.Invalidate();
            }
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester