Solved

Save text as HTML

Posted on 2007-03-19
9
158 Views
Last Modified: 2010-04-05
Dear experts,

When the a user choose Menu-item Test -> Test Fill Buf, the TImage-Canvas
will be filled with characters and numbers. Now I want to make another menu-
item called Send Mail, to copy the canvas to clipboard and paste it automaticly
in the body of the mail.

I have this procedure for opening the installed e-mail client:

procedure TForm1.SendMail1Click(Sender: TObject);
begin
  ShellExecute(0, 'open', 'mailto:',
    nil, nil, SW_SHOWNORMAL);
end;

And this is a procedure I made to select all text of the canvas:

procedure TForm1.SaveAsText;
var
  i, j: integer;
  s: string;
begin
  s := '';
  for i := 1 to SCRROWS do
  begin
    for j := 1 to SCRCOLS do
      if (ScrBuf[i, j].Data in ['A'..'Z', 'a'..'z', '0'..'9', ' ',
        ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', '[', ']', ')',
          '<', '>', ';', ':', '=', '-', '.', '/', '\', '+', '"', '|']) then
        s := s + ScrBuf[i, j].Data;
    if s <> '' then s := s + #13#10;
  end;
  with Clipboard do
  begin
    open;
    astext := s;
    close;
  end;
end;

How can I get automaticly the text of the canvas in to the body of the mail
and display it exactly the same as the canvas?

I have put an example on my site: http://members.home.nl/peterkiers/
(beneath the Under Construction bar, you see a floppy disk)

Greetings,

Peter Kiers
0
Comment
Question by:peterkiers
  • 5
  • 4
9 Comments
 
LVL 10

Expert Comment

by:dinilud
ID: 18748524
procedure TForm1.SendMail1Click(Sender: TObject);
var
  i, j: integer;
  s: string;
begin
  s := '';
  for i := 1 to SCRROWS do
  begin
    for j := 1 to SCRCOLS do
      if (ScrBuf[i, j].Data in ['A'..'Z', 'a'..'z', '0'..'9', ' ',
        ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', '[', ']', ')',
          '<', '>', ';', ':', '=', '-', '.', '/', '\', '+', '"', '|']) then
        s := s + ScrBuf[i, j].Data;
    if s <> '' then s := s + #13#10;
  end;
  ShellExecute(0, 'open', pchar('mailto:&Body='+s),
    nil, nil, SW_SHOWNORMAL);
end;
0
 
LVL 1

Author Comment

by:peterkiers
ID: 18748704
Oke, but their is one problem:

For example if the text is displayed on the canvas
like this:

                              A
                           B   C
                         D       E
                       F            G
                     H                I

In the body-part the text appears like this:

ABCDEFGHI

And it has to be exactly like it is displayed on the canvas, I think the only way to do that is save the
text as HTML.

Greetings,

Peter Kiers
   
0
 
LVL 10

Expert Comment

by:dinilud
ID: 18754657
is it working

procedure TForm1.SendMail1Click(Sender: TObject);
var
  i, j: integer;
  s: string;
begin
  s := '';
  for i := 1 to SCRROWS do
  begin
    for j := 1 to SCRCOLS do
      if (ScrBuf[i, j].Data in ['A'..'Z', 'a'..'z', '0'..'9', ' ',
        ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', '[', ']', ')',
          '<', '>', ';', ':', '=', '-', '.', '/', '\', '+', '"', '|']) then
        s := s + ScrBuf[i, j].Data;
    if s <> '' then s := s +'%0a';
  end;
  ShellExecute(0, 'open', pchar('mailto:&Body='+ s),
    nil, nil, SW_SHOWNORMAL);
end;
0
 
LVL 1

Author Comment

by:peterkiers
ID: 18754668
YES, but the data will not be displayed correctly.

Peter.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 10

Expert Comment

by:dinilud
ID: 18755000
Is this OK for you

procedure TForm1.SendMail1Click(Sender: TObject);
var
  i, j: integer;
  s,CurLine: string;
  function FilterTextAndAddNewLine(S:string):String;
    var textFilter:TStringList;
        NumOfBlankLinesAbove:Integer;
        i, j: integer;
  begin
     Result:='';
     textFilter:=TStringList.Create;
     textFilter.Text:=S;
     NumOfBlankLinesAbove:=0;

     for i:=0 to textFilter.Count-1 do
     begin
        if textFilter.Strings[i]='' then inc(NumOfBlankLinesAbove)
        else
        begin
           for j:=1 to NumOfBlankLinesAbove do Result:=Result+#13#10;
           Result:=Result+textFilter.Strings[i]+#13#10;
           NumOfBlankLinesAbove:=0;
        end;
     end;

     textFilter.Text:=Result;
     Result:='';
     for i:=0 to textFilter.Count-1 do
     begin
        Result:=Result+textFilter.Strings[i]+'%0a';
     end;

     textFilter.Free;
  end;
begin
  s := '';
  for i := 1 to SCRROWS do
  begin
    CurLine:='';
    for j := 1 to SCRCOLS do
      if (ScrBuf[i, j].Data in ['A'..'Z', 'a'..'z', '0'..'9', ' ',
        ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', '[', ']', ')',
          '<', '>', ';', ':', '=', '-', '.', '/', '\', '+', '"', '|']) then
        CurLine := CurLine + ScrBuf[i, j].Data
      else if ScrBuf[i, j].Data=#0 then CurLine:=CurLine+' ';
    s := s+TrimRight(CurLine) +#13#10;
  end;
  s:=FilterTextAndAddNewLine(s);
  ShellExecute(0, 'open', pchar('mailto:&Body='+ s),
    nil, nil, SW_SHOWNORMAL);
end;
0
 
LVL 1

Author Comment

by:peterkiers
ID: 18756064
Almost when i select Test -> Test Field On
and then select Menu-item Send Mail and use
your example I get this:

Field Test Screen

            Default      Reverse      Blink        Underline
Red:       ABCabc123   ABCabc123   ABCabc123   ABCabc123
Pink:      ABCabc123   ABCabc123   ABCabc123   ABCabc123
Green:     ABCabc123   ABCabc123   ABCabc1

You see not it's not like the text on the canvas.

Greetings,

Peter Kiers
0
 
LVL 1

Author Comment

by:peterkiers
ID: 18756109
I am really gratefull that you will help me.

P.
0
 
LVL 10

Accepted Solution

by:
dinilud earned 500 total points
ID: 18756634
Thank you for your compliment.
i think that disorder is due to font.
Sorry sir now i am helpless.
0
 
LVL 1

Author Comment

by:peterkiers
ID: 18756665
Oke, thank you for the help
500 points comming your way.

Greetings,

Peter Kiers
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…
A simple description of email encryption using a secure portal service. This is one of the choices offered by The Email Laundry for email encryption. The other choices are pdf encryption which creates an encrypted pdf of your email and any attachmen…

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now