Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 09h57   #1
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Par défaut SQLite3, Zeos et RichMemo

Bonjour,

voilà, j'essaie d'enregistrer dans une base SQLite, un texte mis en forme saisi dans un RichMemo.

J'utilise les composants ZeosLib (7.0.3), et Lazarus 1.0.4.

Je n'arrive pas à enregistrer correctement les textes et encore moins à les récupérer.

Quelqu'un a déjà fait cela ?

Merci d'avance

JS
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h58   #2
selzig
Membre émérite
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 54
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 807
Points : 955
Points : 955
Bonjour,

C'est la mise en forme que vous n'arrivez pas à enregistrer ? A restituer dans un (autre) RichMemo après enregistrement et relecture dans la base ? ou cela concerne uniquement le texte contenu dans le RichMemo ? Parce qu'en réalité, il y a 2 problèmes. Si vous voulez afficher votre RichMemo dans une dbGrid (ou une StringGrid), évidemment le texte brut suffit. Mais si après lecture dans la base, vous voulez également l'afficher à nouveau dans un Richmemo, là, il faut enregistrer en plus les attributs du texte ce qui implique l'enregistrement dans de 2 champs différents de votre table. Il faudrait utiliser pour le 2ème champ les fonctions Load/SaveRichText.
J'ai lu mais pas testé (je ne les utilise plus) que les RichMemo avaient (eu) des problèmes avec l'UTF8 et sous Nux... A regarder de près, même si je suppose que cela a été réglé depuis le temps : http://bugs.freepascal.org/view.php?id=19624

Cordialement. Gilles
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 14h35   #3
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Tout d'abord merci d'avoir répondu, ensuite mon problème est assez bizarre.

Après plusieurs recherche il s'avère en fait que c'est l'utilisation des "MemoryStream" qui pose problème.

Je m'explique. Afin d'enregistrer et lire du texte mis en forme dans une base SQLite j'utilise les possibilités des champs blob et du composant RichMemo de lire et ecrire dans des stream. Afin de ne pas solliciter le disque dur, je suis passé par des MemoryStream. Le problème est que ça ne fonctionne pas. Si je passe par des FileStream, tout roule. Mais, dans ce cas, je dois écrire sur le disque le filestream depuis le champsblob ou depuis le RichMemo pour le lire à nouveau et le mettre soit dans le RichMemo ou dans le champ blob.

En gros, j'ai les schémas suivants :

ChampBlob --> fichier temporaire --> RichMemo
et
RichMemo --> fichier temporaire --> ChampBlob

Ça fonctionne, mais ce n'est pas très optimisé au niveau du disque dur.

Du coup, je me demandais s'il ne serait pas plus simple de faire comme je fais déjà pour les blob images, que je stocke sur le disque dur (dans un dossier spécifique) et dont seul le nom est stocké dans la base...

JS
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 15h59   #4
tourlourou
Modérateur
 
Homme Yves Lemaire
Biologiste ; Progr(amateur)
Inscription : mars 2005
Messages : 1 680
Détails du profil
Informations personnelles :
Nom : Homme Yves Lemaire
Âge : 50
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Biologiste ; Progr(amateur)

Informations forums :
Inscription : mars 2005
Messages : 1 680
Points : 3 086
Points : 3 086
Pardon pour cette question, mais as-tu essayé avec des MemoryStream dont tu avais remis la Position à 0 avant de les passer pour lecture ?
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits
tourlourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 16h30   #5
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
A priori, je dirais... non ? Mais plus réellement, ce serait !

Bref, que veux-tu dire exactement ? Je ne suis pas du tout, mais alors pas du tout, familiarisé avec les stream...
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 23h55   #6
alanglet
Membre régulier
 
André Langlet
Inscription : avril 2010
Messages : 45
Détails du profil
Informations personnelles :
Nom : André Langlet

Informations forums :
Inscription : avril 2010
Messages : 45
Points : 71
Points : 71
Bonsoir,

