Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.012 c
2-1145478801
Niko
2006-04-20 00:33
2006.05.07
как отобрать фокус ))


2-1145031684
KygECHuK
2006-04-14 20:21
2006.05.07
Освобождение памяти


4-1140034908
Tailno
2006-02-15 23:21
2006.05.07
Эмитация нажатия сочетания клавиш в другой программе


15-1144912673
Zhekson
2006-04-13 11:17
2006.05.07
Установка MS SQL


2-1145622871
Коля
2006-04-21 16:34
2006.05.07
выделить строчку Combobox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский