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 :

Probleme de transparence de Form [Langage/Algorithme]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut Probleme de transparence de Form
    Bonjours
    J'ai un petit probleme, je pose deux TImage transparent sur une Form, la Form1 a les proprietes
    AlphaBlend = false
    AlphaBlendValue = 255
    Color = clWhite
    TransparentColor = false
    TransparentColorValue = clBlack
    Le fait de donner les proprietes transparent aux TImage rend aussi la Form1 transparente et le fond d'ecran apparait lors des traces sur les TImage ce qui est tres genant, y a t'il une commande que je n'ai pas activee?
    J'ai du pour avoir un comportement satisfaisant placer une Form2 avec la propriete Color = clBlack
    Voici le code de teste
    J'utilise BCB6 et Window7
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TransparentColor = clWhite;
    Image1->Canvas->Brush->Color = clWhite;  //TransparentColor;
    Image1->Transparent = true;
    Image1->Canvas->Pen->Width = 1;
    Image1->Canvas->Pen->Color = clBlack;
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(100,100);
    Image2->Canvas->Brush->Color = clWhite;  //TransparentColor;
    Image2->Transparent = true;
    Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));
    Image2->Canvas->MoveTo(0,20);
    Image2->Canvas->LineTo(200,300);
    Form1->BringToFront();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormPaint(TObject *Sender)
    {
    Form2->Show();
    Form2->SendToBack();
    }
    //---------------------------------------------------------------------------

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 079
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 079
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TransparentColor = clWhite;
    tu es d'accord que c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->TransparentColor = clWhite;
    hors
    TransparentColor c'est un bool (boolean) qui prend clWhite comme une valeur brute $FFFFFF comme true
    Une confusion avec TransparentColorValue qui est un TColor !


    Donc form1 devient transparente parce que tu le lui dis !
    Mais devrait utiliser clBlack de TransparentColorValue défini dans la DFM
    Là, il y a peut-être un autre soucis


    Form2 Show\SendToBack utilise je crois un bug du ParentBackground de D6 sur Vista\Seven, un patch a été produit pour D7 à ce sujet
    Ce bug provoquait la disparation des TLabels, des TCheckBox et un défaut de transparence lorsque le thème XP était activé (mais tournant sur Vista)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci ShaiLeTroll
    Je viens de tester effectivement cela marche beaucoup mieux
    Voici le code corrige
    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
    16
    17
    18
    19
    20
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TColor TransparentColorValue = clWhite;
    Image1->Canvas->Brush->Color = TransparentColorValue;  //TransparentColor;
    Image1->Transparent = true;
    Image1->Canvas->Pen->Width = 1;
    Image1->Canvas->Pen->Color = clBlack;
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(100,100);
     
    Image2->Canvas->Brush->Color = TransparentColorValue;  //TransparentColor;
    Image2->Transparent = true;
    Image2->Canvas->Pen->Width = 1;
    Image2->Canvas->Pen->Color = clBlack;
    Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));
    Image2->Canvas->MoveTo(0,20);
    Image2->Canvas->LineTo(200,300);
    }

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Le probleme est resolu, pour ceux qui se demande l'utilite de TImage transparent les un sur les autres, je prepare un petit logiciel de dessin qui me donne un code et une visualisation de ce qui se dessine le tout afin de piloter une fraiseuse, chaque Timage represente un Calque, chaque calque recoit une partie du dessin final, ce qui rend beaucoup plus facile une modification

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FLASH MX2004] Probleme de transparence
    Par Sorento dans le forum Flash
    Réponses: 2
    Dernier message: 15/06/2005, 09h21
  2. probleme ds la balise form
    Par dahan dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/05/2005, 21h56
  3. Probleme de transparence ... rho encore :/
    Par Clad3 dans le forum OpenGL
    Réponses: 28
    Dernier message: 13/01/2005, 13h17
  4. probleme de transparence avec fog
    Par Daedar dans le forum OpenGL
    Réponses: 10
    Dernier message: 03/05/2004, 08h14
  5. Probleme de transparance
    Par billyboy dans le forum DirectX
    Réponses: 1
    Dernier message: 12/02/2004, 19h40

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