Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
57 - UTILISATION D'UN CARET PERSONNALISÉ

PRÉSENTATION : Création d'un caret pour les contrôles descedant de TCustomEdit
ZIP : Téléchargez le zip APERÇUS :

NOTES : Le Caret est le petit curseur clignotant situé dans les composants EDIT de windows. Ce curseur induque la position d'insertions des caractères saisis au clavier.
Il est possible de modifier ce curseur à l'aide de la méthode décrite ci-dessous.

CODE :
Unit Unit1;
//
// Sujet : Modification du Caret
//
// Par Nono40 : http://nono40.developpez.com   http://nono40.fr.st
//              mailTo:nono40@fr.st
//
// Le 17/05/2003
//

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

Const
  // Message personnalisé pour la mise à jour du carret
  CAR_MESSAGE     = WM_USER+1;

  // Consante de définition des types de Caret possibles
  CAR_CARETNOIR   = 1;
  CAR_CARETGRIS   = 2;
  CAR_CARETBITMAP = 3;

Type
  TForm1 = Class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Image1: TImage;
    Label4: TLabel;
    Image2: TImage;
    Label5: TLabel;
    Procedure CarMessage(Var Msg: TMessage); message CAR_MESSAGE;
    Procedure Edit1Enter(Sender: TObject);
    Procedure Edit2Enter(Sender: TObject);
    Procedure Edit3Enter(Sender: TObject);
    Procedure Edit1Exit(Sender: TObject);
    Procedure FormCreate(Sender: TObject);
  Private
    { Déclarations privées }
  Public
    { Déclarations publiques }
  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}

// Le problème est que dans OnEnter on ne peut pas définir le Caret car
// le focus n'est pas encore sur le composant. Pour éviter d'avoir à dériver
// un composant du TEdit afin de détourner le message WM_SETFOCUS, on place
// un message personnalisé dans la file d'attente des message. Le message
// sera alors exécuté après les autres, donc à un moment ou le contrôle aura
// le focus.
Procedure TForm1.Edit1Enter(Sender: TObject);
Begin
  // Demande d'un Caret Noir
  PostMessage(Handle,CAR_MESSAGE,TWinControl(Sender).Handle,CAR_CARETNOIR);
End;

Procedure TForm1.Edit2Enter(Sender: TObject);
Begin
  // Demande d'un Caret Gris
  PostMessage(Handle,CAR_MESSAGE,TWinControl(Sender).Handle,CAR_CARETGRIS);
End;

Procedure TForm1.Edit3Enter(Sender: TObject);
Begin
  // Demande d'un Caret défini à partir d'un bitmap
  PostMessage(Handle,CAR_MESSAGE,TWinControl(Sender).Handle,CAR_CARETBITMAP);
End;

// A la sortie du contrôle, le caret doit être détruit.
Procedure TForm1.Edit1Exit(Sender: TObject);
Begin
  DestroyCaret;
End;

// Procédure de réponse aux messages personnalisés
Procedure TForm1.CarMessage(Var Msg: TMessage);
Begin
  Case Msg.LParam Of
                      // Création d'un caret noir de 10x20
    CAR_CARETNOIR   : CreateCaret(Msg.WParam,0,10,20);
                      // Création d'un caret gris de 10x20
    CAR_CARETGRIS   : CreateCaret(Msg.WParam,1,10,20);
                      // Création d'un caret basé sur un bitmap
                      // ( ici le bitmap est le contenu de Image2 )
    CAR_CARETBITMAP : CreateCaret(Msg.WParam,Image2.Picture.Bitmap.Handle,0,0);
  End;
  // affichage du message ainsi créé.
  ShowCaret(Msg.WParam);
End;

Procedure TForm1.FormCreate(Sender: TObject);
Var i,j:Integer;
Begin
  // Petite boucle pour inverser l'image contenue dans Image1
  // en effet Windows utilise un crayon XOR pour le dessin.
  // le fait d'inverser la couleur avant, permet d'obtenir un caret
  // de la même couleur que l'image sur un fond blanc.
  Image2.Picture.Assign(Image1.Picture);
  For i:=0 To Image2.Width-1 Do
    For j:=0 To Image2.Height-1 Do
      Image2.Canvas.Pixels[i,j]:=Image2.Canvas.Pixels[i,j]Xor $FFFFFF;
End;

end.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -