Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 850

/ вопрос открыт /

Здравствуйте, эксперты!
Как сделать форму всегда поверх остальных окон? И как после наступления 23 часов 59 минут и секунд получить новую дату? Спасибо!

Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 12 августа 2007, 14:44
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Aleksey P. Kharitonov

Здравствуйте, Трофимов Евгений!
Отвечаю на первый вопрос. Выберете в инспекторе объектов свойство FormStyle и смените его с fsNormal на fsStayOnTop.

А получить новую дату можно так:

Приложение:
  1. aDate: TDateTime;
  2. .....
  3. procedure TForm1.Timer1Timer(Sender: TObject);
  4. var
  5. h, m, s, ms: WORD;
  6. aTime: TDateTime;
  7. begin
  8. aTime:= Time;
  9. DecodeDateTime(aTime, h, m, s, ms);
  10. if (h = 0) and (m=0) and (s = 0) and (ms = 0) then aDate:= Date;
  11. end;
  12.  


Ответ отправил: 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.

Приложение:
  1.  
  2.  
  3. TForm1 = class(TForm)
  4. private
  5. procedure WMTIMECHANGE(var Message: TWMTIMECHANGE); message
  6. WM_TIMECHANGE;
  7. public
  8. end;
  9.  
  10. procedure TForm1.WMTIMECHANGE(var Message: TWMTIMECHANGE);
  11. begin
  12.  
  13. end;
  14. -------------------------------------------------------------------------------------------
  15.  
  16.  
  17. private
  18. procedure CreateParams(var Params: TCreateParams); override;
  19.  
  20. ...
  21.  
  22. procedure TForm2.CreateParams(var Params: TCreateParams);
  23.  
  24. begin
  25. inherited CreateParams(Params);
  26. Params.WndParent := GetDesktopWindow;
  27. end;


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 13 августа 2007, 11:17
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 15 августа 2007, 09:52; участников в обсуждении: 3.
Aleksey P. Kharitonov

Aleksey P. Kharitonov (статус: 3-ий класс), 12 августа 2007, 21:45 [#1]:

Чёт я намудрил))) Можно и просто в обработчике вызывать одну функцию Date.... Будет проще.

aDate: TDateTime;
.....
procedure TForm1.Timer1Timer(Sender: TObject);
begin
aDate:= Date;
end;
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 13 августа 2007, 12:41 [#2]:

Другая проблема: как отобразить новую форму, если главная форма свернута?
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
Вадим К

Вадим К (статус: Академик), 13 августа 2007, 12:51 [#3]:

нужнаяформа.show?
Мне в подобных вопросах всегда интересно, а если две формы должны быть всегда поверх всех, то как они между собой помирятся?
Галочка "подтверждения прочтения" - вселенское зло.
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 14 августа 2007, 12:37 [#4]:

Я в том смысле, что отобразить поверх остальных окон нужно не свернутое, а новое окно.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
Вадим К

Вадим К (статус: Академик), 14 августа 2007, 12:44 [#5]:

Ну так в чём проблема? если у вас автосоздаваемые формы (скорее всего да) то метод Show поможет. если нет, то создайте форму, после чего отобразите
FormX:=TFormX.Create(Application);
FormX.Show;
Галочка "подтверждения прочтения" - вселенское зло.
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 14 августа 2007, 20:06 [#6]:

Еще вопрос по форме. Как сделать окно совершенно не видимым при запуске. Пробую ShowWindow(Application.Handle,SW_HIDE), причем как в самом файле проекта после Application.Initialize, так и в процедуре FormCreate, но результата нет.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
Вадим К

Вадим К (статус: Академик), 14 августа 2007, 23:24 [#7]:

Трофимов Евгений!, пожалуйста пишите, помог ли совет или нет. А то ваши вопросы похожи на рыбу, которая метается туда-сюда в поисках неизвестно чего.

Совершенно невидимое? может, просто, что бы не отображалось при старте? попробуйте открыть файл проекта и написать Application.ShowMainForm:=false; перед созданием формы.
Галочка "подтверждения прочтения" - вселенское зло.
Евгений Eklmn

Евгений Eklmn (статус: Посетитель), 15 августа 2007, 09:52 [#8]:

Всем спасибо за советы и ответы! Извиняюсь, если, что не так.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.02 сек.