![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SendMessage при разных вызовах форм [D5, D7]
Цукор5 © (2006-02-13 13:14:00)Unit2
const _Mes=WM_USER+3;
...
private
procedure Mess(var Msg:TMessage);message _Mes;
public
...
procedure TForm2.Mess(var Msg: TMessage);
begin
Windows.Beep(800,200);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
SendMessage(Form2.Handle,WM_USER+3,0,0); //тут жмем
end;
Если "вызывать" Form2 так :
//в *.dpr Application.CreateForm(TForm2, Form2);
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
то все работает,а если так :
//в *.dpr НЕТ Application.CreateForm(TForm2, Form2);
var Frm:TForm2;
begin
Frm:=TForm2.Create(Self);
try
Frm.ShowModal;
finally
Frm.Close;
Frm.Free;
end;
end;
то будет AV.С чем это связано и как от этого избавиться?
Цукор5 (2006-02-13 18:49:00) [1]2 evvcom
>, как говорят, будет тебе Щастье!
Ага,спасибо! ОНО наступило ;)
evvcom (2006-02-13 14:03:00) [2]
> Насколько я понял,проблема с Form2.Handle,которого нет
Проблема с Form2. Ее нет. Отсюда и AV. Нафиг тебе
> SendMessage( Form2.Handle,WM_USER+3,0,0);
? Зачем привязываться к Form2 переменной? Напиши просто
SendMessage( Handle,WM_USER+3,0,0);
и, как говорят, будет тебе Щастье!
Цукор5 (2006-02-13 13:55:00) [3]Первый вариант,РАБОЧИЙ :
//
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
//
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
end.
//
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const _Mes=WM_USER+3;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure Mess(var Msg:TMessage);message _Mes;
public
end;
var Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.Button1Click(Sender: TObject); Жмем тут
begin
SendMessage(Form2.Handle,WM_USER+3,0,0);
end;
procedure TForm2.Mess(var Msg: TMessage);
begin
Windows.Beep(800,200);
end;
end.
Второй вариант,НЕРАБОЧИЙ :
//
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
//
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var Frm:TForm2;
begin
Frm:=TForm2.Create(Self);
try
Frm.ShowModal;
finally
Frm.Close;
Frm.Free;
end;
end;
end.
//
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const _Mes=WM_USER+3;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure Mess(var Msg:TMessage);message _Mes;
public
end;
var Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.Button1Click(Sender: TObject); // жмем и AV
begin
SendMessage(Form2.Handle,WM_USER+3,0,0);
end;
procedure TForm2.Mess(var Msg: TMessage);
begin
Windows.Beep(800,200);
end;
end.
P.S. Насколько я понял,проблема с Form2.Handle,которого нет.
Digitman (2006-02-13 13:16:00) [4]
> Если "вызывать" Form2 так :
>
> //в *.dpr Application.CreateForm(TForm2, Form2);
> procedure TForm 1.Button1Click
???