FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 933, dernière mise à jour : 28 septembre 2024 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.
- Comment insérer du texte dans Word ?
- Comment modifier la police du texte ?
- Comment mettre en gras un mot particulier d'une phrase ?
- Comment insérer et modifier une image ?
- Comment ajouter un lien hypertexte à mon document ?
- Comment mettre en page le document ?
- Comment créer et mettre en forme un en-tête ?
- Comment insérer une table des matières ?
- Comment remplacer du texte dans le pied de page ?
- Comment ajouter une case à cocher dans Word ?
- Comment supprimer le contenu d'un document Word ?
- Comment corriger l'erreur "Le relai a reçu des données incorrectes" ?
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'); |
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'); |
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; |
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; |
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; |
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; |
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; |
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; |
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); |
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; |
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; |
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; |
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); |
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); |
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 çaLes 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.