Форум: "Начинающим";
Текущий архив: 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.045 c