IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TpaintBox ou TCanvas : dessiner sur un autre "layer"


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par d�faut TpaintBox ou TCanvas : dessiner sur un autre "layer"
    Bonjour � tous,

    Je suis d�sole je pense que je vais paraitre vague, mais je vais tenter d'�tre le plus pr�cis possible.

    Voila j'utilise actuellement un composant "PaintBox" sur lequel je dessine le spectre d'un son. Cette "PaintBox" fait partie d'un player, dans lequel je peux lire le son dont j'affiche le spectre.
    J'aimerais ajouter � cet affichage du spectre une barre verticale sens�e repr�senter le "curseur" du player, et je ne vois pas r�ellement comment faire sans avoir � redessiner tout le spectre � chaque d�placement de ma "barre-curseur". Est-il possible d'ajouter un "Layer" transparent � un composant PaintBox, quelque chose qui me permettrait de dessiner une fois seulement le spectre, puis � chaque d�placement de mon curseur faire uniquement un "Clear Layer - Print cursor" ?

    Voila je vous remercie, et pardon si c'est trop confus, dites-le moi si on n'y comprend rien .

    ps : en gros pour faire simple, pour ceux qui ont d�j� utiliser audacity, je cherche � faire le m�me effet que lorsque l'on lit un son dans cette appli.

  2. #2
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Pourquoi n'utiliserais-tu pas un TChart pour dessiner ton spectre et ton curseur

    Ton spetre repr�senterait une s�rie, et ton curseur une autre.
    Il te suffirait ensuite de modifier la s�rie correspondant au curseur et ainsi tu n'aurais pas � redessiner ton spectre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par d�faut
    Malheureusement j'ai comme contrainte l'utilisation de Borland 1, ce qui r�duit s�rieusement le nombre de composants que j'ai � disposition ; TChart fait partie des composants dont je ne peux pas me servir ... : / (merci tout de m�me pour ta r�ponse )

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 190
    Par d�faut
    Bonjour,

    Il me semble que le plus simple � faire serait d'utiliser le mode de dessin Xor.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    TPaintBox *Test = new TPaintBox(this);
    Test->Canvas->Pen->Mode = pmXor;
    Tu n'auras qu'� redessiner le curseur une deuxi�me fois � la m�me position pour l'effacer, puis le dessiner � sa nouvelle position.

    Benjamin

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par d�faut
    Parfait ! c'est exactement �a ! merci beaucoup !

  6. #6
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Dommage que tu ne puisses pas utiliser TChart car cela t'aurais facilit� les choses.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par d�faut
    Ouais je sais bien mais malheureusement impossible de porter l'appli vers un builder plus r�cent, le link ne passe pas, la nouvelle version a des probl�mes de symboles non r�solus (alors que tout fonctionne bien dans la version pr�sente).

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 417
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 417
    Par d�faut
    Salut !

    Il existe aussi une autre possibilit� en jouant avec un sprite.
    Un sprite peut se composer de deux bitmaps :
    - l'un pour m�moriser l'arri�re plan sur lequel il se dessine
    - l'autre pour se repr�senter lui-m�me

    Au d�part :

    - le sprite m�morise l'arri�re plan
    - puis il se dessine

    La s�quence pour la progression est alors :

    - le sprite restaure l'arri�re plan
    - il m�morise le nouvel arri�re plan
    - puis il se dessine

    On peut imaginer d'autres syst�mes, comme par exemple � l'aide d'un pixel intelligent :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class jPixel
    {
    TPoint Pos;
    TColor Color;
    TColor BackGround;
        //Pour le positionner une première fois
        void __fastcall Init(int X, int Y, TCanvas *Canvas);
        //Pour le déplacer les fois d'après
        void __fastcall Drag(int X, int Y, TCanvas *Canvas);
    };
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    void __fastcall jSprite::Init(int X, int Y, TCanvas *Canvas)
    {
    Pos = Point(X,Y);
    BackGround = Canvas->Pixels[X][Y];
    Canvas->Pixels[X][Y] = Color; 
    }
     
    void __fastcall jSprite::Drag(int X, int Y, TCanvas *Canvas)
    {
    Canvas->Pixels[Pos.x][Pos.y] = BackGround;
    Pos = Point(X,Y);
    BackGround = Canvas->Pixels[X][Y];
    Canvas->Pixels[X][Y] = Color; 
    }
    C'est juste pour le fun (parce que �a demande � �tre fortement optimis�)!

    A plus !

Discussions similaires

  1. Dessiner sur la barre de titre d'une autre application
    Par petitprince dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 16/10/2007, 17h29
  2. R�ponses: 1
    Dernier message: 04/09/2007, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo