Главная страница
    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.46 MB
Время: 0.012 c
1-1139215284
Int_64
2006-02-06 11:41
2006.03.12
Как запустить приложение в виде дочернего окна в MDI-приложении?


2-1141034671
docc
2006-02-27 13:04
2006.03.12
BAT2EXE :)


15-1140023986
Ученик чародея
2006-02-15 20:19
2006.03.12
Америка требует отменить торговые льготы, предоставляемые России.


2-1139935979
smus811
2006-02-14 19:52
2006.03.12
Поиск по BLOB ам


1-1139302243
MM
2006-02-07 11:50
2006.03.12
Автоматическая проверка времени





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