Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

А как сделать форму совсем модальной?

466
02 декабря 2002 года
Helg
36 / / 20.02.2000
У меня есть форма, куда я вывожу некоторую информацию, и я хочу, чтобы эта новая висела поверх всех остальных окон пользователя.
При этом моя прога может быть где-то на бакграунде.
Я не хочу выводить эту новую форму как ShowModal(), так как тогда на главной форме нельзя будет на кнопки жать. (и почему-то не помогат это ShowModal, другие приложения перебивают мое окно)
И на форме стоит FormStyle=fsStayOnTop;

Собсна вопрос:
Как сделать мою форму OnTop???
317
02 декабря 2002 года
Relax
573 / / 20.09.2000
вообще-то если у формы стоит StayOnTop, то она итак поверх всех окон должна быть... ты хочешь сказать, что тебе это не помогает?
466
03 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by Relax
вообще-то если у формы стоит StayOnTop, то она итак поверх всех окон должна быть... ты хочешь сказать, что тебе это не помогает?



именно это я и хочу сказать :(

вот моя форма:
object blk_frm: Tblk_frm
Left = 351
Top = 448
BorderIcons = []
BorderStyle = bsNone
Caption = 'blk_frm'
ClientHeight = 34
ClientWidth = 360
Color = clBlack
FormStyle = fsStayOnTop
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end
и она все равно скрывается, когда я в другую прогу иду...

540
03 декабря 2002 года
AL C++ Programmer
36 / / 20.01.2000
Цитата:
Originally posted by Helg


именно это я и хочу сказать :(

вот моя форма:
object blk_frm: Tblk_frm
Left = 351
Top = 448
BorderIcons = []
BorderStyle = bsNone
Caption = 'blk_frm'
ClientHeight = 34
ClientWidth = 360
Color = clBlack
FormStyle = fsStayOnTop
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end
и она все равно скрывается, когда я в другую прогу иду...



Борланд не знаю, но попробуй с помощью Windows API:
SetWindowPos(hWnd, HWND_TOPMOST, x, y, cx, cy, 0);

317
03 декабря 2002 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by Helg


именно это я и хочу сказать :(

вот моя форма:
object blk_frm: Tblk_frm
Left = 351
Top = 448
BorderIcons = []
BorderStyle = bsNone
Caption = 'blk_frm'
ClientHeight = 34
ClientWidth = 360
Color = clBlack
FormStyle = fsStayOnTop
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end
и она все равно скрывается, когда я в другую прогу иду...



действительно хрень какая-то - работает так как надо, то есть поверх всех только если это главная форма приложения... а для дочерних форм это почему-то не выполняется :((( - глюк!!!

1.7K
03 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Relax


действительно хрень какая-то - работает так как надо, то есть поверх всех только если это главная форма приложения... а для дочерних форм это почему-то не выполняется :((( - глюк!!!



Она не обязательно должна быть главной. Можно же в MDI приложении создать недочернюю форму. А для дочерних, по-моему, логично - они ж дочерние :)

317
03 декабря 2002 года
Relax
573 / / 20.09.2000
под дочерней я имею ввиду не форму в MDI приложнии, а вообще любую форму которая не главная - просто неправильно выразился...
1.7K
03 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Relax
под дочерней я имею ввиду не форму в MDI приложнии, а вообще любую форму которая не главная - просто неправильно выразился...


Понятно.
Но всёж-таки можно не-main форму заставить быть сверху. Сразу не скажу как, но можно. Аккуратно проследить как и когда она создается; обновить её во-время... Там кажется есть заморочка с Refresh(): он вызывает несколько других методов, причем не всегда одни и те же.
А задача, видимо, сделать сплэш? (ту картинку, которая бережет нервы юзера во время неспешной загрузки программы :) ) Если очень надо, могу найти проект со сплэшем, посмотрю точнее.

466
03 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by Mark

Понятно.
Но всёж-таки можно не-main форму заставить быть сверху. Сразу не скажу как, но можно. Аккуратно проследить как и когда она создается; обновить её во-время... Там кажется есть заморочка с Refresh(): он вызывает несколько других методов, причем не всегда одни и те же.
А задача, видимо, сделать сплэш? (ту картинку, которая бережет нервы юзера во время неспешной загрузки программы :) ) Если очень надо, могу найти проект со сплэшем, посмотрю точнее.



Хм... рефрешать... по-моему это несколько геморройно... это же как оно будет грузить систему...
Вот та же аська, как же оно-то делается stay_on_top...

Попробовал
SetWindowPos(hWnd, HWND_TOPMOST, x, y, cx, cy, 0); - не хочет оно делаться стайонтоп :( Хотя ен ругается, что не видит такой функции, но по f7 внутрь не заходит. Может я чего-то не прописал, нужно для апеишных функций что-либо инклудить?


Нет, я не хочу делать заставку при загрузке. Там был одby пример в экзамплах гдей-то, но мне кажется, что это несколько другой механизм...

317
04 декабря 2002 года
Relax
573 / / 20.09.2000
у аськи получается потому что там главное окно... с этим то проблем нет...
3
04 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Relax
у аськи получается потому что там главное окно... с этим то проблем нет...



Что значит главное окно? :D
В Windows есть родительские и дочерние окна, никаких главных окон нет.
В общем случае окно создается с помощью CreateWindow, и что-то я не вижу среди аргументов указания на то, что окно главное или нет.

УЧИТЕ МАТЧАСТЬ!

317
04 декабря 2002 года
Relax
573 / / 20.09.2000
главное - по аналогии с MainForm - то есть окно которое создается первым... родительские и дочерние окна - это только в MDI приложениях...
429
04 декабря 2002 года
Slon
78 / / 20.01.2000
Цитата:
Originally posted by Helg

Попробовал
SetWindowPos(hWnd, HWND_TOPMOST, x, y, cx, cy, 0); - не хочет оно делаться стайонтоп :( Хотя ен ругается, что не видит такой функции, но по f7 внутрь не заходит. Может я чего-то не прописал, нужно для апеишных функций что-либо инклудить?


Глупости.
Может ты просто скопировал строку кода?
Тогда понятно. Параметры то нужно указывать.
BOOL SetWindowPos(
HWND hWnd, // handle of window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning flags
);

Вот так все получится:
void __fastcall TForm2::FormShow(TObject *Sender)
{
SetWindowPos(Form2->Handle,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE);
}

358
04 декабря 2002 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Green


Что значит главное окно? :D
В Windows есть родительские и дочерние окна, никаких главных окон нет.
В общем случае окно создается с помощью CreateWindow, и что-то я не вижу среди аргументов указания на то, что окно главное или нет.

УЧИТЕ МАТЧАСТЬ!


А что знание IE и клавиатуры, вкупе с http://forum.codenet.ru не избавляет от необходимости знать матчасть???=)
LOL

3
04 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Relax
главное - по аналогии с MainForm - то есть окно которое создается первым... родительские и дочерние окна - это только в MDI приложениях...



SetWindowPos - функция Win32API, т.о. говорим в контексте Win32API.
Так вот, никаких MainForm в Windows НЕТ.
Сл-но, и никаких главных окон тоже НЕТ.
И нет разницы первым это окно создали, вторым и т.д.

А в качестве дочернего окна рассмотрим кнопочку на любом диалоге. Так вот, она - есть дочернее окно по отношению к диалоговому окну, а диалоговое окно - есть родительское окно по отношению к кнопочке. И так со всеми контролами, не только с кнопочками.
Так что MDI - лишь относительно редкий частный случай соотношения дочернее-родительское окно.

466
04 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:

SetWindowPos(Form2->Handle,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE);



вот так вот я и пробовал, но не работает оно как надо...
То есть, оно становиться типа он_топ, но только пока мое приложение активно... Как только я сворачиваю свое приложение, или кликаю на другом - эта он_топ_форма скрывается...

Цель же, заставить форму висеть поверх всего!!
Как в аське. То, что в аське висит - главная форма, я думаю, значения не имеет - если можно заставить (а ведь можно как-то) главное висеть так, то можно и не главное так же заставить - апишным функциям без разницы...

317
05 декабря 2002 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by Green


SetWindowPos - функция Win32API, т.о. говорим в контексте Win32API.
Так вот, никаких MainForm в Windows НЕТ.
Сл-но, и никаких главных окон тоже НЕТ.
И нет разницы первым это окно создали, вторым и т.д.

А в качестве дочернего окна рассмотрим кнопочку на любом диалоге. Так вот, она - есть дочернее окно по отношению к диалоговому окну, а диалоговое окно - есть родительское окно по отношению к кнопочке. И так со всеми контролами, не только с кнопочками.
Так что MDI - лишь относительно редкий частный случай соотношения дочернее-родительское окно.



да понятно что в Windows ничего такого нет - я про Билдер говорю! просто я всегда главную форму приложения называю MainForm - вот и все... и кстати мы немного отклоняемся от темы, тебе не кажется... - человека интересует не то что лежит на форме - кнопки, например и не MDI приложения - его интересует другое окно! в Windows разницы нет, а в Билдере оказалось - есть!

466
05 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by Relax

в Windows разницы нет, а в Билдере оказалось - есть!



Не понял, где есть какая разница?

Как можно сделать в билдере так, чтобы главное окно висело поверх всего-всего. Если так можно сделать в билдере, то я могу согласиться с тем, что не с маинформами могут быть проблемы, но вот мои скудные знания АПИфункций говорят мне, что для апи-функций такой разницы нет, и что если можно заставить быть он_топ главное (начальное) окно, то можно и любое другое...

317
05 декабря 2002 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by Helg


Не понял, где есть какая разница?

Как можно сделать в билдере так, чтобы главное окно висело поверх всего-всего. Если так можно сделать в билдере, то я могу согласиться с тем, что не с маинформами могут быть проблемы, но вот мои скудные знания АПИфункций говорят мне, что для апи-функций такой разницы нет, и что если можно заставить быть он_топ главное (начальное) окно, то можно и любое другое...



да я ж не спорю насчет windows, api и всего остального - наоборот - полностью согласен, прото не знаю как это сделать... а в билдере достаточно у формы сделать FormStyle = fsStayOnTop и все...
но это только для главного окна приложения :(

1.7K
05 декабря 2002 года
Mark
114 / / 21.11.2002
Интересный момент: неMain форма может быть сверху, если она fsStayOnTop и Main форма тоже fsStayOnTop, более того Main должна быть активной. В этих условиях переключаемся на другое приложение, а наши 2 формы остаются сверху. Может это поможет?

Main Form - это всего лишь форма, которая создается первой.
1.7K
05 декабря 2002 года
Mark
114 / / 21.11.2002
Может просто поменять назначение Main и неMain форм? Main будет висеть сверху, а не Main нести какие-нибудь контроли?
421
05 декабря 2002 года
bercut
124 / / 20.06.2000
Цитата:
Originally posted by Helg

Цель же, заставить форму висеть поверх всего!!
Как в аське. То, что в аське висит - главная форма, я думаю, значения не имеет - если можно заставить (а ведь можно как-то) главное висеть так, то можно и не главное так же заставить - апишным функциям без разницы...



Это точно. Достаточно взять в пример WinAmp, где при определенных настройках можно добиться того, что все его вспомогательные окна (PlayList, эквалайзер и др.) будут всегда наверху.

3
05 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by bercut


Это точно. Достаточно взять в пример WinAmp, где при определенных настройках можно добиться того, что все его вспомогательные окна (PlayList, эквалайзер и др.) будут всегда наверху.



Ещё раз говорю, НЕТ никаких главных окон ни в Аське, ни в Winamp.

В Windows для того, чтобы окно было поверх всех остальных, оно должно иметь стиль WS_POPUP, но не должно иметь стиль WS_CHILD. Не знаю, что там Борланд намухлевал, но стиль окна нормальным образом (через редактор ресурсов) вы видимо задать не можете. Тогда попробуйте установить стиль с помощью SetWindowLong:

// Retrieve the current window style.
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);

// Set the window style ~WS_CHILD and WS_POPUP
if(dwStyle) {
SetWindowLong( hWnd, GWL_STYLE, (dwStyle & ~WS_CHILD)|WS_POPUP );
}

Что такое hWnd, думаю, не надо объяснять? :D

421
05 декабря 2002 года
bercut
124 / / 20.06.2000
Цитата:
Originally posted by Green


Ещё раз говорю, НЕТ никаких главных окон ни в Аське, ни в Winamp.

В Windows для того, чтобы окно было поверх всех остальных, оно должно иметь стиль WS_POPUP, но не должно иметь стиль WS_CHILD. Не знаю, что там Борланд намухлевал, но стиль окна нормальным образом (через редактор ресурсов) вы видимо задать не можете. Тогда попробуйте установить стиль с помощью SetWindowLong:

// Retrieve the current window style.
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);

// Set the window style ~WS_CHILD and WS_POPUP
if(dwStyle) {
SetWindowLong( hWnd, GWL_STYLE, (dwStyle & ~WS_CHILD)|WS_POPUP );
}

Что такое hWnd, думаю, не надо объяснять? :D



А никто про главные окна и не говорит...
Разговор просто про основную форму (не буду называть ее главной ;-) ).

3
05 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by bercut


А никто про главные окна и не говорит...
Разговор просто про основную форму (не буду называть ее главной ;-) ).



Основная форма...
Те же штаны, только наизнанку...
Кто её сделал основной? Как ты сказал системе "Вот эта форма основная" ?
Так что "основная" или нет, это понятие чисто человеческое, система не знает ни про какие основные, главные формы. Более того, НЕТ в Windows такого понятия, как форма. Есть понятие "окно", отсюда и название "Windows".

1.7K
05 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Green


Основная форма...
Те же штаны, только наизнанку...
Кто её сделал основной? Как ты сказал системе "Вот эта форма основная" ?
Так что "основная" или нет, это понятие чисто человеческое, система не знает ни про какие основные, главные формы. Более того, НЕТ в Windows такого понятия, как форма. Есть понятие "окно", отсюда и название "Windows".


А в Билдере есть! Main form - это форма, которая создается первой. Да, "главность" у неё ни ахти какая, но создается первой и поэтому считается главной. Ну называется она так - ну что поделать?!

3
05 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Mark

А в Билдере есть! Main form - это форма, которая создается первой. Да, "главность" у неё ни ахти какая, но создается первой и поэтому считается главной. Ну называется она так - ну что поделать?!



Ок. Называйте свои формы хоть по фамилиям, их в Windows, всё равно, нет.

А кто Вам сказал, что Winamp, Icq написаны в Борланде?

Мне порой кажется, что пользователи Борланда, думают, что их программы по волшебному слову работают в обход системы Windows. Типа:"...в Windows нет, а в Борланде есть!"
Как бы вы там не называли эти свои сущьности (форма, ящик, чемодан..), они в конечном итоге не что иное, как ОКНА.

466
05 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by Green


Ещё раз говорю, НЕТ никаких главных окон ни в Аське, ни в Winamp.



Да бог с ними, этими окнами, главными и не главными... Это не суть важно...

Цитата:
Originally posted by Green

// Retrieve the current window style.
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);

// Set the window style ~WS_CHILD and WS_POPUP
if(dwStyle) {
SetWindowLong( hWnd, GWL_STYLE, (dwStyle & ~WS_CHILD)|WS_POPUP );
}

Что такое hWnd, думаю, не надо объяснять? :D



Наверно нет, а вот что такое WS_CHILD и WS_POPUP объясни плиз. Борланд на них не ругается, но и эффекта от вызова этой функции я не наблюдаю... точно все также...

можно более подробно расписать пример вызова этой функции, плиз?

317
06 декабря 2002 года
Relax
573 / / 20.09.2000
Люди!!! это спор ни о чем вообще... я уверен - все здесь присутствующие знают и про API, и про HWND и т.д. Это форум по Билдеру!!! И все обсуждения ведутся с привязкой к Билдеру, а в нем - окно, которое создается первым отличается от остальных, хотя бы тем, что закрывая его - закрываешь все приложение...
358
06 декабря 2002 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Helg

Наверно нет, а вот что такое WS_CHILD и WS_POPUP объясни плиз. Борланд на них не ругается, но и эффекта от вызова этой функции я не наблюдаю... точно все также...

можно более подробно расписать пример вызова этой функции, плиз?


MSDN чтоли цитировать???Хорошо лови!
Window Styles
The following styles can be specified wherever a window style is required. After the control has been created, these styles cannot be modified, except as noted.

WS_CHILD Creates a child window. A window with this style cannot have a menu bar. This style cannot be used with the WS_POPUP style.
WS_POPUPCreates a pop-up window. This style cannot be used with the WS_CHILD style.

1.7K
06 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Green


Ок. Называйте свои формы хоть по фамилиям, их в Windows, всё равно, нет.

А кто Вам сказал, что Winamp, Icq написаны в Борланде?

Мне порой кажется, что пользователи Борланда, думают, что их программы по волшебному слову работают в обход системы Windows. Типа:"...в Windows нет, а в Борланде есть!"
Как бы вы там не называли эти свои сущьности (форма, ящик, чемодан..), они в конечном итоге не что иное, как ОКНА.


Заметь, никто не сказал "главное окно". Потому что именно "форм" в Windows нет, а в Builder есть. Да, в конечном итоге это окно. Но скроллер тоже окно, а называется скроллером. И очень правильно на счет сущностей: в Биледре есть форма, которую надо понимать как элемент дизайна, как экземпляр класса TForm, как окно, которое во время разработки зовётся "формой".

Давай откажемся от имён и будем называть друг друга "homo sapiens номер...". Ну нет в природе ни Mark'ов ни Green'ов - есть существа, в конечном итоге являющиеся людьми.

3
06 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Mark

Заметь, никто не сказал "главное окно". Потому что именно "форм" в Windows нет, а в Builder есть. Да, в конечном итоге это окно. Но скроллер тоже окно, а называется скроллером. И очень правильно на счет сущностей: в Биледре есть форма, которую надо понимать как элемент дизайна, как экземпляр класса TForm, как окно, которое во время разработки зовётся "формой".

Давай откажемся от имён и будем называть друг друга "homo sapiens номер...". Ну нет в природе ни Mark'ов ни Green'ов - есть существа, в конечном итоге являющиеся людьми.



Ок. Убедил (на время) :D

Вот только скроллер является классом окна зарегистрированного в системе, и никто тебе не мешает пользовать его как стандартное окно. А судя по тому, что SetWindowLong не прокатывает, Билдер мешает использовать созданные, как "форма", окна как стандартное окно. Класс TForm не просто враппер окна, он сидит между окном и программером и мешает последнему, делая всё так, как посчитали предпочтительным дяди из Борланда. Хотели простоты? Получите! За Вас всё решили.

Видимо и в данном случае (PopUp) класс TForm возврашает настройки окна в исходное. Зачем, не знаю, но думаю, что можно попробовать переопределить, как вы говорите, главное окно. Думаю, это лишь указатель на класс TForm (или т.п.), который является членом класса приложения (TApplication или т.п.). Ну и пусть этот указатель указывает на др., нужное окно.

1.7K
06 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Green


Ок. Убедил (на время) :D

Вот только скроллер является классом окна зарегистрированного в системе, и никто тебе не мешает пользовать его как стандартное окно. А судя по тому, что SetWindowLong не прокатывает, Билдер мешает использовать созданные, как "форма", окна как стандартное окно. Класс TForm не просто враппер окна, он сидит между окном и программером и мешает последнему, делая всё так, как посчитали предпочтительным дяди из Борланда. Хотели простоты? Получите! За Вас всё решили.



Воздержусь от комментариев, иначе это будет напоминать тему "Возразите мне если я не прав", которая тоже породила бурные обсуждения.

Цитата:
Originally posted by Green

Зачем, не знаю, но думаю, что можно попробовать переопределить, как вы говорите, главное окно. Думаю, это лишь указатель на класс TForm (или т.п.), который является членом класса приложения (TApplication или т.п.). Ну и пусть этот указатель указывает на др., нужное окно.



Переопределить совсем не сложно - я говорил об это выше... только вот автору темы уже по-моему неинтересно :D

466
06 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by Mark


Переопределить совсем не сложно - я говорил об это выше... только вот автору темы уже по-моему неинтересно :D



Точно :)
Мне не нужны пространные рассуждения о смысле жизни окон...

Для счастья мне всего лишь нужно, чтобы мое окно (пусть не главное, пусть даже главное (буду вызывать отдельную приладу (например из другой дллки))) висело ВСЕГДА поверх ВСЕХ окон...

1.7K
06 декабря 2002 года
Mark
114 / / 21.11.2002
Удачи...:D
3
09 декабря 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Green


Ещё раз говорю, НЕТ никаких главных окон ни в Аське, ни в Winamp.

В Windows для того, чтобы окно было поверх всех остальных, оно должно иметь стиль WS_POPUP, но не должно иметь стиль WS_CHILD. Не знаю, что там Борланд намухлевал, но стиль окна нормальным образом (через редактор ресурсов) вы видимо задать не можете. Тогда попробуйте установить стиль с помощью SetWindowLong:

// Retrieve the current window style.
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);

// Set the window style ~WS_CHILD and WS_POPUP
if(dwStyle) {
SetWindowLong( hWnd, GWL_STYLE, (dwStyle & ~WS_CHILD)|WS_POPUP );
}

Что такое hWnd, думаю, не надо объяснять? :D



Упустил один момент...
Попробуй вместе с WS_POPUP использовать WS_EX_TOPMOST.

DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong( hWnd, GWL_STYLE, (dwStyle & ~WS_CHILD)|WS_POPUP );

DWORD dwExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
SetWindowLong(hWnd, GWL_EXSTYLE, dwExStyle | WS_EX_TOPMOST);

12K
07 января 2006 года
chrono
34 / / 03.01.2006
Цитата:
Originally posted by Helg
У меня есть форма, куда я вывожу некоторую информацию, и я хочу, чтобы эта новая висела поверх всех остальных окон пользователя.
При этом моя прога может быть где-то на бакграунде.
Я не хочу выводить эту новую форму как ShowModal(), так как тогда на главной форме нельзя будет на кнопки жать. (и почему-то не помогат это ShowModal, другие приложения перебивают мое окно)
И на форме стоит FormStyle=fsStayOnTop;

Собсна вопрос:
Как сделать мою форму OnTop???



Попробуй в конструкторе написать
[COLOR=green]Form->FormStyle=fsStayOnTop[/COLOR],
если не получится в конструкоре, тогда попробуй поставить в OnCreate(OnShow как будет удобнее) строчку которую я выделил в зел. цвет.
Учти "Form" должен совпадать с именем твоей формы.

3
07 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by chrono
Попробуй в конструкторе написать
[COLOR=green]Form->FormStyle=fsStayOnTop[/COLOR],
если не получится в конструкоре, тогда попробуй поставить в OnCreate(OnShow как будет удобнее) строчку которую я выделил в зел. цвет.
Учти "Form" должен совпадать с именем твоей формы.


М-да... И четырех лет не прошло...

12K
07 января 2006 года
chrono
34 / / 03.01.2006
Цитата:
Originally posted by Green
М-да... И четырех лет не прошло...


"Я сегодня первый день:angel:", шучу второй:devil:, я недавно этот форум нашёл, поэтому не мог ответить, да и 4 года назад я ещё незнал, что такое С++.
;)

4.8K
07 января 2006 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by Green
Упустил один момент...
Попробуй вместе с WS_POPUP использовать WS_EX_TOPMOST.

DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong( hWnd, GWL_STYLE, (dwStyle & ~WS_CHILD)|WS_POPUP );

DWORD dwExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
SetWindowLong(hWnd, GWL_EXSTYLE, dwExStyle | WS_EX_TOPMOST);


Что САМОЕ интересное: я как тупой билдеро-писака решил тупым-притупым способом проверить меняется ли хоть что-то:

Код:
DWORD dwStyle = GetWindowLong(fmTest->Handle, GWL_STYLE);
    ShowMessage(dwStyle);

    SetWindowLong(fmTest->Handle,GWL_STYLE,(dwStyle & ~WS_CHILD)|WS_POPUP);
    dwStyle = GetWindowLong(fmTest->Handle, GWL_STYLE);
    ShowMessage(dwStyle);

    DWORD dwExStyle = GetWindowLong(fmTest->Handle, GWL_EXSTYLE);
    ShowMessage(dwExStyle);

    SetWindowLong(fmTest->Handle, GWL_EXSTYLE, dwExStyle | WS_EX_TOPMOST);
    dwExStyle = GetWindowLong(fmTest->Handle, GWL_EXSTYLE);
    ShowMessage(dwExStyle);


Дак вот: Значения переменных dwStyle и dwExStyle НЕ МЕНЯЮТСЯ :!!!: Не говоря уже о том, что форма не становится он-топовой
4.8K
07 января 2006 года
Jump
128 / / 09.11.2005
Еще поковырялся:
Я лично хотел сделать чтоб окошко (VCL), создаваемое в ДЛЛ было он-топ. Через SetWindowLong не получилось... Через FormStyle=fsStayOnTop получилось, но сталкнулся с удивительным извращением: все MessageDlg - появляются ЗА формой, т.е. их не видно!!!!!!!! При этом переделав все MessageDlg в апишные MessageBox - все стало ОК.

Мораль: хочу конструктор форм, который бы интерпретировал все через винапи. Т.к. вцл - жуть, цлх - не лучше, а невизуально - геморойно!!!
Как ужасен мир.................
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог