Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
2-1145334132
Holod
2006-04-18 08:22
2006.05.07
Помогите, плиииз!


4-1139683228
Хинт
2006-02-11 21:40
2006.05.07
OpenProcess и PROCESS_TERMINATE


4-1139825037
Dimedrol
2006-02-13 13:03
2006.05.07
Delphi и Infra-red... как ?


15-1144736884
Карелин Артем
2006-04-11 10:28
2006.05.07
Пирамида и знак над ней на 1 USD. Из какой части света взято?


15-1145096771
Muha89
2006-04-15 14:26
2006.05.07
htmlDump





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский