{
Designer: Craig Ward (100554,2072)
Date: 20/7/95
Function: Example of dealing with Windows Messages
***************************************************}
unit Winmess;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
{This is the procedure declaration for dealing with the Window's message to
close the app's window - note that we would expect message handler's to be
declared privately (why would we ever want an external unit to access another unit's
message handlers!!!!)}
procedure custWMSYS(var Message: TWMSYSCOMMAND); Message WM_CLOSE;
public
{ Public declarations }
end;
var
Form1: TForm1;
{******************************************************************************}
implementation
{$R *.DFM}
{procedure that deals with the windows WM_CLOSE message -
I'm sure that there are far easier ways of dealing with posting records, but
this way illustrates some of the concepts behind Windows. Of course, in response
to "mrYes" we could simply use "close;" but I've included a PostMessage method
that provides an example of how to send messages to Windows.
Note that this subroutine could be useful for database applications, where the
a record has not yet been posted and the user tries to close down the form}
procedure TForm1.custWMSYS(var Message: TWMSYSCOMMAND);
var
sTitle: string;
pTitle: PChar;
iTitle: integer;
begin
{find title of the Form}
sTitle := Form1.Caption;
{now set case statement for user's response to dialog box}
case messageDlg('Save changes?', mtWarning, [mbYes, mbNo, mbCancel], 0) of
mrYes:
begin
{*********************************}
{allocate room on buffer for pchar}
pTitle := StrAlloc(256);
{convert string to pchar}
StrPCopy(pTitle, sTitle);
{find window's handle}
iTitle := FindWindow(nil, pTitle);
{*********************************}
{post message to Windows to close down the window}
PostMessage(iTitle, WM_QUIT, 0, 0);
end;
mrNo:
close;
mrCancel:
{do nothing}
end;
end;
end.