Groups > Borland > Delphi Object Oriented design > Re: I need some Idea about onClose event.




Re: I need some Idea about onClose event.

Re: I need some Idea about onClose event.
Wed, 28 Nov 2007 10:16:37 -050
On Wed, 28 Nov 2007 10:37:55 +0200, Stanislav Nedelchev wrote:

> I can't find why on close event on template form is not working
> can anybody give me some Idea ?

> Here is the sample code
> procedure TfBuddyForm.WMSysCmd(var Message: TMessage);
> begin
>   if( Message.WParam=SC_CLOSE ) then
>   begin
>     Hide;
>     Message.Result:=0;
>   end else inherited;
> end;

You are hiding the form not closing it so the event will not be
called.

-- 
Marc Rohloff [TeamB]
Post Reply
I need some Idea about onClose event.
Wed, 28 Nov 2007 10:37:55 +020
Hi to all ,
I can't find why on close event on template form is not working
can anybody give me some Idea ?
Here is the sample code

This is not working for example

procedure TfBuddyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('Closing');
end;


This is main form.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Contnrs, BuddyForm, BSYAHOOMessenger, ComCtrls;

type
  TForm1 = class(TForm)
    lbForms: TListBox;
    Messenger: TBSYAHOOMessenger;
    ebUserName: TEdit;
    ebPassword: TEdit;
    btnLoin: TButton;
    StatusBar1: TStatusBar;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure FormCreate(Sender: TObject);

    procedure btnLoinClick(Sender: TObject);
    procedure MessengerMessage(Sender: TObject; const Buddy: String;
      const Message: WideString; const ReceivedDateTime: TDateTime);
  private
  FForms: TObjectList;
    { Private declarations }
  public
  function FindBuddyFormForName(BuddyName_: string): TfBuddyForm;
  procedure SendMessageToBuddy(oForm: TfBuddyForm; Text_: string);
    { Public declarations }
  end;

var
  Form1: TForm1;
  CurentForm: string;
implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 FForms.Free;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
FForms:=TObjectList.Create;
end;



procedure TForm1.SendMessageToBuddy(oForm: TfBuddyForm; Text_: string);
var
  pfwi : FLASHWINFO;
begin
    if oForm.Visible = true then
    begin
    ZeroMemory( @pfwi, SizeOf(FLASHWINFO) );
    pfwi.cbSize :=SizeOf(FLASHWINFO);
    pfwi.hwnd   :=oForm.Handle;
    pfwi.uCount :=3;
    pfwi.dwFlags:=FLASHW_ALL;
    FlashWindowEx( pfwi );
    oForm.HistoryMemo.Lines.Add( text_ );
    end
    else
    begin
    ZeroMemory( @pfwi, SizeOf(FLASHWINFO) );
    pfwi.cbSize :=SizeOf(FLASHWINFO);
    pfwi.hwnd   :=oForm.Handle;
    pfwi.uCount :=3;
    pfwi.dwFlags:=FLASHW_ALL;
    FlashWindowEx( pfwi );
    oForm.HistoryMemo.Lines.Add( text_ );
    oForm.Show();

    end;
end;

function TForm1.FindBuddyFormForName(BuddyName_: string): TfBuddyForm;
var
  i: integer;
begin
  result := nil;
  i := 0;
  BuddyName_ := lowercase(BuddyName_); //guarantee case insensitive search
  while (result = nil) and (i < FForms.Count) do
  begin
    if lowercase(TfBuddyForm(FForms[i]).BuddyName) = BuddyName_ then
      result := TfBuddyForm(FForms[i])
    else
      inc(i);
  end;
end;

procedure TForm1.btnLoinClick(Sender: TObject);
begin
Messenger.YAHOOID := ebUserName.Text;
Messenger.YAHOOPassword := ebPassword.Text;
Messenger.Login;
if Messenger.Logined  = true then
StatusBar1.Panels[1].Text := 'yes';
end;

procedure TForm1.MessengerMessage(Sender: TObject; const Buddy: String;
  const Message: WideString; const ReceivedDateTime: TDateTime);
