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

Вниз

Форма поверх всех других приложений   Найти похожие ветки 

 
Xmen   (2006-11-24 13:00) [0]

Хочу сделат так что в определенных случаях сделат форму поверх всех других приложений и вывести месаже.
Гдето нашел кусок кода, правда сам еще не разбирался с кодом

 F := TForm1.Create(nil);
 F.Show;
 SetWindowLong(F.Handle, GWL_HWNDPARENT, GetDesktopWindow);
 SetWindowPos(F.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE   or SWP_NOSIZE);
 Beep;
 ShowMessage("Новое сообщение");

Но при этом месажже не показывается он остается позади формы. Так как форма поверх всех окон.
Мне просто нужно было сообшит юзеру о новых сообщения. Как это сделат в стиле ICQ?

Вот ссылка на вчерашный пост, от туда можно узнат чут подробие.
http://delphimaster.net/view/2-1164278756/


 
zdm ©   (2006-11-24 13:01) [1]

showmessage, сама по себе модальна и должна выводится поверх ранее созданных модальных окон,,, или я ошибаюсь???


 
Сергей М. ©   (2006-11-24 13:04) [2]


> Хочу сделат так что в определенных случаях сделат форму
> поверх всех других приложений


В общем случае это невозможно.


 
Xmen   (2006-11-24 13:10) [3]

Ну тогда как нашет сообщения в стиле ICQ. Сообщения выходит над систем трейем и мигает иконка программы в трейе.


 
Сергей М. ©   (2006-11-24 13:14) [4]

см. какой-нть компонент а-ля TrayIcon ... Оных в Интернет - навалом ...


 
Anatoly Podgoretsky ©   (2006-11-24 13:20) [5]

> Xmen  (24.11.2006 13:10:03)  [3]

А она тоже не поверх всех приложений.
Тебе просто кажется.


 
Xmen   (2006-11-24 13:25) [6]

Да что то мне невезет. Никак не получается. а как насчет мигания загаловка формы.
Вот пример
var
 Flash: boolean;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 // Мигание заголовка окна
 FlashWindow(Form1.Handle, Flash);
 // Мигание заголовка на панели задач
 FlashWindow(Application.Handle, Flash);
 Flash := not Flash;
end;
Но как это правильно внедрит  в прогу?


 
DVM ©   (2006-11-24 13:32) [7]


> Xmen   (24.11.06 13:00)  

"Поверх всех" это так (пока другое окно тоже не захочет наверх)

function ForceForegroundWindow(hWnd: HWND): BOOL; stdcall;
const
 SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
 SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
 OsVerInfo: TOSVersionInfo;
 Win32MajorVersion: Integer;
 Win32MinorVersion: Integer;
 Win32Platform: Integer;
 ForegroundThreadID: DWORD;
 ThisThreadID: DWORD;
 Timeout: DWORD;
begin
 OsVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
 GetVersionEx(osVerInfo);
 Win32MajorVersion := OsVerInfo.dwMajorVersion;
 Win32MinorVersion := OsVerInfo.dwMinorVersion;
 Win32Platform := OsVerInfo.dwPlatformId;
 if IsIconic(hWnd) then ShowWindow(hWnd, SW_RESTORE);
 if GetForegroundWindow = hWnd then Result := True
 else
 begin
   if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
     ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4)
       or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then
   begin
     Result := False;
     ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
     ThisThreadID := GetWindowThreadPRocessId(hWnd, nil);
     if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
     begin
       BringWindowToTop(hWnd);
       SetForegroundWindow(hWnd);
       AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
       Result := (GetForegroundWindow = hWnd);
     end;
     if not Result then
     begin
       SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @Timeout, 0);
       SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
         SPIF_SENDCHANGE);
       BringWindowToTop(hWnd);
       SetForegroundWindow(hWnd);
       SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(Timeout),
                                                              SPIF_SENDCHANGE);
     end;
   end
   else
   begin
     BringWindowToTop(hWnd);
     SetForegroundWindow(hWnd);
   end;
   Result := (GetForegroundWindow = hWnd);
 end;
end; // End of function ForceForegroundWindow


 
Xmen   (2006-11-24 13:49) [8]

А постояно до нажатия на эту форму не получется, Таск мененджер он может находится поверх всех и у винапа есть такая фишка.


 
Anatoly Podgoretsky ©   (2006-11-24 14:05) [9]

> Xmen  (24.11.2006 13:25:06)  [6]

Таймер просить на форму и два раза по нему щелкнуть


 
Xmen   (2006-11-24 14:13) [10]


> Таймер просить на форму и два раза по нему щелкнуть

Спосибо. Это уже сделал, хотя медленно мигает. Попробовал значение таймера уменшит не дал результата. Я туда еще и Beep написал тепер у меня он пишшит.
Но все таки как это делается

> Ну тогда как нашет сообщения в стиле ICQ. Сообщения выходит
> над систем трейем и мигает иконка программы в трейе.


 
Anatoly Podgoretsky ©   (2006-11-24 14:44) [11]

> Xmen  (24.11.2006 14:13:10)  [10]

BalloonHint


 
Xmen   (2006-11-24 14:46) [12]

:( Help е ненашел


 
Anatoly Podgoretsky ©   (2006-11-24 15:11) [13]

> Xmen  (24.11.2006 14:46:12)  [12]

Help (справка по русски) разбросана по разним папкам, ищи во всех.



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

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

Наверх




Память: 0.48 MB
Время: 0.061 c
3-1160030440
Term
2006-10-05 10:40
2006.12.10
Как работать с АДО напрямую не через компоненты


2-1163691278
Lesorub
2006-11-16 18:34
2006.12.10
сокеты и web service


2-1164307993
Michael69
2006-11-23 21:53
2006.12.10
Подмена перетаскиваемого объекта в OnStratDrag


1-1161780797
Антоныч
2006-10-25 16:53
2006.12.10
Удаление картинки из листа Excel


8-1146395580
Gumus
2006-04-30 15:13
2006.12.10
Popupmenu





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