IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 124, nombre de questions : 929, dernière mise à jour : 31 décembre 2023  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

SommaireMicrosoft OfficeMicrosoft WordModification du texte (12)
précédent sommaire suivant
 

Ce ne sont pas des techniques très compliquées. Comme dans le cas habituel ce n'est pas l'insertion qui est complexe mais le positionnement correct du point d'insertion.

Pour insérer du texte :

Code delphi : Sélectionner tout
1
2
3
ParColl:=DocWord.Paragraphs; 
MonPar:=ParColl.Item(4); 
MonPar.Range.InsertBefore('Mon texte');
Pour insérer du texte en tant que nouveau paragraphe :
Code delphi : Sélectionner tout
1
2
3
4
5
ParColl:=DocWord.Paragraphs; 
MonPar:=ParColl.Item(4); 
Param1:=1; 
MonPar.Range.InsertParagraphBefore; 
MonPar.Previous(Param1).Range.insertBefore('Mon texte');
Là encore il ne s'agit que d'une des méthodes possibles.

Mis à jour le 18 janvier 2014 bidou

Il est possible de modifier la police du texte directement à l'aide de la propriété Font d'un objet Range :

Code delphi : Sélectionner tout
1
2
3
4
5
6
with WordDocument.paragraphs.first.Range.Font do  
begin  
  Size := 14;  
  Underline := 2;  
  Bold := 1;  
end;

Mis à jour le 18 janvier 2014 delphi-fan

Le problème ici est de trouver le point d'insertion. Vous pouvez sélectionner un mot particulier d'un paragraphe ou utiliser un signet pour vous déplacer sur une position donnée, cas d'un formulaire.

Voici un exemple :

Code delphi : Sélectionner tout
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
procedure TForm1.Button3Click(Sender: TObject); 
var MonPar: Paragraph; 
    MesPar: Paragraphs; 
    MaZone:Range; 
  
 Function NomProf :String; 
 begin 
   Result:='Tournesol'; 
 end; 
  
begin 
  // Insère du texte dans un document vierge 
 WordDocument1.Range.insertBefore('Le professeur ' + NomProf + ' doit aller voir :'); 
  
  // Récupère la collection de paragraphes 
 MesPar:=WordDocument1.Paragraphs; 
  
  //Récupère le premier paragraphe 
 MonPar:=MesPar.Item(1); 
  
  // Sélectionne le troisième mot 
 MaZone:=MonPar.Range.Words.Item(3); 
  
  // Bascule le mode Gras 
  // l'affectation de True ou False ne fonctionne pas 
 MaZone.Bold:=wdToggle; 
end;
Ici on se base sur l'hypothèse que la sélection ne concerne qu'un seul mot. Pour 'De Tournesol', il vous faut sélectionner une zone et non plus un mot.

Mis à jour le 18 janvier 2014 Laurent Dardenne

Les images insérées dans le texte sont membres de la collection InlineShapes

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Var Shape:InlineShape; 
    FileName:OleVariant;  
    LinkToFile:OleVariant;  
    SaveWithDocument:OleVariant;  
begin  
  FileName:='C:\developpez\logo_developpez.gif';  
  LinkToFile:= False;  
  SaveWithDocument:= True;  
  
  Shape := WordApplication1.Selection.InlineShapes.AddPicture(  
                          FileName, LinkToFile, SaveWithDocument, EmptyParam);  
  With Shape Do 
  Begin 
  
    LockAspectRatio := msoTrue; 
  
    Height := Height * 0.5; 
  
    Width := Width * 0.5; 
  
  End; 
end;
Ce code insère une image et la réduit de moitié.

Mis à jour le 18 janvier 2014 bidou

