|
| 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
|
|
|