|
Вопрос # 850/ вопрос открыт / |
|
Здравствуйте, эксперты!
Как сделать форму всегда поверх остальных окон? И как после наступления 23 часов 59 минут и секунд получить новую дату? Спасибо!
 |
Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 12 августа 2007, 14:44
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Aleksey P. Kharitonov
Здравствуйте, Трофимов Евгений!
Отвечаю на первый вопрос. Выберете в инспекторе объектов свойство FormStyle и смените его с fsNormal на fsStayOnTop.
А получить новую дату можно так:
Приложение: Переключить в обычный режим- aDate: TDateTime;
- .....
- procedure TForm1.Timer1Timer(Sender: TObject);
- var
- h, m, s, ms: WORD;
- aTime: TDateTime;
- begin
- aTime:= Time;
- DecodeDateTime(aTime, h, m, s, ms);
- if (h = 0) and (m=0) and (s = 0) and (ms = 0) then aDate:= Date;
- end;
-
 |
Ответ отправил: Aleksey P. Kharitonov (статус: 3-ий класс)
Время отправки: 12 августа 2007, 21:33
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: min@y™
Окно поверх остальных окон системы (кроме системно-модальных):
procedure Button1Click(Sender: TObject);
begin
SetWindowPos(Handle,
HWND_TOPMOST,
Left,
Top,
Width,
Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 августа 2007, 08:22
Оценка за ответ: 4
|
Ответ #3. Отвечает эксперт: Feniks
Здравствуйте, Трофимов Евгений!
1. Для отслеживания изменений системного времени необходимо отлавливать
сообщение WM_TIMECHANGE. См. Пример 1.
2. Как вывести окно перед другими окнами не выводя наверх родительское окно?
Если это не мешает общему ходу программы, то одно из самых простых решений - использование рабочего стола (Desktop) как родительское окно. Для этого необходимо перекрыть CreateParams подчиненного окна следующим образом. См. Пример 2.
Приложение: Переключить в обычный режим-
-
- TForm1 = class(TForm)
- private
- procedure WMTIMECHANGE(var Message: TWMTIMECHANGE); message
- WM_TIMECHANGE;
- public
- end;
-
- procedure TForm1.WMTIMECHANGE(var Message: TWMTIMECHANGE);
- begin
-
- end;
- -------------------------------------------------------------------------------------------
-
-
- private
- procedure CreateParams(var Params: TCreateParams); override;
-
- ...
-
- procedure TForm2.CreateParams(var Params: TCreateParams);
-
- begin
- inherited CreateParams(Params);
- Params.WndParent := GetDesktopWindow;
- end;
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 13 августа 2007, 11:17
Оценка за ответ: 4
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 15 августа 2007, 09:52; участников в обсуждении: 3.
|
Aleksey P. Kharitonov (статус: 3-ий класс), 12 августа 2007, 21:45 [#1]:
Чёт я намудрил))) Можно и просто в обработчике вызывать одну функцию Date.... Будет проще.
aDate: TDateTime;
.....
procedure TForm1.Timer1Timer(Sender: TObject);
begin
aDate:= Date;
end;
|
|
Евгений Eklmn (статус: Посетитель), 13 августа 2007, 12:41 [#2]:
Другая проблема: как отобразить новую форму, если главная форма свернута?
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
|
|
Вадим К (статус: Академик), 13 августа 2007, 12:51 [#3]:
нужнаяформа.show?
Мне в подобных вопросах всегда интересно, а если две формы должны быть всегда поверх всех, то как они между собой помирятся?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Евгений Eklmn (статус: Посетитель), 14 августа 2007, 12:37 [#4]:
Я в том смысле, что отобразить поверх остальных окон нужно не свернутое, а новое окно.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
|
|
Вадим К (статус: Академик), 14 августа 2007, 12:44 [#5]:
Ну так в чём проблема? если у вас автосоздаваемые формы (скорее всего да) то метод Show поможет. если нет, то создайте форму, после чего отобразите
FormX:=TFormX.Create(Application);
FormX.Show;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Евгений Eklmn (статус: Посетитель), 14 августа 2007, 20:06 [#6]:
Еще вопрос по форме. Как сделать окно совершенно не видимым при запуске. Пробую ShowWindow(Application.Handle,SW_HIDE), причем как в самом файле проекта после Application.Initialize, так и в процедуре FormCreate, но результата нет.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
|
|
Вадим К (статус: Академик), 14 августа 2007, 23:24 [#7]:
Трофимов Евгений!, пожалуйста пишите, помог ли совет или нет. А то ваши вопросы похожи на рыбу, которая метается туда-сюда в поисках неизвестно чего.
Совершенно невидимое? может, просто, что бы не отображалось при старте? попробуйте открыть файл проекта и написать Application.ShowMainForm:=false; перед созданием формы.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Евгений Eklmn (статус: Посетитель), 15 августа 2007, 09:52 [#8]:
Всем спасибо за советы и ответы! Извиняюсь, если, что не так.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|