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

Вниз

SendMessage для всего приложения   Найти похожие ветки 

 
Евгений Р.   (2007-08-21 19:02) [0]

Можно ли отправить сообщение, чтобы его получили все окна моего приложения?


 
Юрий Зотов ©   (2007-08-21 19:09) [1]

Или в цикле каждому, или HWND_BROADCAST. Но тогда его получат вообще все окна.


 
Евгений Р.   (2007-08-21 19:20) [2]


> HWND_BROADCAST

не отрабатывает???


> Или в цикле каждому

типа:
 for i:=0 to application.ComponentCount-1 do
      if application.Components[i] is tForm then
                SendMessage(tForm(application.Components[i]).Handle,
                                                       msg,wParam,lParam);


 
Юрий Зотов ©   (2007-08-22 01:24) [3]

> Евгений Р.   (21.08.07 19:20) [2]

1. Ентого не может быть.

2. Типа того. Или Screen.FormCount и Screen.Forms. Или свой список окон.


 
Евгений Р.   (2007-08-22 12:56) [4]


> Юрий Зотов ©   (22.08.07 01:24) [3]


> 1. Ентого не может быть.


Попробуй:

unit proj;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

const wm_ProbaMessage=wm_User+100;
type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   procedure msgProba(var Msg: TMessage); message wm_ProbaMessage;

 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.msgProba(var Msg: TMessage);
Begin
   ShowMessage("123");
End;{}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(handle,wm_ProbaMessage,0,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(handle,HWND_BROADCAST,0,0);
end;

end.


Button1-отрабатывает
Button2-глухо!!!!


 
Сергей М. ©   (2007-08-22 12:59) [5]


> Button2-глухо


Справку-то хоть читал к ф-ции SendMessage ?


 
tesseract ©   (2007-08-22 13:17) [6]


> Button1-отрабатывает
>Button2-глухо!!!!


Префикс HWND_ ни о  чём не говорит ?


 
Юрий Зотов ©   (2007-08-22 13:30) [7]

> Евгений Р.   (22.08.07 12:56) [4]

А скажите пожалуйста, вот в этой строчке:
SendMessage(handle, HWND_BROADCAST, 0, 0);
а). какое сообщение посылается?
б). кому оно посылается?

Не глухо. А бездумно и халтурно. Сорри, но это так.


 
Евгений Р.   (2007-08-22 13:50) [8]


> Юрий Зотов ©   (22.08.07 13:30) [7]

Прошу прощения,спешка к хорошему не приводит, но в большой программе все делал правильно.

Исправил:
procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(HWND_BROADCAST,wm_ProbaMessage,0,0);
end;


а воз и ныне там... НЕ РАБОТАЕТ


 
DrPass ©   (2007-08-22 13:55) [9]


> Евгений Р.   (22.08.07 13:50) [8]

Ну почему ж справку так и не читаешь? А где RegisterWindowMessage?


 
Евгений Р.   (2007-08-22 15:33) [10]


> Ну почему ж справку так и не читаешь? А где RegisterWindowMessage?


В справке не нашел.
Смысл понял:
var wm_ProbaAllMessage:integer;
initialization
   wm_ProbaAllMessage:=RegisterWindowMessage("ProbaAllMessage");
end.

Но: как вылавливать сообщение
   procedure msgProba(var Msg: TMessage); message wm_ProbaMessage;
или брать все сообщения и выделять нужное?


 
Сергей М. ©   (2007-08-22 15:40) [11]


> В справке не нашел


Да ты что ?!

Выходит, это я придумал

Remarks

Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communicationRemarks

?


 
Юрий Зотов ©   (2007-08-22 16:22) [12]

> Евгений Р.   (22.08.07 15:33) [10]

> как вылавливать сообщение

protected
 procedure WndProc(var Message: TMessage); override;


var
 MY_MESSAGE: Cardinal;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MY_MESSAGE := RegisterWindowMessage("MY_MESSAGE")
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
 SendMessage(HWND_BROADCAST, MY_MESSAGE, 0, 0)
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
 if Message.Msg = MY_MESSAGE then
   ShowMessage("OK")
 else
   inherited
end;


 
Евгений Р.   (2007-08-22 20:02) [13]


> Сергей М. ©   (22.08.07 15:40) [11]


> Выходит, это я придумал


Я справку по этой функции не нашел, наверное Help ом плохо умею пользоваться, а о Вас я даже и не думал.


> Юрий Зотов ©   (22.08.07 16:22) [12]


Спасибо, это то, чего не хватало для понимания полной картины.


 
DrPass ©   (2007-08-22 21:32) [14]


>  а о Вас я даже и не думал

А вот это зря. О Нем надо думать всегда


 
Юрий Зотов ©   (2007-08-22 22:19) [15]

> Евгений Р.   (22.08.07 20:02) [13]

В поставке Delphi 2 справки: одна собственно по Delphi, вторая - по WinAPI. Обе вызываются из меню Help. Функции WinAPI надо, конечно, искать во второй. А еще лучше - здесь:
http://msdn.microsoft.com/library



Страницы: 1 вся ветка

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

Наверх





Память: 0.49 MB
Время: 0.04 c
15-1187275279
Igorek
2007-08-16 18:41
2007.09.16
Project Version


2-1187707790
-=Le][=-
2007-08-21 18:49
2007.09.16
FastReport


11-1170007808
fender
2007-01-28 21:10
2007.09.16
SpriteUtils2 2.08b


15-1187259332
Piter
2007-08-16 14:15
2007.09.16
Полетела Windows 2003 Server Datacenter Edition (eng)


8-1165417477
algol
2006-12-06 18:04
2007.09.16
Разобрать медиа файл и построить спектр





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