KrzAramis Help Me | Bonjour a tous,
Je suis en train de developper une application qui se sert d'un TEdit
pour donner un nom a un fichier. J aimerai autant que faire ce peux minimiser
l'apparition de characteres indesirables du style:
& ~ ' { ( [ - | ` _ \ )]
etc.
J ai donc programmer sur l'evenement on Key press de mon Tedit le code:
Code :
- procedure TForm_Main.edit01KeyPress(Sender: TObject; var Key: Char);
- var
- i : integer;
- s : string;
- sAncientText : string; //Text prior to Key press
- begin
- // Paste
- if (key = ^V) then
- begin
- try
- sAncientText := Edit01.Text;
- s := clipboard.AsText;
- for i := 0 to Length(s) do begin
- if (not (s in ['0'..'9','A'..'Z',' ','a'..'z','é','è','ç','à','ù']))
- then
- s[i] := #0;
- end;
- if sAncientText <> '' then begin
- for i := 0 to Length(sAncientText) do begin
- if (not (sAncientText[i] in ['0'..'9','A'..'Z',' ','a'..'z','é','è','ç','à','ù']))
- then
- sAncientText[i] := #0;
- end; //for
- end;
- with Edit01 do begin
- AutoSelect := True;
- Text := sAncientText + s;
- AutoSelect := False;
- end;
- except
- on e: exception do
- Key := #0;
- end;
- end
- else if (not (Key in ['0'..'9','A'..'Z',' ','a'..'z','é','è','ç','à','ù',
- Chr(VK_BACK),Chr(VK_DELETE),^C,^X])) then
- Key := #0;
- end;
|
et sur l évenement KeyDown
Code :
- procedure TForm_Main.Edit01KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- var i : integer;
- s : string;
- sAncientText : string; //Text prior to Key down
- begin
- //Avoid paste via contexual menu or by shift Ins (undetected by KeyPress)
- if (key = VK_INSERT) and (shift = [ssShift]) then
- begin
- try
- sAncientText := Edit01.Text;
- s := clipboard.AsText;
- for i := 0 to Length(s) do begin
- if (not (s[i] in ['0'..'9','A'..'Z',' ','a'..'z','é','è','ç','à','ù']))
- then
- s[i] := #0;
- end;
- with Edit01 do begin
- AutoSelect := True;
- Text := sAncientText + s;
- AutoSelect := False;
- end;
- except
- on e: exception do
- Key := 0;
- end;
- end;
- end;
|
Que se passe t il ? ben quand l'utilisateur tape au clavier ca marche le hic vient du copier/coller
en effet lors du copier/coller le texte du presse papier est systematiquement ajouter au debut du TEdit:
Exemple: soit Ancient text: "Bonjour"
press papier: "a tous <> %*µ"
supposons que le curseur soit a la fin de [i]bonjour lors de l'insertion cela donne
TEdit.TExt := 'a tous <> %*µBonjour';
Hors en mode pas a pas il montre que la variable 's' contient des #0 a la place des characteres
que je ne veux pas avant de l'ajouter a la propriete text du TEDit.
Ma premiere question est donc:
Comment faire pour que lors du collage le text s'ajoute à l'endroit indiquer par le curseur
et comment faire en sorte que le texte collé soit exempt de tous characteres indesirable ??
Etant donne la situation avant que le fichier soit généré je verifie une derniere fois aue tout est
en ordre et la HORREUR . Voici le code qui test si le TEdit est exempt de characteres invalide:
Code :
- procedure TForm_Main.ActAddExecute(Sender: TObject);
- var s : string;
- WrongCharacter : boolean;
- isEmpty : boolean;
- i : integer;
- begin
- WrongCharacter := False;
- isEmpty := False;
- [...]
- if Ed_RName.Text = '' then begin
- MessageDlg(Err_Msg_RNameMiss, mtWarning, [mbOK],0);
- //The aim is to place the pointer in the Edit box
- Ed_RName.SelStart := 0; //seems to work
- Exit;
- end
- else begin //the Edit box is not empty, verify if unauthorised characters are present
- { TODO -oAramis -cString Management :
- The First character of the Edit Box is always wrong impossible to test
- the procedure }
- s := Edit01.Text;
- for i := 0 to Length(s) do begin
- if (not (s in ['0'..'9','A'..'Z',' ','a'..'z','é','è','ç','à','ù']))
- then begin
- ShowMessage(s[i]);
- WrongCharacter := True;
- end;
- end;// for
- end; // else
- if WrongCharacter then begin
- MessageDlg(Err_Msg_WrongChar, mtWarning, [mbOK], 0);
- Edit01.SelStart := 0;
- Exit;
- end;
|
Si i:= 0 le premier character quel qu il soit donne tjrs WrongChar = True par contre
si je modifie la boucle pour la faire commencer à 1 ca marche sauf que si le premier character est
mauvais je suis mal
D ou ma 2nd Question:
[i]Pourquoi qd i est égal à zero le code donne systematiquement WrongChar = True ,
Comment pallier a ce probleme?
Merci d'avance à toutes et à tous.
Aramis @->-- Message édité par KrzAramis le 08-06-2003 à 16:10:58 ---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
|