How to Send E-mail With the Default E-mail Client

October 19th, 2007 m3Rlin No comments

You may want to allow users to send you back feedback. You can either send it directly to your site via sockets or send the user to your website. What if you don’t have a website? No feedback? Yeah, right. Just have them send it to you by e-mail.

You can not send spaces in URLs, you have to convert them first. Example: if the subject were to be ‘Bug Report!’ then you should put %20 instead of the space character – ‘Bug%20Report!’. %20 is the ASCII value for space.

In this example MemoBugText is the memo in which the user describes the bug, ‘bugreports@youremail.com’ is your e-mail address and ‘Bug Report’ is the subject of that e-mail.

uses
  ShellAPI, Windows;

// For more information on ShellExecute() check out our tip
// "How to run programs and execute documents, mailto links and URLs" in the Windows category
ShellExecute(0, 'open', PChar('mailto:bugreports@youremail.com?subject=Bug%20Report&Body=' + MemoBugText.Text), nil, nil, SW_SHOWNORMAL);

How To and Why Use Dynamically Created Forms

December 15th, 1999 m3Rlin 2 comments

You almost never need all your application’s forms in memory all the time. To reduce the amount of memory required at load time and load time, you may want to create some forms only when you need to use them. For example, a dialog box needs to be in memory only during the time a user interacts with it.

Well, to do so you first have to create a form (or take an existing one), move it from the Project|Options auto-create list to the available forms list. You can do this manually too. Select Project|View source or View|Project source and remove the code creating the form. If your form is named Form1 then remove the following line from the projects source:

Application.CreateForm(TForm1, Form1);

Here’s the code that creates the form and after closing it, destroys it:

{ Use this for modal forms }
with TForm1.Create(Self) do
try
  ShowModal;
finally
  Free;
end;
...
{ Use this for non-modal forms }
var
  Form1: TFrom1;
...
begin
  Form1 := TForm1.Create(Self);
  Form1.Show;
end;

With non-modal forms you have to add this code to the form’s OnClose event:

...
Action := caFree;
...

This will free the memory allocated by the form when it is closed.