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

Composants VCL Delphi Discussion :

CheckBox in Shape ( modifié en checkBox in Panel )


Sujet :

Composants VCL Delphi

  1. #41
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Tu utilises manifestement des composants particuliers pour la gestion des thèmes. Je me demande si c'est pas ça ton problème, parce que chez moi, aucun soucis ! (Ce qui expliquerais aussi pourquoi au design et pas au runtime)

    J'essayerais temporairement de les supprimer.
    Oui, Oui oui et encore oui...

    Tu dois avoir une put** de boule de cristal....

    J'ai remplacer mon TcheckBox par un TsCheckBox faisant effectivement parti de mon thèmes spécifiques et cela fonctionne parfaitement.

    Merci.

    PS : sa veux dire quoi ce message quand je construit mon compo
    [DCC Conseil] PanelBoxRu.pas(27): H2365 La méthode TPanelBoxRu.invalidate redéfinie devrait avoir la même casse que l'ancêtre TWinControl.Invalidate
    Cela m'empeche pas de compiler mais bon on ne sait jamais.

  2. #42
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut
    Pas d'info disponible dans les aides d'embarcadero, donc probablement que le message signifie simplement qu'il faut mettre un i majuscule à Invalidate !!

    D'ailleurs ce message, est un conseil : donc ça n'empêche pas de compiler !!

  3. #43
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par archonte Voir le message
    ....mettre un i majuscule à Invalidate !!
    Mort de rire, quel nulos je fais sur le coup là... PTR, j'ai pas du tout pensé à la casse "des caractères".

    Comme dirait Brice de nice... cassééééééééééé

    Merci archonte

  4. #44
    Membre éclairé Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Par défaut
    Une autre piste, moins "bricolage": puisque tu es dans la conception d'un composant, autant y aller jusqu'au bout.
    Tu créer un TBitmap au lieux d'un TCheckBox, avec un logiciel de dessin tu dessines 2 checkboxs, une en état Check, et l'autre en Uncheck.

    Tu surcharges la procedure OnMouseDown, pour intercepter le click sur le bitmap, suivant sa position:
    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
     
    procedure TMyPanel.MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: integer);
    var
      ARect: TRect;
    begin
      inherited;
      ARect := Rect(4, 0, FPicture.Width, FPicture.Height);  // le cadre de mon TBitmap, ou TPicture...
      if (PtInRect(ARect, Point(X, Y))) then
      begin
      // ici tu mets le traitement du changement d'état de la CheckBox
        FChecked := not FChecked;  // une propriété Boolean à redéfinir
        Invalidate;  // on redessine, suivant l'état de FChecked, pour mettre la bonne Bitmap
      end
        else
          if Assigned(OnMouseDown) then OnMouseDown(Self, Button, Shift, X, Y);
    end;
    Voilà... C'est juste une proposition ....

  5. #45
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Salut,

    Citation Envoyé par petitprince Voir le message
    Une autre piste, moins "bricolage":
    Moins bricolage ????

    teste la version finale :

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    unit PanelBoxRu;
     
    interface
     
    uses
      Windows, SysUtils, Classes, Controls, StdCtrls ,ExtCtrls, Graphics, Math, Grids, StrUtils, dialogs, Messages;
     
    type
      TPanelBoxRu = class(TCustomPanel)
      private
        { Déclarations }
        fStartColor    : Tcolor;
        fEndColor      : Tcolor;
        fCheckBox      : TCheckBox;
        procedure SetCheckBox(value: TCheckBox);
        procedure SetStartColor(value: TColor);
        procedure SetEndColor(value: Tcolor);
      protected
        { Déclarations protégées }
        procedure Paint; override;
        procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
     
      public
        { Déclarations publiques }
        constructor Create(AOwner : TComponent); override;
        destructor Destroy; override;
        procedure invalidate; override;
      published
        { Déclarations publiées }
        property Caption;
        property StartColor    : Tcolor read fStartColor write SetStartColor;
        property EndColor      : Tcolor read fEndColor write SetEndColor;
        property CheckBox      : TCheckBox read fCheckBox write SetCheckBox;
     
        property Align;
        property Alignment;
        property Anchors;
        property AutoSize;
        property BevelEdges;
        property BevelInner;
        property BevelKind;
        property BevelOuter;
        property BevelWidth;
        property BiDiMode;
        property BorderWidth;
        property BorderStyle;
        property Color;
        property Constraints;
        property Ctl3D;
        property UseDockManager default True;
        property DockSite;
        property DoubleBuffered;
        property DragCursor;
        property DragKind;
        property DragMode;
        property Enabled;
        property FullRepaint;
        property Font;
        property Locked;
        property Padding;
        property ParentBiDiMode;
        property ParentBackground;
        property ParentColor;
        property ParentCtl3D;
        property ParentDoubleBuffered;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ShowCaption;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property VerticalAlignment;
        property Visible;
        property OnAlignInsertBefore;
        property OnAlignPosition;
        property OnCanResize;
        property OnClick;
        property OnConstrainedResize;
        property OnContextPopup;
        property OnDockDrop;
        property OnDockOver;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDock;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnGetSiteInfo;
        property OnMouseActivate;
        property OnMouseDown;
        property OnMouseEnter;
        property OnMouseLeave;
        property OnMouseMove;
        property OnMouseUp;
        property OnResize;
        property OnStartDock;
        property OnStartDrag;
        property OnUnDock;
     
      end;
     
    procedure Register;
     
    implementation
     
     
    constructor TPanelBoxRu.Create(AOwner : TComponent);
    begin
      inherited Create(AOwner);
      Parent := AOwner as TWinControl;
      fStartColor := clCream;
      fEndColor   := clBtnFace;
      fCheckBox   := TCheckBox.Create(Self);
      With fcheckBox do
      begin
        Parent   := Self;
        Caption := 'Salut les loups c''est Buzz';
        Left      := 2;
        Top      := 2;
      end;
    end;
     
     
    destructor TPanelBoxRu.Destroy;
    begin
      fCheckBox.Free;
      inherited Destroy;
    end;
     
    procedure TPanelBoxRu.invalidate;
    var
      i: Integer;
    begin
      inherited InValidate;
        for i := 0 to ControlCount - 1 do
          Controls[i].Invalidate;
    end;
     
    procedure TPanelBoxRu.SetCheckBox(value: TCheckBox);
    begin
      fCheckBox.assign(value);
    end;
     
    procedure TPanelBoxRu.SetEndColor(value: Tcolor);
    begin
      if Value <> fEndColor then
      begin
        fEndColor := Value;
        Invalidate;
      end;
    end;
     
    procedure TPanelBoxRu.SetStartColor(value: TColor);
    begin
      if Value <> fStartColor then
      begin
        fStartColor := Value;
        Invalidate;
      end;
    end;
     
    procedure TPanelBoxRu.Paint;
      procedure Degrader;
      var
        Vertex    :array[0..1] of TTriVertex;
        Rectangle :TGradientRect;
     
      begin
        Vertex[0].X     := 0;
        Vertex[0].Y     := 0;
        Vertex[0].Red   := GetRValue(StartColor) *$100;
        Vertex[0].Green := GetGValue(StartColor) *$100;
        Vertex[0].Blue  := GetBValue(StartColor) *$100;
     
        Vertex[1].X     := Width ;
        Vertex[1].Y     := Height;
        Vertex[1].Red   := GetRValue(EndColor) *$100;
        Vertex[1].Green := GetGValue(EndColor) *$100;
        Vertex[1].Blue  := GetBValue(EndColor) *$100;
     
        Rectangle.UpperLeft  := 0;
        Rectangle.LowerRight := 1;
     
        GradientFill(Canvas.Handle, @Vertex, 2, @Rectangle, 1, GRADIENT_FILL_RECT_V);
      end;
    begin
      inherited Paint;
      Degrader;
    end;
     
    procedure Register;
    begin
      RegisterComponents('RuCompos', [TPanelBoxRu]);
    end;
     
    end.

  6. #46
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut Buzz

    Un petit détail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      property StartColor: TColor read fStartColor write SetStartColor default clCream;
      property EndColor: TColor read fEndColor write SetEndColor default clBtnFace;
    Ajoute un default à tes propriétés. Tu verras la petite différence dans l'inspecteur d'objet.

    @+

  7. #47
    Membre éclairé Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Par défaut
    Merci mais j'ai déjà ce genre de composant...

    Quand je dis moins "bricolage", et j'ai bien mis entre guillemets, ça veut dire que pour ma part, faire un composant container avec sur lui-même d'autres contrôles est source de conflits (niveau parent/enfant, gestion des événements, ...). Pour ce genre de chose, je préfère utiliser un TFrame... Maintenant quitte à faire un composant, autant le dessiner de A à Z jusqu'au bout... Encore une fois c'est mon point de vue, celà n'enlève rien à la qualité de ton composant que je ne remet pas en question... Comme dit plus haut, ce n'était qu'une proposition...

  8. #48
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    @Cl@udius : Je ne vois aucun changement dans l'inspecteur d'objet ? mais comme dans Create ils sont déjà initialisé cela ne joue pas !!!

    @petitprince : T'inquiète ma remarque était en tout amitié. PAr contre je voix vraiment pas l'intérêt de s'amuser à dessiner une pseudo case cocher/non cocher pour ensuite l'intégrer en image.... La tu te prends vachement la tête... Et puis je ne vois pas bien quel contrainte on pourrais avoir sur les évènements du présent compos.

    @+

  9. #49
    Membre éclairé Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Par défaut
    C'est comme je le dis... chacun ces méthodes.... Et j'aurai même poussé le bouchon plus loin, j'aurai redessiné les cellules de la StringGrid ...
    @+

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Differentes Checkbox? Checkbox qui se modifient?
    Par kataiyai dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/01/2012, 10h42
  2. [MySQL] utilisation d'un checkbox pour supprimé modifier ou autre action
    Par Whinespirit dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/06/2010, 00h36
  3. Savoir si une checkbox a été modifier
    Par MooGle dans le forum Struts 1
    Réponses: 5
    Dernier message: 25/05/2007, 17h33
  4. Modifier les checkbox
    Par HwRZxLc4 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 25/11/2006, 19h12
  5. Réponses: 14
    Dernier message: 24/10/2006, 07h51

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