var oForm: TfBuddyForm;
pfwi : FLASHWINFO;
begin
  oForm := FindBuddyFormForName(Buddy);

  if assigned(oForm) then
  begin

  SendMessageToBuddy(oForm, Message);
  end
  else
  begin
    oForm := TfBuddyForm.Create(nil, Buddy);
    FForms.Add(oForm);
    oForm.WindowState := wsMinimized;
    ZeroMemory( @pfwi, SizeOf(FLASHWINFO) );
    pfwi.cbSize :=SizeOf(FLASHWINFO);
    pfwi.hwnd   :=oForm.Handle;
    pfwi.uCount :=3;
    pfwi.dwFlags:=FLASHW_ALL;
    FlashWindowEx( pfwi );
    lbForms.Items.AddObject(Buddy, oForm);
    SendMessageToBuddy(oForm, Message);
  end;
end;

end.

Here is Template Form
unit BuddyForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfBuddyForm = class(TForm)
    Button1: TButton;
    Button2: TButton;
    HistoryMemo: TMemo;
    AnswerMemo: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure AnswerMemoKeyPress(Sender: TObject; var Key: Char);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
   fBuddyName: string;
   procedure WMSysCmd( var Message: TMessage ); message WM_SYSCOMMAND;
    { Private declarations }
  protected
  procedure CreateParams(var Params: TCreateParams); override;

  public
  constructor Create(AOwner: TComponent; BuddyName_: string);
  property BuddyName: string read fBuddyName write fBuddyName;
    { Public declarations }
  end;

var
  fBuddyForm: TfBuddyForm;

implementation

uses Unit1;

{$R *.dfm}

constructor TfBuddyForm.Create(AOwner: TComponent; BuddyName_: string);
begin
  inherited Create(AOwner);
  Buddyname := BuddyName_;
  Caption := BuddyName_;
end;

procedure TfBuddyForm.CreateParams(var Params: TCreateParams);
begin
  inherited;

  Params.WndParent:=0;
  Params.ExStyle:=Params.ExStyle or WS_EX_APPWINDOW;
end;

procedure TfBuddyForm.WMSysCmd(var Message: TMessage);
begin
  if( Message.WParam=SC_CLOSE ) then
  begin
    Hide;
    Message.Result:=0;
  end else inherited;
end;




procedure TfBuddyForm.Button1Click(Sender: TObject);
begin
  MessageDlg('button1 pressed', mtInformation, [mbOK], 0);
end;

procedure TfBuddyForm.Button2Click(Sender: TObject);
begin
  MessageDlg('button2 pressed', mtInformation, [mbOK], 0);
end;

procedure TfBuddyForm.AnswerMemoKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
  begin
    HistoryMemo.Lines.Add(DateToStr(date()) + ':' + TimeToStr(time()) +
' - ' + Form1.Messenger.YAHOOID + ' says: ' + AnswerMemo.Lines.Text);

    Form1.Messenger.SendMessage(Self.Caption,AnswerMemo.Lines.Text);
    AnswerMemo.Clear;

    Key := #0;

  end;
end;

procedure TfBuddyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('Closing');
end;

Post Reply
Re: I need some Idea about onClose event.
29 Nov 2007 18:04:06 -0700
Stanislav Nedelchev <stanislav.nedelchev@gmail.com> wrote in
news:474d28e1
@newsgroups.borland.com:

> I can't find why on close event on template form is not working
> can anybody give me some Idea ?
> 

I don't know if this will help, but I had some problems with inherited 
forms, overriding an evenhandler and then deleting the event handler in the 
inherited form.  I'm not sure if I modified the dfm, or just put an event 
handler in the inherited form with just a inherited; statemnt.

-- 

Post Reply
Re: I need some Idea about onClose event.
Fri, 11 Jan 2008 21:24:42 +010
There's a closequery called before closing form...

You better use OnCloseQuery...

1) The form is not yet closed
2) you can decide not to close it
3) it works then...

DH

