![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить одну из форм висеть поверх всех окон Windows ?
Stepan © (2004-12-14 07:37:00)Здравствуйте! Есть гл.форма приложения из нее по кнопке создается и вызывается другая форма, которую нужно заставить висеть поверх всех окон всех Windows приложений.
FormStyle = fsStayOnTop позволяет висеть поверх всех окон данного приложения. Но Запустив, например Word, он перекроет наше окно со fsStayOnTop.
Скажите, <subj>.
С уважением, Aladin
DiamondShark (2004-12-14 14:04:00) [1]
> Подскажите, как сделать у создаваемой формы родительское
> окно - Desktop.
Перекрыть CreateParams
Stepan (2004-12-14 13:30:00) [2]Подскажите, как сделать у создаваемой формы родительское окно - Desktop.
GetDesktopWindow - возвр. HWND
а TForm2.Create требует Component
как быть ?
Игорь Шевченко (2004-12-14 12:54:00) [3]
> Стики и гл.форма должны быть независимыми
Родительким окном у "стиков" должен быть рабочий стол.
Delphi5.01 (2004-12-14 12:44:00) [4]Iz moei praktiki, net. Glavnaia forma doljna imet stayontop togda eio docheri poluchaut toje stayontop. v protivnom sluchaet oni poluchaut stayontop v otnoshenii svoego roditela kotori ne imeet takogo preoriteta.
A chem ne nravitsa moio reshenie, esli bit tochnei ne moio a voobshe prinatoe programistami?
Stepan (2004-12-14 12:37:00) [5]Раздражать не будут fsStayOnTop окна, так как я хочу сделать возможность "Приколоть" и "Отколоть".
Если польз-ль окно приколол, то оно висит поверх вообще всех окон, а если нет, то может перекрываться - как уж пользователь захочет.
Вопрос пока не исчерпан.
Хочу, чтобы кликая на Form2 ничего не происходило с Form1.
Можно ли как то это сделать ?
Delphi5.01 (2004-12-14 12:36:00) [6]Togda ia mogu tebe skazat chto dannie programi reshaut etot vopros po drugomu. Stikeri eto odna otdelnaia programma kotoraiai poluchaet informaciu s komandnoi stroki. V etom sluchae glavnanai programma zapuskaet etu programmu stiker s raznimi parametrami. VOt i vso. Etim reshaetsa odnovremmenno vse problemi1 :-)
Jelau udachi.
Stepan (2004-12-14 12:06:00) [7]Спасибо, LVT.
Может я зря сразу не сказал. Речь идет о программе, которая может "наклеивать" стики (липкие бумажки) с некоторой информацией. Сама программа - это форма Form1, а стики - экземпляры TForm2.
Стики и гл.форма должны быть независимыми, то есть кликая,сворачивая,разворачивая гл.форму Form1 стики (Form2) так и должны висеть поверх всех окон всех запущенных приложений, и наоборот, кликая на стик ничего не должно происходить с гл.формой Form1.
Так вот я и хочу, чтобы кликая на Form2 ничего не происходило с Form1.
Delphi5.01 (2004-12-14 12:02:00) [8]Ia soglasen takie okna ne toko razdrajaut a prosto ne podkhodat. Chasto avtori shitaut chto ikh proizvidenie iskustva super i razmer doljen vpechatlat i prerekrivat vso. A ochen umnie daje knopku minimizaciu udlaut, bil i takoi variant.
No eto ne v obidu skazano. prosto ludhse ispolzovat normalnie okokna.
Leonid Troyanovsky (2004-12-14 11:31:00) [9]
> Stepan (14.12.04 11:15) [4]
> ShowModal не годится, так как нужна возможность перекл.
> между окнами. С Form1 не нужно ничего делать (например минимизировать)
Такого я не знаю.
Могу лишь по своему опыту сказать, что окна типа fsStayOnTop
действуют на юзера раздражающе (солидарен).
Поэтому такую форму я стараюсь делать совсем небольшой,
с краткой информацией о произошедшем(их) событии(ях).
Кликнув по оному окну пользователь (если ему интересно)
сразу перейдет в нужное место приложения. Т.е., нужда в
подобных окнах возникает если само приложение свернуто
или находится на заднем плане.
Ну, а делать два или более таких окон на одно приложение
считаю перебором.
--
С уважением, LVT.
Stepan (2004-12-14 11:15:00) [10]ShowModal не годится, так как нужна возможность перекл. между окнами. С Form1 не нужно ничего делать (например минимизировать)
var f: TForm2;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
f:=TForm2.Create(nil);
Application.NormalizeTopMosts;
f.FormStyle := fsStayOnTop;
f.Show;
//Self.WindowState := wsNormal;
//Application.RestoreTopMosts;
end;
Этот код работает почти как надо:
Form2 висит поверх Word'a
Но как только я кликну на Form2, то сразу же "всплывет" главное окно Form1 поверх Worda и окажется между Word и Form2
в Z-порядке Word/Form1/Form2
Как сделать, чтобы Form1 не всплывало, если кликаю на Form2 ?
Leonid Troyanovsky (2004-12-14 09:55:00) [11]
> Stepan (14.12.04 09:24) [2]
> !!! fsStayOnTop делаю не у главного окна приложения, а у
> динамически созданного по кнопке из главного окна.
Попробуй, например, так
procedure TForm1.Button1Click(Sender: TObject);
begin
with TForm2.Create(nil) do
try
Application.NormalizeTopMosts;
Self.WindowState := wsMinimized;
FormStyle := fsStayOnTop;
ShowModal;
finally
Free;
Self.WindowState := wsNormal;
Application.RestoreTopMosts;
end;
end;
NB При деактивации приложения у всех вторичных форм
fsStayOntop сбрасывается.
--
С уважением, LVT.
Stepan (2004-12-14 09:24:00) [12]!!! fsStayOnTop делаю не у главного окна приложения, а у динамически созданного по кнопке из главного окна.
Попробовал сделать fsStayOnTop у главного окна приложения - действительно висит как надо, даже поверх Word'a
Cobalt (2004-12-14 08:30:00) [13]Хмммм, какой-то у тебя особенный Ворд - у меня Word2000 не перекрывает форму с FormStyle = fsStayOnTop