Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Control et Transparent [ Archives / Au secours ] (Ordinastie)

mardi 16 août 2005 à 05:04:13 | Control et Transparent

Ordinastie

Salut.

J'ai une carte déssinée dans un pictureBox et j'ai besoin d'ajouter des marqueurs à differents endroits sur cette carte. J'ai plus ou moins réussi à faire ce que je cherchais en faisant hériter mes marqueurs de System.Windows.Forms.Control et en onverridant la méthode OnPaint de Control.
Le problème, c'est que mes marqueurs seraient plutot rond et que j'aimerais par conséquent que le fond du controle soit plutot transparent.
Sachant que le BackColor =  Color.Transparent génère une execption, si quelqu'un à un idée pour remédier à ce problème...

Merci d'avance,
Ordinastie.


mardi 16 août 2005 à 09:51:03 | Re : Control et Transparent

sebmafate

Membre Club Administrateur CodeS-SourceS
ajoute dans le constructeur de ton contrôle :

this.SetStyle(ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);

comme ca tu pourras mettre ton Background à transparent.


Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate

mardi 16 août 2005 à 15:59:33 | Re : Control et Transparent

Lutinore

Administrateur CodeS-SourceS

Il me semble que dériver de UserControl c'est mieux que de dériver de Control. Pour le double buffer il faudrait aussi activer le style "AllPaintingInWmPaint", mais du coup je ne sais pas quel comportement va avoir le style "SupportsTransparentBackColor", finallement c'est peut être plus simple si tu as plusieurs marqueurs de les dessiner directement sur la carte.


mardi 16 août 2005 à 16:34:15 | Re : Control et Transparent

Ordinastie

@Sebmafate:
Effectivement, maintenant il accepte la couleur transparente, mais il dessine pas pour autant ce qui est censé etre derriere le controle, a savoir la carte. Je sais pas ce qu'il dessine, mais j'ai l'impression que le controle ne le sait pas lui même

@Lutinore
Ca ete ma premiere solution, qui marche effectivement de facon niquel, mais j'ai besoin de la gestion des evenements de la souris pour les marqueurs. (Click, MouseHover, etc...). Y'a t-il une classe dont je pourrais dériver pour implémenter les "Listeners" et les events?

Merci pour vos réponses,
Ordinastie

mardi 16 août 2005 à 16:36:36 | Re : Control et Transparent

Ordinastie

Petite rectification: le transparent marche en fait, mais si je pouvais implémenter la deuxième solution, ca serait plus efficace =)

mardi 16 août 2005 à 17:00:55 | Re : Control et Transparent

Lutinore

Administrateur CodeS-SourceS
Y'a bien IMessageFilter, mais c'est un peu lourd. Ce que tu veux faire c'est un peu comme un sprite dans un jeu , et tester si la souris clique dessus !?

mardi 16 août 2005 à 17:23:16 | Re : Control et Transparent

Ordinastie

Oui, voila, il faut que mes marqueurs réagissent à la souris, à son click et à son survol. L'ideal serait qu'il puisse aussi réagir aux touches du clavier.

C'est pour ca que j'avais essayé de faire dériver de Control au début car il y avait de base tous les events. Mais je prefererai faire ma propre implémentation, déjà pour apprendre, mais aussi parce que je pense que ca serait plus propre

J'ai commencé par créer mon event avec mon delegate, mais maintenant, il faudrait qu'il soit appelé quand il faut, cad au survol de la souris ou au click.

Ordinastie.

PS: Je viens de voir ton lien, effectivement, ca m'a l'air un peu lourd . Mais je trouve ca étonant qu'il n'y ait pas d'interface de listeners, un peu comme en Java "MouseEventListener" ou "EventListener" (de mémoire). C'était bien pratique quand même. Enfin, je continue de chercher

mardi 16 août 2005 à 18:22:11 | Re : Control et Transparent

Lutinore

Administrateur CodeS-SourceS
Peut être que ca existe !? Je vais regarder, ca m'intéresse aussi..

mardi 16 août 2005 à 19:26:53 | Re : Control et Transparent

Lutinore

Administrateur CodeS-SourceS

Je me suis amusé à utiliser des marqueurs comme si c'etait des sprites:



namespace HitTest
{
    public class Mark
    {
        private Bitmap bmp;
        private Color mask;
        private Rectangle bounds;

        public Rectangle Bounds { get { return bounds; } }

        public Mark( Bitmap bmp, Rectangle bounds )
        {
            this.bmp = bmp;
            this.bounds = bounds;
            this.mask = bmp.GetPixel( 0, 0 );
        }

        public void Draw( Graphics g )
        {
            if ( bmp != null )
            {
                g.DrawImage( bmp, bounds ); // Add try/catch.
            }
        }

