Bonjour,

Toujours débutant et maintenant en retraite, j'essaie de convertir mes vieilles applis perso - faites en Delphi 3 et 7 - en Lazarus 1.8 installé ces jours-ci.

J’ai un fichier contenant des notes que j’ouvre dans une StrinGrid.
Quand je l’ouvre avec l’exe Delphi, dans toutes les cellules de la StringGrid, les lettres accentuées sont correctement lues.
Quand je l’ouvre avec l’appli Lazarus, dans les cellules, à la place des é, è, à, ë, ù, il y a des ? que je remplace avec une fonction qui change tous les ? en é et je sauvegarde.
(Je sais que c’est idiot de remplacer tous les é, à, ù etc… par é, mais il fallait bien essayer qq chose );;;

par ex : num?ros corrigé donne bien numéros dans l’exe Lazarus, et est bien relu numéro à la réouverture.
Mais alors, dans l’exe Delphi c’est lu numĀ©ros …
Sachant que j’ai au minimum 3000 cellules à corriger à la main (sur 15.000)
Au secours… Faut-il tout réécrire et abandonner Delphi ???

J'ai lu la FAQ et quelques forums, mais n'ai rien compris, parce que si vous, vous savez de quoi vous parlez, moi pas...

Pour expérimenter j'ai placé sur la StringGrid un bouton et un Edit dans lequel j'ai copié le contenu d'une cellule :

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
procedure TRepert.Bouton1Click(Sender: TObject);
var s:string;
begin
   Edit1.Text := Grille.Cells[7,2];                           // Ensuite j'ai utilisé une boucle pour toutes les cellules [I, J]
   s := Edit1.Text;
   Edit1.Text := Widestring(StrReplace ('?', 'é',s));  // Widestring ou pas c'est pareil = change bien Tous les ? en é
   Grille.Cells[7,2]:= Edit1.Text;
   Edit1.Text:='';
end; 
 
function StrReplace(Substr,replace,s:string):string;
{============================================================================}
{remplace toutes les sous-chaines Substr par replace                         }
{ ex : StrReplace ('toto', 'tata', 'le toto est ..') renvoie 'le tata est ..'}
{============================================================================}
var ChaineSource,ChaineCible:string;
    i,TailleChaineRemplacement:integer;
begin
  ChaineSource:=s;
  ChaineCible:='';
  TailleChaineRemplacement:=length(Substr);
  while pos(Substr,ChaineSource)>0 do  //tant que l'on trouve une sous-chaine
  begin
    i:=pos(Substr,ChaineSource)-1;      // position de la sous-chaine à remplacer
    ChaineCible:=ChaineCible+copy(ChaineSource,1,i)+replace;
    delete(ChaineSource,1,i+TailleChaineRemplacement);    //on retire de chaineTemp
  end;
  Result:=ChaineCible+ChaineSource;
end;
Et si ça fait pareil pour toutes mes BD, etc... je suis mal parti...

A vous lire avec attention.