Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

WM_COPYDATA и скрытое окно   Найти похожие ветки 

 
DinoRay   (2005-05-20 17:23) [0]

Почему скрытое окно не получает сообщение WM_COPYDATA,
когда  
ShowWindow(Application.Handle, SW_RESTORE) получает
так
 ShowWindow(Application.Handle, SW_HIDE) не получает
?


 
Игорь Шевченко ©   (2005-05-20 17:44) [1]

Получает. У тебя ошибка в программе


 
DinoRay   (2005-05-20 17:58) [2]

2 приложения
первое классическое Tray
Определены
   procedure ApplicationMinimize(Sender : TObject);
   procedure ApplicationRestore(Sender : TObject);
   procedure WMCOPYDATA(var Message: TMessage); message WM_COPYDATA;

procedure Tfrm_Main.ApplicationMinimize(Sender : TObject);
begin
 ShowWindow(Application.Handle, SW_HIDE);
end;

procedure Tfrm_Main.ApplicationRestore(Sender : TObject);
begin
 ShowWindow(Application.Handle, SW_RESTORE);
end;

procedure Tfrm_Main.WMCOPYDATA(var Message: TMessage);
var
 pcd: PCopyDataStruct;
begin
 pcd := PCopyDataStruct(Message.LParam);
end;  

в OnCreate главной формы
   Application.OnMinimize := ApplicationMinimize;
   Application.OnRestore := ApplicationRestore;
   ShowWindow(Application.Handle, SW_HIDE);

во втором приложении
procedure TForm1.Button1Click(Sender: TObject);
var
tt:THandle;
cd:TCopyDataStruct;
begin
 tt:=FindWindow(nil,"MainForm");
 ShowMessage(IntToStr(tt));
  cd.cbData := Length("asas") + 1;
  cd.lpData := PChar("asas");
  SendMessage(tt, WM_COPYDATA, 0, Longint(@cd));
end;

при запуске первого окно Minimized, соответственно скрыто,
посылаем из второго месагу Handle находит, месага не приходит,
делаем в первом Restore все приходит


 
alpet ©   (2005-05-20 20:20) [3]

А что Spy++ (winsight32) дает по отношению к скрытому окну ?


 
френк   (2005-05-20 21:24) [4]

однозначно получает. у меня все работает. глюк явно у тебя где-то.


 
DinoRay   (2005-05-26 18:30) [5]

Да фиг там...
переписал в новый проэкт.. не получает
когда visible тогда получает если Hide не получает..
че за ерунда такая?

-----------------------Прога которая принимает
unit U_test;

interface

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

type
 TForm1 = class(TForm)
   RxTrayIcon1: TRxTrayIcon;
   procedure FormCreate(Sender: TObject);
   procedure RxTrayIcon1DblClick(Sender: TObject);
 private
 
 public
   procedure WMCOPYDATA(var Message: TMessage); message WM_COPYDATA;
   procedure ApplicationMinimize(Sender : TObject);
   procedure ApplicationRestore(Sender : TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationMinimize(Sender : TObject);
begin
 ShowWindow(Application.Handle, SW_HIDE);
end;

procedure TForm1.ApplicationRestore(Sender : TObject);
begin
 ShowWindow(Handle, SW_RESTORE);
end;

procedure TForm1.WMCOPYDATA(var Message: TMessage);
var
 pcd: PCopyDataStruct;
begin
 pcd := PCopyDataStruct(Message.LParam);
 ShowMessage(PChar(pcd.lpData));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMinimize := ApplicationMinimize;
   Application.OnRestore := ApplicationRestore;
   ApplicationMinimize(Self);
end;

procedure TForm1.RxTrayIcon1DblClick(Sender: TObject);
begin
 Application.Restore;
 Application.BringToFront;
end;

end.
-----------------------
------------------------ Прога которая отправляет
unit Unit14444;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 hwnd:THandle;
 cd:TCopyDataStruct;
 msgtext:String;
begin
 hwnd := FindWindow (nil, "FormTest");
 msgtext:="asd";
 if hwnd <> 0 then
  begin
   cd.cbData := Length(msgtext) + 1;
   cd.lpData := PChar(msgtext);
   SendMessage(hwnd, WM_COPYDATA, 0, LParam(@cd));
  end;
end;

end.


 
alpet ©   (2005-05-26 18:47) [6]

Сравни какое окно находится строкой   "tt:=FindWindow(nil,"MainForm")", при свернутой и не свернутой форме второго приложения.


 
DinoRay   (2005-05-26 18:55) [7]

Ха разобрался...
короче такая хрень происходит если в делфю загружен проект который принимает месаги,
если его выгрузить все нормально ловит...
делфя 6 XP Professional
вот так-то...


 
GrayFace ©   (2005-05-26 20:34) [8]

DinoRay   (26.05.05 18:55) [7]
Тут не в дельфе дело. Любое приложение с формой "MainForm" может начать принимать твои сообщения. Лучше сделать так:
 protected
   procedure CreateParams(var Params: TCreateParams); override;

implementation

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.WinClassName:="Уникальное имя класса";
end;


и, соответственно, tt:=FindWindow("Уникальное имя класса",nil)



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

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
1-1118066353
Дмитрий_05
2005-06-06 17:59
2005.07.18
Событие на закрытие Popup


8-1111349902
qwertyuiop
2005-03-20 23:18
2005.07.18
DirectDraw.pas чего-то не компилируется в Delhi7


14-1119365736
Зеленая Майка
2005-06-21 18:55
2005.07.18
Предлагаю отметить выход из клинической смерти любимого форума


14-1118922902
pasha_golub
2005-06-16 15:55
2005.07.18
Yacc&amp;Lex


14-1119378830
Sulimxar
2005-06-21 22:33
2005.07.18
Производительность