Текущий архив: 2006.05.07;
Скачать: CL | DM;
ВнизSendMessage при разных вызовах форм Найти похожие ветки
← →
Цукор5 (2006-02-13 13:14) [0]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.С чем это связано и как от этого избавиться?
← →
Digitman © (2006-02-13 13:16) [1]
> Если "вызывать" Form2 так :
>
> //в *.dpr Application.CreateForm(TForm2, Form2);
> procedure TForm1.Button1Click
???
← →
Цукор5 (2006-02-13 13:55) [2]Первый вариант,РАБОЧИЙ :
//
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,которого нет.
← →
evvcom © (2006-02-13 14:03) [3]
> Насколько я понял,проблема с Form2.Handle,которого нет
Проблема с Form2. Ее нет. Отсюда и AV. Нафиг тебе
> SendMessage(Form2.Handle,WM_USER+3,0,0);
? Зачем привязываться к Form2 переменной? Напиши простоSendMessage(Handle,WM_USER+3,0,0);
и, как говорят, будет тебе Щастье!
← →
Цукор5 (2006-02-13 18:49) [4]2 evvcom
>, как говорят, будет тебе Щастье!
Ага,спасибо! ОНО наступило ;)
Страницы: 1 вся ветка
Текущий архив: 2006.05.07;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c