Bonjour a tous, je me suis cr�� un composant VCL du genre bouton rectangle avec les bords arondis.
Le bouton fonctionne sans soucis, mais mon probl�me c'est que lorsque que je le pose sur une form avec une couleur de fond on voit le contour du bouton en gris.


Y'a-t-il un moyen de passer le composant en transparent pour qu'il prenne la couleur de fond de la form ou quelque chose du genre?

voici le code de mon composant :

MyButton.h :
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
//---------------------------------------------------------------------------
 
#ifndef MyButtonH
#define MyButtonH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMyButton : public TCustomControl
{
private:
  bool FEtat; // Etat du bouton // TRUE : appuyé//false : au repos
  AnsiString FCaption; //texte a afficher sur le bouton
  Graphics::TBitmap *BtOn;
  Graphics::TBitmap *BtOff;  
  void __fastcall SetEtat(bool AEtat);
  void __fastcall SetCaption(AnsiString ACaption);
  TNotifyEvent OnClickChange;
 
protected:
  void __fastcall Paint();
  DYNAMIC void __fastcall MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
  DYNAMIC void __fastcall MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
 
public:
  __fastcall TMyButton(TComponent* Owner);
  __fastcall ~TMyButton();
 
__published:
  __property AnsiString Caption = {read=FCaption,write=SetCaption};
  __property bool Etat = {read=FEtat, write=SetEtat};
  __property TNotifyEvent OnClick = {read=OnClickChange, write=OnClickChange};
};
//---------------------------------------------------------------------------
#endif
MyButton.cpp :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//---------------------------------------------------------------------------
 
#include <vcl.h>
 
#pragma hdrstop
//resource contenant les images pour le bouton
#pragma resource "bt.res" 
#include "MyButton.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
//  ValidCtrCheck est utilisé pour vérifier que les composants créés n'ont
// aucune fonction virtuelle pure.
//
 
static inline void ValidCtrCheck(TMyButton *)
{
  new TMyButton(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyButton::TMyButton(TComponent* Owner)
  : TCustomControl(Owner)
{
  Width = 81;
  Height = 33;
  FEtat = false;
  //charge les images du bouton depuis la resource
  BtOn = new Graphics::TBitmap();
  BtOn->LoadFromResourceName((int)HInstance,"BT_ON");
  BtOff = new Graphics::TBitmap();
  BtOff->LoadFromResourceName((int)HInstance, "BT_OFF");
  BtOn->Transparent= true;
  BtOff->Transparent=true;
 
  Caption = "MyButton";
}
//---------------------------------------------------------------------------
__fastcall TMyButton::~TMyButton()
{
  delete BtOn;
  delete BtOff;
}
//---------------------------------------------------------------------------
void __fastcall TMyButton::Paint()
{
  if (FEtat == true)
    Canvas->Draw(0,0,BtOn);
  else
    Canvas->Draw(0,0,BtOff); 
 
  // écrit le texte du bouton
  TRect RText;
  RText = ClientRect;
  RText.top = 6;
  HDC hdc = GetDC(Handle);
  SetBkMode(hdc, TRANSPARENT);
  HPEN pen = CreatePen(PS_DASH,0,RGB(0,0,0));
  SelectObject(hdc, pen);
  DrawText(hdc, FCaption.c_str(), FCaption.Length(), &RText, DT_VCENTER|DT_CENTER);
}
//---------------------------------------------------------------------------
void __fastcall TMyButton::SetEtat(bool AEtat)
{
  if(FEtat!=AEtat)
  {
    FEtat = AEtat;
    if(OnClickChange!=NULL) OnClickChange(this);
    Invalidate();
  }
}
//---------------------------------------------------------------------------
void __fastcall TMyButton::SetCaption(AnsiString ACaption)
{
  if(FCaption != ACaption)
    FCaption = ACaption ;
  Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TMyButton::MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
{
  Etat = true;
}
//---------------------------------------------------------------------------
void __fastcall TMyButton::MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y)
{
  Etat = false;
}
//---------------------------------------------------------------------------
 
namespace Mybutton
{
  void __fastcall PACKAGE Register()
  {
     TComponentClass classes[1] = {__classid(TMyButton)};
     RegisterComponents("Perso", classes, 0);
  }
}

merci d'avance