On utilise la méthode Add de la collection Hyperlinks

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
begin 
  
    WordApplication1.Connect; 
  
    Param2:='c:\toto.doc'; 
  
    WordApplication1.Visible:=True; 
  
    NomFichier:='c:\tuto.doc'; 
  
    DocWord:=WordApplication1.Documents.Open(NomFichier,EmptyParam, 
                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); 
  
    Param1:=DocWord.Paragraphs.Item(1).Range; 
  
    DocWord.Hyperlinks.Add(Param1,Param2, EmptyParam ,EmptyParam,EmptyParam,EmptyParam); 
  
    //MonPar.Range.InsertParagraphAfter; 
  
end;

Mis à jour le 18 janvier 2014 bidou

On utilise pour cela l'objet PageSetup de Document. Par exemple

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
With DocWord.PageSetup do 
begin 
  
  Orientation := wdOrientLandscape;  
  
  FirstPageTray := wdPrinterDefaultBin;  
  
  OtherPagesTray := wdPrinterDefaultBin;  
  
  SectionStart := wdSectionNewPage;  
  
  DifferentFirstPageHeaderFooter := True;  
  
  VerticalAlignment := wdAlignVerticalTop;  
  
  SuppressEndnotes := False;  
  
  MirrorMargins := True; 
  
end;

Mis à jour le 18 janvier 2014 bidou

Le code suivant crée l'en-tête, centre le texte et le met en gras

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
Var Zone:Range; 
begin 
  WordApplication1.ActiveDocument.Sections.Item(1) 
         .Headers.Item(wdHeaderFooterPrimary).Range.Text := 'En-tête'; 
  With WordApplication1.ActiveDocument.StoryRanges.Item(wdPrimaryHeaderStory) Do 
  Begin 
    Bold := 0; 
    ParagraphFormat.Alignment := wdAlignParagraphCenter; 
  End; 
end;

Mis à jour le 18 janvier 2014 bidou

On utilise la méthode Add de la collection TableOfContents

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
Param1:=True; 
Param2:=False; 
Param3:=1; 
Param4:=4; 
DocWord.TablesOfContents.Add(wordapplication1.Selection.Range, 
               Param1,Param3,Param4,Param2,Param2, 
               Param1,Param1,Param2,Param1,Param2);
Faites très attention à ne pas sélectionner de texte car celui-ci serait écrasé.

Mis à jour le 18 janvier 2014 bidou

Par défaut la fonction de remplacement de Word ne prend pas en compte le pied de page.

Code delphi : Sélectionner tout
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
Procedure RemplaceWordTexte(GAppHote: Variant; MotClef, Valeur: string);  
//***************************************************  
// Remplace 'MotClef' par 'Valeur' 
//***************************************************  
begin  
  GAppHote.Selection.Find.ClearFormatting;  
  GAppHote.Selection.Find.Replacement.ClearFormatting;  
  GAppHote.Selection.Find.Execute(MotClef, False, False, False, False, False,  
    True, wdFindContinue, False, Valeur, wdReplaceAll);  
  
  GAppHote.ActiveDocument.StoryRanges.Item(wdFirstPageFooterStory) 
       .Find.ClearFormatting;  
  GAppHote.ActiveDocument.StoryRanges.Item(wdFirstPageFooterStory) 
       .Find.Replacement.ClearFormatting;  
  GAppHote.ActiveDocument.StoryRanges.Item(wdFirstPageFooterStory) 
      .Find.Execute(MotClef, False, False, False, False, False,  True, 
       wdFindContinue, False, Valeur, wdReplaceAll);  
  
  GAppHote.ActiveDocument.StoryRanges.Item(wdPrimaryFooterStory) 
      .Find.ClearFormatting;  
  GAppHote.ActiveDocument.StoryRanges.Item(wdPrimaryFooterStory) 
      .Find.Replacement.ClearFormatting;  
  GAppHote.ActiveDocument.StoryRanges.Item(wdPrimaryFooterStory) 
      .Find.Execute(MotClef, False, False, False, False, False,   True, 
       wdFindContinue, False, Valeur, wdReplaceAll);  
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

La fonction suivante insère, dans un document Word préalablement ouvert, une case à cocher en position 1,1 :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
Var Index : OleVariant;  
    Objet : FormField;  
  
