Bonjour à tous,
Ma question est simple : comment savoir si le texte saisi dans un TEdit est apparent à l’écran ? De cette manière je peux gérer la taille de la fonte et la taille du TEdit.
Bonjour à tous,
Ma question est simple : comment savoir si le texte saisi dans un TEdit est apparent à l’écran ? De cette manière je peux gérer la taille de la fonte et la taille du TEdit.
Bonjour,
est ce que tu peux préciser ta question ? quand on tape du texte dans un TEdit "standard", il est visible à l'écran sauf si PasswordChar n'a pas la valeur caractère nulle (#0)
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Mon site : http://lapaille.byethost24.com/index.htm
Je pense que la question est de savoir si le texte saisi dépasse ou non en fonction de la largeur du TEdit.
On doit pouvoir faire ça en utilisant un canvas :
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 myCanvas : TControlCanvas; begin myCanvas := TControlCanvas.Create; try myCanvas.Control := Edit1; myCanvas.Font.Assign(Edit1.Font); // bien penser à utiliser la font du TEdit if myCanvas.TextWidth(Edit1.Text) > Edit1.Width then ShowMessage('Trop long'); finally FreeAndNil(myCanvas); end;
Et comme le fait Hermite, pour bloquer la saisie en longueur tu peux mettre ce code dans le OnKeyPress :
Sinon au lieu de Key := 0 tu peux agrandir le TEdit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); Var myCanvas : TControlCanvas; begin if (Key = Chr(vk_Back)) then Exit ; // pour pouvoir faire marche arrière ! myCanvas := TControlCanvas.Create; try myCanvas.Control := Edit2; myCanvas.Font.Assign(Edit2.Font); if myCanvas.TextWidth(Edit2.Text) > (Edit2.ClientWidth - myCanvas.TextWidth('a')) then // pour garder un peu de marge Key := #0 ; finally FreeAndNil(myCanvas); end; end;
Il existe aussi la propriété MaxLength que l'on utilise souvent pour limiter la saisie en nombre de caractères ...
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Bonjour,
Je vous remercie beaucoup pour vos réponses. Cependant j'ai oublié de préciser que je voudrais contrôler l'affichage dans un "Tdbedit", si les données ne sont pas complètement affichées je réduit la font mais le problème que Tdbedit ne contient pas les evenements "Onkeypress, onkeychange".
Bonjour,
sous D7, mon TDBEdit comporte un OnKeyPress et un OnChange ??
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
je voulais dire "Tdbtext". Je m'excuse pour ces confusions je suis un peu grippé.
Bonjour,
je n'ai pas de logiciel de BD sous la main, mais tu peux essayer de mettre ceci dans le OnDataChange :
Sans garantie du gouvernement !
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 procedure TForm1.Button1Click(Sender: TObject); var Buffer: PChar; Size: Byte; Texte : String ; myCanvas : TControlCanvas; begin // Récupération du texte du TDBText Size := DBText1.GetTextLen; Inc(Size); GetMem(Buffer, Size); DBText1.GetTextBuf(Buffer,Size); Texte := StrPas(Buffer); FreeMem(Buffer, Size); // Traitement de la dimension du texte myCanvas := TControlCanvas.Create; try myCanvas.Control := DBText1 ; myCanvas.Font.Assign(DBText1.Font); if myCanvas.TextWidth(Texte) > (DBText1.ClientWidth - myCanvas.TextWidth('a')) then // traitement de la font du DBText finally FreeAndNil(myCanvas); end; end;
A+ Charly
Mon site : http://lapaille.byethost24.com/index.htm
Il ya pas d'evenement "ondatachange"!!!? dans Tdbtext, ou peut être je suis toujours grippé
Bonjour,
j'en sors juste c'est vrai qu'on a le cerbo lent dans ces cas là mais quand même le TEdit de départ s'est quand même beaucoup transformé non ?
Peut être aussi parce qu'il ne faut pas utiliser des évènements du composant TDBText mais jouer sur les propriétés de celui-ci au moment de l'affectation de la valeur je pense au onGetText du TField. Bien sûr cela implique que les champs soient déclarés
Ensuite le principe reste le même : calculer la taille d'un canvas en fonction d'une longueur connue comme Charly l'a déjà proposé (j'aurai plutôt utilisé un 'M' qu'un 'a' mais je chipote)
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Bonjour,
je pensais au OnDataChange du TDataSource, sans être sûr que cela puisse fonctionner.
Mais Serge, le grand maître des bases de données (entre autre !) va pouvoir te dépanner en deux coups de cuillère à pot !
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
mes chevilles
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Bonjour,
J'ai utilisé l’événement ongettext du champs et il affiche rien maintenant.
Il est sûr que sans rien voir du code utilisé on va certainement pouvoir voir où se trouve l'erreur
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager