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