 |
|
 |
|
 |
57 - UTILISATION D'UN CARET PERSONNALISÉ
|
|
|
|
PRÉSENTATION :
Création d'un caret pour les contrôles descedant de TCustomEdit
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 oeuvre intellectuelle protégée par les droits d'auteurs. 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'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts.
Cette page est déposée à la
SACD.
|