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

Вниз

Как найти Handle окна сообщения ShowMessage ?   Найти похожие ветки 

 
HandleFinder   (2005-12-17 18:29) [0]

Дано:

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage("WWW"+"  "+s);
end;

Использовать FindWindow,GetActiveWindow нельзя - окно с таким именем может существовать, и оно может быть не активным.
Нужно искать от хендла формы или апплета.
Как это сделать?


 
Digitman ©   (2005-12-19 10:18) [1]


> Нужно искать от хендла формы или апплета


класс окна, создаваемого при вызове ф-ции Showmessage - TMessageForm

родительским для этого окна является окно, созданное объектом TApplication

от этого и следует оталкиваться

если в некий момент времени существует более одного TMessageForm-окна, созданного вызовом ShowMessage(),  с одинаковым текстом в клиентской области, то идентифицировать каждое из них невозможно - требуются дополнительные признаки идентификации


 
Leonid Troyanovsky ©   (2005-12-19 10:22) [2]


> HandleFinder   (17.12.05 18:29)  

> Как это сделать?


Например, узнать Active(Custom)Form обработчика WM_USER формы,
(из которой показывают SM) путем PostMessage(Handle, WM_USER, ..)
_перед_ ShowMessage.

Хотя, вместо SM проще сделать свою форму, снабдив ее недостающей
функциональностью.

--
Regards, LVT.


 
HandleFinder   (2005-12-19 16:41) [3]

Сделал:


type
 TForm1 = class(TForm)
   Timer1: TTimer;
   ListBox1: TListBox;
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   procedure SM(var Msg: TMessage); message WM_USER;
 public
   { Public declarations }
 end;

var   Form1: TForm1;   h1:hwnd ;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if h1<>0 then MoveWindow(h1,100,100,100,100,TRUE);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 PostMessage(Form1.Handle, WM_USER,0,0);
 ShowMessage("www");
end;

procedure TForm1.SM (var Msg: TMessage);
begin
 h1:= Screen.ActiveForm.Handle;
end;



 
Leonid Troyanovsky ©   (2005-12-19 16:55) [4]


> HandleFinder   (19.12.05 16:41) [3]

> procedure TForm1.Timer1Timer(Sender: TObject);
> begin
>   if h1<>0 then MoveWindow(h1,100,100,100,100,TRUE);
> end;


Вообще-то, так не очень хорошо, т.е., по таймеру.
Лучше б что-то одноразовое, иначе надо следить
за тем, что окно диалога не разрушилось.

Например, h1 : HWND - поле формы, в обработчике WM_USER
заполняем его Screen.ActiveForm.Handle, а где-нибудь в
Screen.OnActiveFormChange? - обнуляем (вместе с таймером).

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

--
Regards, LVT.


 
HandleFinder   (2005-12-19 17:16) [5]

>Вообще-то, так не очень хорошо, т.е., по таймеру.

Таймер только для отладки, а так оно одноразовое.



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

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

Наверх





Память: 0.45 MB
Время: 0.014 c
2-1140787477
Костя
2006-02-24 16:24
2006.03.12
Замена строки в Memo


15-1140255258
Pazitron_Brain
2006-02-18 12:34
2006.03.12
Как восстановить почтовую базу Thunderbird?


15-1140341666
Nic
2006-02-19 12:34
2006.03.12
Работа с SQL in Delphi


2-1140681629
VitV
2006-02-23 11:00
2006.03.12
Смена цвета кнопки


2-1140401767
rosl
2006-02-20 05:16
2006.03.12
ehlib





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