I insert a signature file through mail merge:
Code
procedure TfrmWordProcessor.WPRichText1MailMergeGetText(Sender: TObject; const inspname: string; Contents: TWPMMInsertTextContents);var Index: integer; FilePath: string; SignatureWidth: integer; SignatureHeight: integer;begin Index := StrToIntDef(inspname,-1); if Index = fDMWordProcessor.BRUGER_SIGNATUR then begin FilePath := ParseEnvironmentStrings(GetSystValue(scPaths,'SignaturePath','.\')); if FileExists(FilePath) then begin SignatureWidth := GetSystValue(ScSystem,'SignaturWidth',0); // in twips, 0 = "as is". SignatureHeight := GetSystValue(ScSystem,'SignaturHeight',0); Contents.LoadImageFromFile(FilePath,SignatureWidth,SignatureHeight); end; end else Contents.WideStringValue := fDMWordProcessor.GetString(StrToIntDef(inspname,-1));end;
This piece of code inserts the signature without actually using the SignatureHeight, thus maintaining the proportions of the image.
I also insert the image through an action:
Code
procedure TfrmWordProcessor.aUserSignatureExecute(Sender: TObject);var FilePath: string; SignatureWidth: integer; SignatureHeight: integer; image: TWPOImage;begin FilePath := ParseEnvironmentStrings(GetSystValue(scPaths,'SignaturePath','.\')); if FileExists(FilePath) then begin SignatureWidth := GetSystValue(ScSystem,'SignaturWidth',0); // in twips, 0 = "as is". SignatureHeight := GetSystValue(ScSystem,'SignaturHeight',0); image := TWPOImage.Create(WPRichText1); Image.LoadFromFile(FilePath);// Image.WidthTW := SignatureWidth;// Image.HeightTW := SignatureHeight; WPRichText1.TextObjects.Insert(Image,SignatureWidth,SignatureHeight,DM.UserData.Name); end;end;
This method apparently make use of the SignatureHeight and the results differ. How do I make the two methods produce the same result?
Followup. I ended up using this. But is there a better solution?
Code
SignatureWidth := GetSystValue(ScSystem,'SignaturWidth',0); // in twips, 0 = "as is".
// To make dimension adjustments proportional
if Image.ContentsWidth = image.ContentsHeight then
SignatureHeight := SignatureWidth
else
SignatureHeight := muldiv(SignatureWidth,image.ContentsHeight,Image.ContentsWidth);