        public bool Hit( int x, int y )
        {
            if ( bounds.Contains( x, y ) )
            {
                x = x - bounds.X;
                y = y - bounds.Y;
               
                if ( bmp.GetPixel( x, y ) != mask )
                {
                    return true;
                }
            }
           
            return false;
        }
    }

    public class MainForm : Form
    {
        private Bitmap bmp;
        private ArrayList marks;

        public MainForm( ) : base( )
        {
            this.Text = "HitTest";
            this.SetStyle( ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true );
            this.Visible = true;

            bmp = new Bitmap( "mark.bmp" ); // Add try/catch
            bmp.MakeTransparent( bmp.GetPixel( 0, 0 ) );

            marks = new ArrayList( );
            marks.Add( new Mark( bmp, new Rectangle( 0, 0, 48, 48 ) ) );
            marks.Add( new Mark( bmp, new Rectangle( 100, 100, 48, 48 ) ) );
        }

        protected override void OnMouseDown( MouseEventArgs e )
        {
            //base.OnMouseDown( e );

            if ( e.Button == MouseButtons.Left )
            {
                foreach( Mark m in marks )
                {
                    if ( m.Hit( e.X, e.Y ) )
                    {
                        MessageBox.Show( "Hit !" );
                    }
                }
            }
        }

        protected override void OnPaint( PaintEventArgs e )
        {
            //base.OnPaint( e );

            Graphics g = e.Graphics;

            foreach( Mark m in marks )
            {
                m.Draw( g );
            }
        }

        [ STAThread ]
        private static void Main( )
        {
            Application.EnableVisualStyles( );
            Application.Run( new MainForm( ) );
        }
    }
}

Par exemple si le marqueur ressemble au drapeau japonais, càd détouré avec une couleur unique et un rond au centre, c'est seulement en cliquant sur le rond que le message "Hit !" apparaît, si c'est pas ce que tu veux faire c'est pas grave, ca servira à d'autres, me suis amusé : )


mercredi 17 août 2005 à 00:27:11 | Re : Control et Transparent

Ordinastie

C'est interessant, mais non, c'est pas vraiment ce que je cherche :p
Ce que je cherche de quoi la classe Mark (dans ton code) doit hériter pour pouvoir implémenter les envent MouseHover/MouseDown etc...
Parce que si je crée un event perso avec un delegate et tout, il n'est pas déclenché par la souris, faut le declencher manuellement. Et je sais pas trop comment faire.

Je pourrais me servir des evenements de la map (pictureBox) et tester si c'est sur un marqueurs, mais je preferais le faire directement a partir du marqueur.

En tout cas, merci pour tes recherches.
Ordinastie



1 2

Cette discussion est classé dans : problème, control, carte, transparent, marqueurs


Répondre à ce message

Sujets en rapport avec ce message

problème form transparent [ par bouzazi ] Salut tout le monde   je suis entrain de développé une application MDI avec visual studio 2005 avec c#. J’aimerai qu'une de mes form soit transparent Hériter de Control.ControlCollection [ par cpetitjean ] Bonjour, Je suis entrain de développer un composant qui a une propriété qui obtient une collection d'objets.J'utilise une classe qui hérite de System. Problème de propriété d'un web control [ par tof.p ] Bonjour à tous,G créé un composant ASP.Net en c#, il hérite de TextBox. G créé une propriété dans ce composant. Pas de problème, le composant fonction Thread et control [ par RMI ] Bonjour, Voila mon problème: J'ai une form avec un tabcontrol Les 2 premières tabpages sont rempli dans le load du winform la 3ème contenant un treev Probleme d'affichage d'un user control [ par taulard ] Bonjour, Premièrement voici le lien de ma source qui me pose un problème : http://regis.10gbfreehost.com/source/Boutonnerie.zip Le problème que j Control et Mouse [ par Bidou ] Bonjour,Je suis entrain de faire un Control, appelons-le "x" (qui dérive de Usercontrol) qui devra faire certaines actions lorsque la souris est au-de Problème de chaine vide [ par emmanuel9 ] Bonjour à tous, Le problème vient du faite que j'ai un textBox et je voudrais detecter si ce textbox contient une chaine vide. J'ai donc fait : if (mo Problème d'instance [ par emmanuel9 ] Bonjour à tous, J'ai un problème avec les instances, j'ai Form1 et dedans je fais Personne a = new Personne() ; a.set_Prenom("jean") ; Ensuite je pass Problème de déclaration de Form [ par shoka ] Voila mon problème, qui je crois est tout simple :J'ai une MainForm qui appelle une Form1, en se passant en paramètre. Form1 f1 = new Form1(this);Jusq Problème avec Microsoft.VisualBasic.Compability [ par lagoelle ] Bonjour et bonne année à tous, J'ai créé une application chez moi, et lorsque je copie l'exe et les dll sur un autre poste (au boulot), j'ai ce messa


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.