Mon site personnel consacré à MSEide+MSEgui : msegui.net
merci ThWilliam
j'ai testé ton code et :
1- j'ai bien rajouté l'unité LazUTF8 ( uses LazUTF8; )
2 -sous Ubuntu j'ai rajouté la fonction UTF8LeftStr qui n'a pas l'air
d'exister dans l'unité LazUTF8 sous Lazarus/Ubuntu
3- Ton code met bien la première lettre en majuscule mais si je clique dans une cellule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function Utf8LeftStr(const AText: String; const ACount: Integer): String; begin Result := Utf8Copy(AText, 1, ACount); end;
ca me met la majuscule sur tous les mots frappés avant.
.
.
Why
.
//------------------
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Décidément cette discussion est pleine d'obscurités (mais intéressante quand même).
Mon site personnel consacré à MSEide+MSEgui : msegui.net
j'ai fait a la va vite, mdrrrrrrrr
en fait ca fait cela :
j’écris dans la cellule 1 ca me met la majuscule, parfait
j’écris dans la cellule 2 pareil, pareil dans la cellule 3 mais
quand j’écris dans la cellule 4 tout est en minuscule et
si je clique dans la cellule 5 ca me met la première lettre du mot de la cellule 4 en majuscule.
mdrrrrrrrr, j'espère être compréhensible, lol
.
Why
.
//------------------
Ce qui revient à dire que le code fonctionne bien avec les cellules 1, 2, 3 et commence à merdouiller à partir de la cellule 4, ce qui n'est absolument pas logique sauf s'il y a un bout de code ailleurs qui met la pagaille.
D'ailleurs j'ai fait un test avec juste la procédure procedure TForm1.StringGrid1EditingDone(Sender: TObject); de Thierry (et la fonction Utf8LeftStr associée) et je ne constate pas ton défaut...
Ah, au passage, cellules 1, 2, 3 c'est pas complet, c'est soit cellules 1.x, 2.y, 3.z, soit cellules x.1, y.2, z.3. Ça peut peut-être changer quelque chose...
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
hello,
j'ai repris l'idée de ThWilliam d'utiliser l'événement SetEditText qui se déclenche à chaque changement de texte dans une cellule et effectivement j'ai constaté le problème de la position du curseur d'édition sous linux. Je semble avoir trouvé une solution bestiale (grouik !) : j'utilise l'éditeur de cellule de grille voici le code à essayer :
P.S : ça ne marche pas sous windows (le curseur d'édition se retrouve en 1ère position) remplacer dans ce cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string); var S: string; begin if Length(Value) > 0 then begin S:= Value; S:= UTF8UpperCase(UTF8LeftStr(S, 1)) + UTF8Copy(S, 2, Length(S)); TStringCellEditor(TStringGrid(Sender).Editor).EditText := S; end; end;
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part TStringCellEditor(TStringGrid(Sender).Editor).EditText := S;
Ami calmant J.P (pas T)
Code : Sélectionner tout - Visualiser dans une fenêtre à part TStringGrid(Sender).Cells[ACol,ARow] := S;
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Bonjour.
@jurassic pork
J'ai testé ton code sous Windows. C'est ok sauf qu'en cas de repositionnement en arrière du curseur, après la frappe d'une touche, le curseur va en fin de texte. C'est assez déroutant si on veut modifier un caractère.
La solution idéale serait d'utiliser la propriété SelStart de InplaceEditor.
C'est assez simple en Delphi, mais sous Lazarus, InplaceEditor est du type TWinControl (donc propriété inaccessible).
Deux solutions :
- utiliser l'événement OnSelectEditor et déclarer l'editor comme un TEdit (par exemple). Mais cela implique quelques procedures pour bien gérer le tout.
- je viens de découvrir que le composant d'édition dans un StringGrid est en fait un descendant de TCustomMaskEdit. Donc, cela devient très simple :
l'unité MaskEdit est à déclarer.
Mais, qu'est-ce que cela donne sous Linux ?
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 procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string); var S: string; X: integer; begin S:= Value; if Length(S) > 0 then begin S:= UTF8UpperCase(UTF8LeftStr(S, 1)) + UTF8Copy(S, 2, Length(S)); with StringGrid1 do begin if InplaceEditor is TCustomMaskEdit then X:= (InplaceEditor as TCustomMaskEdit).SelStart else X:= -1; Cells[ACol, ARow] := S; if X >= 0 then (InplaceEditor as TCustomMaskEdit).SelStart:= X; end; end; end;
Cordialement
Thierry
avec ton code Thierry, sous ubuntu on a encore le curseur d'édition récalcitrant qui se place avant le dernier caractère de la chaîne dans la cellule.
Ami calmant, J.P
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Bonsoir,
Je viens de tester le code sous Linux Mint.
InplaceEditor est bien reconnu avec : uses Classes, SysUtils, Forms, Grids, Lazutf8, Maskedit;
Par contre il y a de fait un problème avec le curseur.
A la frappe d'une touche : déclenchement de l'événement OnSetEditText.
Comme le code corrige à chaque frappe, la modification de Cells redéclenche l'événement OnSetEditText (vérifié par placement d'un compteur de passage).
Très perturbant pour le SelStart (bien que Windows s'en sorte).
Voici le code modifié, avec interdiction du double passage.
Cordialement
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 procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string); var s, s2: string; x: integer; begin if length(value) > 0 then begin s2:= Value; s:= Utf8UpperCase(Utf8Leftstr(s2, 1)) + Utf8Copy(s2, 2, Length(s2)); if s = s2 then exit; // évite le double passage with StringGrid1 do begin if InplaceEditor is TCustomMaskEdit then x:= (InplaceEditor as TCustomMaskedit).SelStart else x:= -1; Cells[acol, arow]:= s; if x >=0 then (InplaceEditor as TCustomMaskedit).SelStart:= x; end; end; end;
Thierry
.
Why
.
//------------------
Extraordinaire !
Pas reconnu chez moi avec les mêmes entrées dans mon uses... Laz 1.0.10, FPC 2.6.2
[EDIT suite au post de winow que je n'avions point vu]
Je m'en étais douté...
Si vous saviez à quel point ça me gave ce genre de comportement foireux et tordu... Faut vraiment que j'ai besoin de Lazarus et Linux, sinon y a longtemps que tout serait passé par la fenêtre...
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Hello,
bien vu thierry l'histoire du double déclenchement de OnSetEditText,
j'ai réussi à simplifier ton code on utilisant un TstringCellEditor comme ceci :
plus besoin de l'unité maskedit.
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 procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string); var s, s2: string; x: integer; begin if length(value) > 0 then begin s2:= Value; s:= Utf8UpperCase(Utf8Leftstr(s2, 1)) + Utf8Copy(s2, 2, Length(s2)); if s = s2 then exit; // évite le double passage end; with (TStringCellEditor(TStringGrid(Sender).Editor)) do begin x := SelStart; EditText := s; if x >=0 then Selstart := x; end; end;
Cela semble OK pour moi sous Ubuntu et cette fois-ci cela fonctionne aussi sous windows
Ami calmant, J.P
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Jipété , à la place de :
tu peux mettre
Code : Sélectionner tout - Visualiser dans une fenêtre à part EditText := s;
Ami calmant, J.P (pas T)
Code : Sélectionner tout - Visualiser dans une fenêtre à part TStringGrid(Sender).Cells[ACol,ARow] := s;
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Bonjour,
@jurassic pork :
Bravo, je ne connaissais pas ce moyen ce moyen de rentrer en contact avec l'éditeur de cellule.j'ai réussi à simplifier ton code on utilisant un TstringCellEditor
@Jipété :
Je reconnais que c'est très énervant. Mais ne devrais-tu pas upgrader ton lazarus ?
Perso, j'en suis à la version 1.2.6 avec FPC 2.6.4 (version Windows)
Cordialement
Thierry
HS
Mouais... J'en avais déjà parlé lors des posts nous informant des sorties de nouvelles versions, et tant qu'il n'y aura pas une vraie procédure de mise à jour, je refuse de systématiquement supprimer toute une arborescence pour la remplacer par une autre, juste pour une différence de peut-être 10 %.
Par exemple, le dossier "examples" ne bouge en général pas ; il m'est arrivé d'en compiler certains, après de longues et laborieuses adaptations (encore hier soir avec lazfreetype, écrit pour Windows pur et dur et sans aucune indication dans le dossier), je n'ai pas envie de perdre tout ce travail -- ou alors il faudrait sauvegarder cette arborescence avant maj, et restaurer en tunant dossier par dossier : ça me gonfle je te dis pas !
Je mettrai à jour quand je changerai de machine, na !
/HS
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
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