"Stanislav Nedelchev" <stanislav.nedelchev@gmail.com> a écrit
dans le 
message de news: 474d28e1@newsgroups.borland.com...
> Hi to all ,
> I can't find why on close event on template form is not working
> can anybody give me some Idea ?
> Here is the sample code
>
> This is not working for example
>
> procedure TfBuddyForm.FormClose(Sender: TObject; var Action: 
> TCloseAction);
> begin
> ShowMessage('Closing');
> end;
>
>
> This is main form.
> unit Unit1;
>
> interface
>
> uses
>  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
> Forms,
>  Dialogs, StdCtrls,Contnrs, BuddyForm, BSYAHOOMessenger, ComCtrls;
>
> type
>  TForm1 = class(TForm)
>    lbForms: TListBox;
>    Messenger: TBSYAHOOMessenger;
>    ebUserName: TEdit;
>    ebPassword: TEdit;
>    btnLoin: TButton;
>    StatusBar1: TStatusBar;
>    procedure FormClose(Sender: TObject; var Action: TCloseAction);
>
>    procedure FormCreate(Sender: TObject);
>
>    procedure btnLoinClick(Sender: TObject);
>    procedure MessengerMessage(Sender: TObject; const Buddy: String;
>      const Message: WideString; const ReceivedDateTime: TDateTime);
>  private
>  FForms: TObjectList;
>    { Private declarations }
>  public
>  function FindBuddyFormForName(BuddyName_: string): TfBuddyForm;
>  procedure SendMessageToBuddy(oForm: TfBuddyForm; Text_: string);
>    { Public declarations }
>  end;
>
> var
>  Form1: TForm1;
>  CurentForm: string;
> implementation
>
> {$R *.dfm}
>
> procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
> begin
> FForms.Free;
> end;
>
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> FForms:=TObjectList.Create;
> end;
>
>
>
> procedure TForm1.SendMessageToBuddy(oForm: TfBuddyForm; Text_: string);
> var
>  pfwi : FLASHWINFO;
> begin
>    if oForm.Visible = true then
>    begin
>    ZeroMemory( @pfwi, SizeOf(FLASHWINFO) );
>    pfwi.cbSize :=SizeOf(FLASHWINFO);
>    pfwi.hwnd   :=oForm.Handle;
>    pfwi.uCount :=3;
>    pfwi.dwFlags:=FLASHW_ALL;
>    FlashWindowEx( pfwi );
>    oForm.HistoryMemo.Lines.Add( text_ );
>    end
>    else
>    begin
>    ZeroMemory( @pfwi, SizeOf(FLASHWINFO) );
>    pfwi.cbSize :=SizeOf(FLASHWINFO);
>    pfwi.hwnd   :=oForm.Handle;
>    pfwi.uCount :=3;
>    pfwi.dwFlags:=FLASHW_ALL;
>    FlashWindowEx( pfwi );
>    oForm.HistoryMemo.Lines.Add( text_ );
>    oForm.Show();
>
>    end;
> end;
>
> function TForm1.FindBuddyFormForName(BuddyName_: string): TfBuddyForm;
> var
>  i: integer;
> begin
>  result := nil;
>  i := 0;
>  BuddyName_ := lowercase(BuddyName_); //guarantee case insensitive search
>  while (result = nil) and (i < FForms.Count) do
>  begin
>    if lowercase(TfBuddyForm(FForms[i]).BuddyName) = BuddyName_ then
>      result := TfBuddyForm(FForms[i])
>    else
>      inc(i);
>  end;
> end;
>
> procedure TForm1.btnLoinClick(Sender: TObject);
> begin
> Messenger.YAHOOID := ebUserName.Text;
> Messenger.YAHOOPassword := ebPassword.Text;
> Messenger.Login;
> if Messenger.Logined  = true then
> StatusBar1.Panels[1].Text := 'yes';
> end;
>
> procedure TForm1.MessengerMessage(Sender: TObject; const Buddy: String;
>  const Message: WideString; const ReceivedDateTime: TDateTime);
> var oForm: TfBuddyForm;
> pfwi : FLASHWINFO;
> begin
>  oForm := FindBuddyFormForName(Buddy);
>
>  if assigned(oForm) then
>  begin
>
>  SendMessageToBuddy(oForm, Message);
>  end
>  else
>  begin
>    oForm := TfBuddyForm.Create(nil, Buddy);
>    FForms.Add(oForm);
>    oForm.WindowState := wsMinimized;
>    ZeroMemory( @pfwi, SizeOf(FLASHWINFO) );
>    pfwi.cbSize :=SizeOf(FLASHWINFO);
>    pfwi.hwnd   :=oForm.Handle;
>    pfwi.uCount :=3;
>    pfwi.dwFlags:=FLASHW_ALL;
>    FlashWindowEx( pfwi );
>    lbForms.Items.AddObject(Buddy, oForm);
>    SendMessageToBuddy(oForm, Message);
>  end;
> end;
>
> end.
>
> Here is Template Form
> unit BuddyForm;
>
> interface
>
> uses
>  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
> Forms,
>  Dialogs, StdCtrls;
>
> type
>  TfBuddyForm = class(TForm)
>    Button1: TButton;
>    Button2: TButton;
>    HistoryMemo: TMemo;
>    AnswerMemo: TMemo;
>    procedure Button1Click(Sender: TObject);
>    procedure Button2Click(Sender: TObject);
>    procedure AnswerMemoKeyPress(Sender: TObject; var Key: Char);
>    procedure FormClose(Sender: TObject; var Action: TCloseAction);
>  private
>   fBuddyName: string;
>   procedure WMSysCmd( var Message: TMessage ); message WM_SYSCOMMAND;
>    { Private declarations }
>  protected
>  procedure CreateParams(var Params: TCreateParams); override;
>
>  public
>  constructor Create(AOwner: TComponent; BuddyName_: string);
>  property BuddyName: string read fBuddyName write fBuddyName;
>    { Public declarations }
>  end;
>
> var
>  fBuddyForm: TfBuddyForm;
>
> implementation
>
> uses Unit1;
>
> {$R *.dfm}
>
> constructor TfBuddyForm.Create(AOwner: TComponent; BuddyName_: string);
> begin
>  inherited Create(AOwner);
>  Buddyname := BuddyName_;
>  Caption := BuddyName_;
> end;
>
> procedure TfBuddyForm.CreateParams(var Params: TCreateParams);
> begin
>  inherited;
>
>  Params.WndParent:=0;
>  Params.ExStyle:=Params.ExStyle or WS_EX_APPWINDOW;
> end;
>
> procedure TfBuddyForm.WMSysCmd(var Message: TMessage);
> begin
>  if( Message.WParam=SC_CLOSE ) then
>  begin
>    Hide;
>    Message.Result:=0;
>  end else inherited;
> end;
>
>
>
>
> procedure TfBuddyForm.Button1Click(Sender: TObject);
> begin
>  MessageDlg('button1 pressed', mtInformation, [mbOK], 0);
> end;
>
> procedure TfBuddyForm.Button2Click(Sender: TObject);
> begin
>  MessageDlg('button2 pressed', mtInformation, [mbOK], 0);
> end;
>
> procedure TfBuddyForm.AnswerMemoKeyPress(Sender: TObject; var Key: Char);
> begin
> if key = #13 then
>  begin
>    HistoryMemo.Lines.Add(DateToStr(date()) + ':' + TimeToStr(time()) +
> ' - ' + Form1.Messenger.YAHOOID + ' says: ' + AnswerMemo.Lines.Text);
>
>    Form1.Messenger.SendMessage(Self.Caption,AnswerMemo.Lines.Text);
>    AnswerMemo.Clear;
>
>    Key := #0;
>
>  end;
> end;
>
> procedure TfBuddyForm.FormClose(Sender: TObject; var Action: 
> TCloseAction);
> begin
> ShowMessage('Closing');
> end;
>
> end. 

Post Reply
about | contact