Vk_return to <br>

[Résolu]
Signaler
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
-
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
-
Salut,

Bon voilà jesuis en train de bosser sur un petit projet personnel pour transformer mes pages txt en fichier HTML.

J'utilise deux memo.
Une qui écrit normalement et l'autre qui transforme otut ce qu'il faut.
Je change donc les accents en caractères correct, etc.

Mais bon plus gros soucis est en faites de prendre en compte quand j'appuie sur la touche entrée.

Voici mon source :

function TextToHtml(Ch: String): String;
const
MinusculesAccentuees =
['à', 'â', 'ä', 'é', 'è', 'ê', 'ë', 'î', 'ï', 'ô', 'ö', 'ù', 'û', 'ü', 'ç'];
MajusculesAccentuees =
['À', 'Â', 'Ä', 'É', 'È', 'Ê', 'Ë', 'Î', 'Ï', 'Ô', 'Ö', 'Ù', 'Û', 'Ü', 'Ç'];
// Autres = [..];
Modif = MinusculesAccentuees + MajusculesAccentuees; // + Autres (éventuellement)
var
i: Integer;
s: String;
begin
Result := '';
for i := 1 to Length(Ch) do
begin
if (Ch[i] in Modif) then
s := '&#' + IntToStr(Ord(Ch[i])) + ';'
else
s := Ch[i];
Result := Concat(Result, s);
end;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
Memo2.Text := Memo1.Text;

Memo2.Text := TextToHtml(Memo2.Text);
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if GetKeyState(VK_RETURN) < 0 then
Memo2.Lines.Add('
');
end;

J'essaye de faire simple au possible, pour quel'on puisse reprendre si on le souhaite ma source par la suite...

Mais bien sur mon
ne reste pas ce qui parait logique car il recopie dans memo2 ce qu'il y a dans memo1.
Par contre les caractère accentués et tout ca reste inchangé car il transforme en permanence les caractères...

Donc le mieux serait de rajouter quelque chose dans la fonction "TextToHtml" pour qu'il prenne en compte le retour chariot, mais je ne voit pas comment faire, pourriez-vous m'aider si'l vous plait ?

8 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Le code dans Memo1KeyPress n'est plus utile avec ce qui suit :

function TextToHtml(const Text: string): string;
const
  MinusculesAccentuees = 
    ['&#224;', '&#226;', '&#228;', '&#233;', '&#232;', '&#234;', '&#235;', '&#238;', '&#239;', '&#244;', '&#246;', '&#249;', '&#251;', '&#252;',
    '&#231;'];
  MajusculesAccentuees =
    ['&#192;', '&#194;', '&#196;', '&#201;', '&#200;', '&#202;', '&#203;', '&#206;', '&#207;', '&#212;', '&#214;', '&#217;', '&#219;', '&#220;',
    '&#199;'];
  // Autres = [..];
  Modif = MinusculesAccentuees + MajusculesAccentuees;
  // + Autres (&#233;ventuellement)
var
  i: Integer;
  c: char;
begin
  Result := '';
  i := 1;
   while  i < Length(Text) do
begin
    c : = Text[i];
    if (c in Modif) then
      Result :=  Result + '&amp;#' + IntToStr(Ord(c)) + ';'
else
begin
 case  c of
{$IFDEF MSWindows}
#13:
          begin
            Result : = result + '
' + sLineBreak;
            //on saute le caract&#232;re LineFeed qui suit
            inc(i);
          end;
{$ENDIF}
{$IFDEF Linux}
        sLineBreak: Result :=  Result + '
' + c;
{$ENDIF}
else
        Result := Result + c;
       end ;
    end;
    inc(i);
  end;

end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  Memo2.Text : = TextToHtml(Memo1.Text);
end;

Pr&#233;cisions :
1- Pour acc&#233;lerer le traitement, l'argument Ch a &#233;t&#233; remplac&#233; par Text pour mieux refl&#233;ter le contenu transmis. 

2- Pour optimiser le temps de traitement, il est maintenant transmis par adresse pour &#233;viter des copies syst&#233;matiquement en m&#233;moire &#224; chaque frappe de touche dans Memo1.

3- Affectation du i&#232;me caract&#232;re de Text &#224; un caract&#232;re de type char. Ceci permet de clarifier le code en utilisant une structure Case..of au lieu d'une suite de if imbriqu&#233;s.

4- La boucle For a &#233;t&#233; remplac&#233;e par une structure while, afin de pouvoir incr&#233;menter la valeur de i quand c'est n&#233;cessaire. C'est notamment le cas du traitement du retour chariot qui, sous Windows a une longueur de 2 caract&#232;res alors que, sous Linux, sa longueur n'est que de 1 (cf. directives de compilation utilis&#233;es dans le code).

5- La constante sLineBreak n'est apparue qu'&#224; partir de Delphi 6 (Kylix est sorti &#224; ce moment l&#224;). Si vous n'en disposez pas, d&#233;clarez simplement une constante sLineBreak = #13#10; .

6- Dans Memo1Change, il n'y a plus qu'une seule affectation, celle du contenu de memo1 transformé. Ca suffit amplement !


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Mea culpa. Autant pour moi.
Au lieu de :
while i < Length(Text) do
il faut mettre :
while i <=  Length(Text)  do 


<hr color ="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
2
C'est sublime !

Y'a UN seul problème quand on le test, il y a un décalage entre memo1 et memo2.
Si je tape par Exemple "Delphifr c'est super" dans memo 1, et bien dans memo 2 il va m'écrire "Delphifr c'est supe", j'ai un décalage donc d'une lettre, je dois donc finir par un espace pour finir le texte mais ca c'est pas bien grave

Merci beaucoup DelphiProg !!!
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
2
Merci grand chef !
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Surtout pas grand chef après une erreur de débutant comme celle-ci

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
2
mah si si si, je maintiens ce que je dis !
JE suis débutant (et tu en sais quelque chose ).
Alors déjà modifier la source comme tu viens de le faire, je comprend plus rien, enfin plus je le regarde et plus je commence à comprendre son principe mais ca reste tout de même vague pour moi

Donc si, grand chef

@+
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
J'ai pourtant pris le temps et la peine de mettre des précisions. Relis les bien.

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
259
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
22 novembre 2010
2
Oui je sais, et justement je les ai lu avec grande attention, mais j'ai toujorus parfois quelque blocages sur des trucs de bases que j'arrive pas à assimiler