Текущий архив: 2007.09.16;
Скачать: CL | DM;
Вниз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;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.05 c