Les TMemoryStream utilisent un "curseur" qui permet de lire ou d'écrire à partir d'une certaine position identifiée par la propriété MS.position. Souvent après une écriture (WriteToStream par exemple) le curseur est situé en fin du flux. Si on veut lire le flux depuis le début, certaines fonctions nécessitent de repositionner ce curseur au début par
MS.position:=0 ou par
MS.seek(0,soFromBeginning)
sinon le curseur se trouvant à la fin, rien ne sera lu.

André
alanglet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 08h26   #7
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Ah ... Okay !

Ceci explique peut-être cela alors...

Je vais refaire des essaies, fort de ces nouvelles informations.


Merci beaucoup pour ces compléments.

JS
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h15   #8
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Cool, ça fonctionne parfaitement.

Merci à vous tous. Vous êtes mes Maîtres...

JS
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h15   #9
selzig
Membre émérite
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 54
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 807
Points : 955
Points : 955
Bonjour,

j'avais commencé par quelque chose d'équivalent mais cela ne me parait pas aussi simple que cela. Win et Nux n'utilisent pas toujours les mêmes encodages dans les flux. Donc la portabilité est à vérifier de très près d'autant que si j'ai bien compris la chaine issue du flux est enregistrée dans une table. Mon idée serait de "forcer" vers une ansistring.
Code :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{http://stackoverflow.com/questions/732666/converting-tmemorystream-to-string-in-delphi-2009}
{Ici, sous Win}
//sRTF : String;  
 
function StreamToString(aStream: TStream): string;
var
  SS: TStringStream;
begin
  if aStream <> nil then
  begin
    SS := TStringStream.Create('');
    try
      SS.CopyFrom(aStream, 0);  // No need to position at 0 nor provide size
      Result := SS.DataString;
    finally
      SS.Free;
    end;
  end else
  begin
    Result := '';
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  ms1 : TMemoryStream;
begin
  try
    ms1 := TMemoryStream.Create();
    try
      ms1.Seek(0, soFromBeginning);
      RichMemo1.SaveRichText(ms1);
      sRTF := StreamToString(ms1);
      showmessage(sRTF);
    except
      showmessage('Oups');
    end;
  finally
    ms1.Free;
  end;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
var
  ms2 : TStringStream;
begin
  try
    ms2 := TStringStream.Create(sRTF);
    try
      ms2.Seek(0, soFromBeginning);
      RichMemo2.LoadRichText(ms2);
     except
       showmessage('Oups');
      end;
    finally
      ms2.Free;
    end;
end;
Voir le lien cité au début du code.

Sinon en code plus minimaliste, ce code de transfert d'un RichMemo1 à un RichMemo2 par l'intermédiaire de la string sRTF fonctionne :
Code :
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
//sRTF : String; 
procedure TForm1.Button1Click(Sender: TObject);
var
  ms1 : TStringStream;
begin
  try
    ms1 := TStringStream.Create('');
    RichMemo1.SaveRichText(ms1);
    sRTF := ms1.DataString;
    showmessage(sRTF);
  except
    showmessage('Oups');
  end;
  ms1.Free;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
var
  ms2 : TStringStream;
begin
  try
    ms2 := TStringStream.Create(sRTF);
    RichMemo2.LoadRichText(ms2);
  except
    showmessage('Oups');
  end;
  ms2.Free;
end;
Cordialement. Gilles
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 13h10   #10
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Gilles,

mon code est le suivant
Code :
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
30
31
32
33
34
35
36
37
38
39
40
 
{rm_Texte est un TRichMemo
tbl_Texte est une ZeosTable
tbl_Textemm_Texte est un champ blob }
 
 
//Procedure pour actualiser le RichMemo lors du déplacement du curseur de //Table
Procedure Tform1.Tbl_texteafterscroll( Dataset : Tdataset) ;
Var
  oMS	: TMemoryStream;
 
Begin
  oMs := TMemoryStream.Create;
  Try
    rm_Texte.Clear;
    Tbl_textemm_texte.SaveToStream( oMS);
    oMs.Position := 0;
    rm_Texte.LoadRichText( oMS);
  Finally
    oMS.Free;
  End;     
End;
 
//Procedure pour mettre à jour le champ blob avant le Post.
Procedure Tform1.Tbl_textebeforepost( Dataset : Tdataset) ;
Var
  oms	: TMemoryStream;
 
Begin
  oMs := TMemoryStream.Create;
  Try
    If rm_Texte.SaveRichText( oMS) Then
    Begin
	    oMs.Position := 0;
  	  Tbl_textemm_texte.LoadFromStream( oMS);
    End;
  Finally
    oMS.Free;
  End;      
End;
Le code fonctionne sous Seven 32bit. Je n'ai pas moyen de tester sous Linux pour le moment.
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 13h14   #11
selzig
Membre émérite
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 54
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 807
Points : 955
Points : 955
Je suis à mon lycée cet après-midi. Je testerai les codes à mon retour sur Nux (64) et Win 7 64 en fin d'après-midi.
Bonne fin de journée. Gilles


PS : avez-vous terminé vos boutons images ? J'y ai incorporé mes codes (le mode 9 images à la Windev). Mais j'ai un problème de transparence sous Linux avec l'image "du-dessus" si cette dernière est en au format png ou gif avec gestion interne (à l'image) de la transparence. Autrement dit, si une image png ou gif est réalisée en utilisant le "mauve" comme couleur de transparence (canal alpha), le mauve apparaît dans le bouton. Par contre, si j'utilise la bmp qui m'a servi de modèle et que je déclare la couleur mauve comme transparente alors le mauve est bien transparent.
Le jour où je trouve une bib. graphique "complète" mais pas trop lourde et stable... et documentée... et qui gère pareillement tous ces prob en Win et Nux, je l'étudie.
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 13h54   #12
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Citation:
Envoyé par selzig Voir le message
Je suis à mon lycée cet après-midi. Je testerai les codes à mon retour sur Nux (64) et Win 7 64 en fin d'après-midi.
Bonne fin de journée. Gilles
Merci d'avance

Citation:
Envoyé par selzig Voir le message
PS : avez-vous terminé vos boutons images ?
J'ai réalisé un "truc" qui me satisfait pour le moment (bien qu'avec quelques soucis sur la transparence en grisé). Je peux vous envoyer mon "code brouillon" si ça vous dis, pour que vous regardiez. Ça marche sous Seven 32bits.
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 20h09   #13
selzig
Membre émérite
 
Homme Gilles
Enseignant
Inscription : novembre 2006
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Âge : 54
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : novembre 2006
Messages : 807
Points : 955
Points : 955
Bon alors j'ai commencé les premiers tests.
Il est nécessaire sous GTK2 d'utiliser le patch suivant pour installer le TRichMemo
Code :
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
Index: gtk2/gtk2richmemo.pas
===================================================================
--- gtk2/gtk2richmemo.pas	(wersja 1314)
+++ gtk2/gtk2richmemo.pas	(kopia robocza)
@@ -31,9 +31,9 @@
   // LCL
   LCLType, Controls, Graphics,
   // Gtk2 widget
-  GtkDef,
-  GTKWinApiWindow, GtkGlobals, GtkProc, InterfaceBase,
-  GtkWSControls,
+  Gtk2Def,
+  GTK2WinApiWindow, Gtk2Globals, Gtk2Proc, InterfaceBase,
+  Gtk2WSControls,
   // RichMemo
   WSRichMemo;
 
@@ -98,7 +98,7 @@
 class procedure TGtk2WSCustomRichMemo.SetCallbacks(
   const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo);
 begin
-   TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject));
+   TGtk2WSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject));
 end;
 
 class function TGtk2WSCustomRichMemo.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
Réf. : http://bugs.freepascal.org/view.php?id=17319

Pour l'instant, les tests ont l'air plutôt négatifs :la string reste désespérément vide quels que soient nos codes... mais ce qui me semble le plus inquiétant c'est que sans passer par la string, donc en restant avec le Stream, cela ne passe pas non plus.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button1Click(Sender: TObject);
var
  ms1 : TMemoryStream;
begin
  try
    ms1 := TMemoryStream.Create();
    try
      //ms1.Seek(0, soFromBeginning);
      ms1.Position:= 0;
      RichMemo1.SaveRichText(ms1);
 
      //ms1.Seek(0, soFromBeginning);
       ms1.Position :=0;
       RichMemo2.LoadRichText(ms1);
    except
      showmessage('Oups');
    end;
  finally
    ms1.Free;
  end;
end;
Impossible de répliquer le contenu du RichMemo1 dans le RichMemo2 avec ce code... et pas de déclenchement d'exceptions.
Code :
1
2
3
RichMemo1.SaveRichText(ms1);
 ms1.Seek(0, soFromBeginning); {ou  ms1.Seek(0, soBeginning) ou ms1.Poistion := 0}
 showmessage(intTostr(ms1.size));
renvoie 0.

Cela ne fonctionne pas mieux fonctionner en Win7 64 bits. L'appel RichMemo1.SaveRichText(ms1) renvoie une erreur RichEditWndProc RunError(216). La méthode incriminée semble être la ligne 373 SendMessage(RichEditWnd, EM_STREAMOUT, SF_RTF, LPARAM(@cbs) ); dans
class function TRichEditManager.SaveRichText(RichEditWnd: Handle; ADst: TStream): Boolean; du fichier Win32RichMemoProc...

Je m'y prends peut-être mal. Il va falloir prendre contact avec le forum de Lazarus... avec mon "broken english" . Je verrai cela demain. Dites donc Jon Shannow, cela laisse supposer des talents luinguistiques dans la langue de Shakespeare... Je peux faire un petit compte-rendu en français... for translation
Cordialement. Gilles
selzig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 08h25   #14
Jon Shannow
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 1 149
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 1 149
Points : 1 681
Points : 1 681
Citation:
Envoyé par selzig Voir le message
Bon alors j'ai commencé les premiers tests.
Il est nécessaire sous GTK2 d'utiliser le patch suivant pour installer le TRichMemo
S'il n'y a que cela, ce n'est pas très grave...

Citation:
Envoyé par selzig Voir le message
Pour l'instant, les tests ont l'air plutôt négatifs :la string reste désespérément vide quels que soient nos codes... mais ce qui me semble le plus inquiétant c'est que sans passer par la string, donc en restant avec le Stream, cela ne passe pas non plus.
Ça c'est plus embêtant...


Citation:
Envoyé par selzig Voir le message
Impossible de répliquer le contenu du RichMemo1 dans le RichMemo2 avec ce code... et pas de déclenchement d'exceptions.

Cela ne fonctionne pas mieux fonctionner en Win7 64 bits. L'appel RichMemo1.SaveRichText(ms1) renvoie une erreur RichEditWndProc RunError(216). La méthode incriminée semble être la ligne 373 SendMessage(RichEditWnd, EM_STREAMOUT, SF_RTF, LPARAM(@cbs) ); dans
class function TRichEditManager.SaveRichText(RichEditWnd: Handle; ADst: TStream): Boolean; du fichier Win32RichMemoProc...

Je m'y prends peut-être mal. Il va falloir prendre contact avec le forum de Lazarus... avec mon "broken english" . Je verrai cela demain. Dites donc Jon Shannow, cela laisse supposer des talents luinguistiques dans la langue de Shakespeare... Je peux faire un petit compte-rendu en français... for translation
Cordialement. Gilles
Aïe !
Fort maille innegliche, no problaime. Ail canne rouiatte ouate you tell (guillaume), inn heu parfaicte innegliche.
__________________
L'Amour est fort difficile à conjuguer.
Au passé, il n'est jamais simple.
Au présent, il n'est qu'indicatif.
Et au futur, il n'est que conditionnel.
(d'après Jean Cocteau)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h50.


 
 
 
 
Partenaires

Hébergement Web