Bonjour,
J'ai utilisé l'exemple de l'Edit cadrant ses données à droite puisé dans la FAQ Delphi (Interface, Composants, Divers 4.4.2).
J'ai modifié ce modèle pour une utilisation particulière et l'ai installé en nouveau composant :
Lorsque le composant détient le focus, je fais cadrer ses données à gauche, à droite lorsqu'il ne le détient plus.
Le mécanisme fonctionne bien.., seulement le curseur de l'Edit disparaît complétement. L'instruction " SendMessage(NewEdit.Handle, EM_SETSEL, Value1, Value2) " ne sélectionne aucun caractère de l'Edit.
Voici un extrait de code du nouveau composant :
Après recherches, je n'ai pas trouvé la solution, aussi si un membre éclairé a la clé...
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 Type TNewEdit = class(TEdit) private ... FTextAlign: TAlignment; FOnEnter: TNotifyEvent; FOnExit: TNotifyEvent; procedure SetTextAlign(Value: TAlignment); protected procedure DoEnter;override; procedure DoExit;override; public constructor Create(AOwner: TComponent); override; published property TextAlignment: TAlignment read FTextAlign write SetTextAlign; end; implementation procedure TNewEdit.CreateParams(var Params: TCreateParams); const Alignments: array[TAlignment] of Word = (ES_LEFT, ES_RIGHT, ES_CENTER); begin inherited CreateParams(Params); Params.Style := Params.Style or Alignments[TextAlignment]; end; procedure TNewEdit.SetTextAlign(Value: TAlignment); begin if FTextAlign <>Value then Begin FTextAlign := Value; RecreateWnd; End; end; procedure TNewEdit.DoEnter; // déclarée override begin inherited DoEnter; BiDiMode:= bdLeftToRight; TextAlignment:= taLeftJustify; end; procedure TNewEdit.DoExit; // déclarée override begin inherited DoExit; if not (csFocusing in ControlState) then begin BiDiMode:= bdRightToLeft; TextAlignment:= taRightJustify; end; end; ... end.
Merci.
Partager