begin  
 Index:='CaseACocher1'; // Nom du signet, peut être une valeur numérique 
 Objet:=WordDocument1.FormFields.Item(Index);  
 Objet.CheckBox.Value:=True;  
end;
Il est ensuite possible de modifier son état par la propriété Value.

Mis à jour le 18 janvier 2014 Laurent Dardenne

Pour supprimer le contenu d'un document Word à partir de Delphi, nous devons, une fois le document ouvert, sélectionner tout le contenu du document puis utiliser au choix la méthode Cut ou la méthode Delete de l'objet TWordApplication.

Le code suivant nous permet de supprimer l'intégralité du texte d'un document Word ouvert :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
procedure TFormMain.BtnVideDocClick(Sender: TObject); 
var MaZone:Range; 
begin 
  //On sélectionne le contenu du document 
 MaZone:=WordDocument1.StoryRanges.Item(wdMainTextStory); 
 MaZone.Cut; // Avec quelques réserves, cf la doc ! 
  // ou encore 
 // MaZone.Delete(EmptyParam,EmptyParam);  
end;

Mis à jour le 18 janvier 2014 Laurent Dardenne

Lors de l'utilisation des composants TWordAppication et TWordDocument pour travailler sur un document Word et remplacer
des chaines par d'autres peut retourner le message d'erreur suivant : Le relai a recu des données incorrectes.
Par exemple le code suivant pose problème :

Code delphi : Sélectionner tout
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
var MaZone : Range;  
  
    FindText,  
    MatchCase,  
    MatchWholeWord,  
    MatchWildcards,  
    MatchSoundsLike,  
    MatchAllWordForms,  
    Forward,  
    Wrap,  
    Format,  
    ReplaceWith,  
    Replace : OleVariant;  
  
...  
  
    MaZone:=DocWord.Content;  
    FindText := TexteARechercher.Strings[j];  
    MatchCase := False;  
    MatchWholeWord := False;  
    MatchWildcards := False;  
    MatchSoundsLike := False;  
    MatchAllWordForms := False;  
    Forward := True;  
    Wrap := wdFindStop;  
    Format := False;  
    ReplaceWith := '';  
    Replace := wdReplaceNone;  
  
    MaZone.Find.Execute(FindText, MatchCase, MatchWholeWord,  
                        MatchWildcards, MatchSoundsLike,  
                        MatchAllWordForms, Forward,  
                        Wrap, Format, ReplaceWith, Replace,  
                        EmptyParam, EmptyParam, EmptyParam,  
                        EmptyParam);
Il s'agit d'un bug de Microsoft.
Pour éviter ce bug vous devez modifier le type de la variable MaZone en OleVariant et non pas en type Range.
Le code suivant fonctionne :
Code delphi : Sélectionner tout
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
var MaZone,  
    FindText,  
    MatchCase,  
    MatchWholeWord,  
    MatchWildcards,  
    MatchSoundsLike,  
    MatchAllWordForms,  
    Forward,  
    Wrap,  
    Format,  
    ReplaceWith,  
    Replace : OleVariant;  
  
...  
  
    MaZone:=DocWord.Content;  
    FindText := TexteARechercher.Strings[j];  
    MatchCase := False;  
    MatchWholeWord := False;  
    MatchWildcards := False;  
    MatchSoundsLike := False;  
    MatchAllWordForms := False;  
    Forward := True;  
    Wrap := wdFindStop;  
    Format := False;  
    ReplaceWith := '';  
    Replace := wdReplaceNone;  
  
     MaZone.Find.Execute(FindText, MatchCase, MatchWholeWord,  
                         MatchWildcards, MatchSoundsLike,  
                         MatchAllWordForms, Forward,  
                         Wrap, Format, ReplaceWith, Replace,  
                         EmptyParam, EmptyParam, EmptyParam,  
                         EmptyParam);

Mis à jour le 18 janvier 2014

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.