Vk_return to <br>

Résolu
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 21 janv. 2006 à 13:17
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 21 janv. 2006 à 15:41
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

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 janv. 2006 à 15:08
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.
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 janv. 2006 à 15:25
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.
3
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
21 janv. 2006 à 15:18
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 !!!
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
21 janv. 2006 à 15:28
Merci grand chef !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 janv. 2006 à 15:32
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.
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
21 janv. 2006 à 15:34
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

@+
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 janv. 2006 à 15:40
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.
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
21 janv. 2006 à 15:41
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
0
Rejoignez-nous