TEdit modifié

yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 - 29 janv. 2004 à 02:38
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 - 3 févr. 2004 à 20:26
Bonjour,

Je suis entrain de créer un composant hérité du TEdit. ce composant doit gérer uniquement des chiffres avec quelques fonctionnalités (par exemple : mettre des unités). Dès que j'aurai fini, je le mettrai sur le site si il n'existe pas encore.

J'ai lu la documentation Borland sur le guide du concepteur de composants. J'ai compris l'essentiel mais je ne sais toujours pas comment faire...

Ce que je veux faire c'est surchargé les événements OnKeyDowm, OnKeyPress et OnKeyUp.

La documentation (page 4-7) déconseille d'utiliser les messages Windows quand l'evenement exite déjà, c'est mon cas. J'ai quand meme essayé comme ca et ca marche.

La documention (page 4-6) précaunise de changer la gestion des évéments standarts (controles fenêtrés). Et ca, je n'y arrive pas. Pouvez vous me dire comment on fait ca ?

Merci

Guide du concepteur de composants

2 réponses

yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
3 févr. 2004 à 19:06
unit CustomEdit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TNumEdit = class(TCustomEdit)
private

public
{ Public declarations }
procedure KeyPress(var Key: Char); override;
Constructor Create (AOwner : TComponent); override;
published
{ Published declarations }
property Anchors;
property AutoSelect;
property AutoSize;
property BiDiMode;
property BorderStyle;
property CharCase;
property Color;
property Constraints;
property Ctl3D;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property ImeMode;
property ImeName;
property MaxLength;
property OEMConvert;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PasswordChar;
property PopupMenu;
property ReadOnly;
property ShowHint;
property TabOrder;
property TabStop;
property Text;
property Visible;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;

procedure Register;

implementation

Constructor TNumEdit.Create (AOwner : TComponent);
begin
Inherited Create(AOwner);
Text:='MonEdit';
end;

procedure TNumEdit.KeyPress(var Key: Char);
begin
Inherited KeyPress(Key);

if not (Key in ['0'..'9', '-', DecimalSeparator,#8]) then
begin
key:=#0;
beep;
end else if ((Key DecimalSeparator) or (key '-')) and (Pos(Key, Text) > 0) then
begin
If Key = DecimalSeparator then
begin
SelStart := Pos(Key, Text);
SelLength := Length(Text);
end;
key:=#0;
end else
if (Key = '-') and (Selstart <> 0) then
begin
key:=#0;
beep;
end;
end;

procedure Register;
begin
RegisterComponents('xxx', [TNumEdit]);
end;
end.

donc le principe est d'utiliser Override pour indiquer qu'on surcharge la méthode, ensuite tout dépend de la gestion que l'événement doit faire ,ici on laisse les événements de la classe de base Inherited KeyPress(Key);
et ensuite on gère ce qui doit être gérer ...

on pourrait donc reprendre toutes les procédures ,hériter la classe de base ,puis faire autre chose dans chacun des événements ,c'est ce qui est conseillé ...

nb:pour tester l'unité doit-être ajouter dans les uses du projet et l'objet doit-être créé dynamiquement ,ça évite de réinstaller le composant à chaque modifications...

var
Form1: TForm1;
Edit2:TNumEdit;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit2:= TNumEdit.Create(form1);
Edit2.Height:=22;
Edit2.Width:=133;
Edit2.Parent:=form1;
Edit2.Visible:=true;
Edit2.Show;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Edit2.Free;
end;

yve
0
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 1
3 févr. 2004 à 20:26
Merci, c'est complet...
0
Rejoignez-nous