| 
| 
 | Вопрос # 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;    publicend; 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]:Всем спасибо за советы и ответы! Извиняюсь, если, что не так. Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |