Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вывести в TrayClock (TrayClockWClass) время в своём формате? [D7, WinXP]


SHS ©   (2004-02-05 09:18:00) 

Как вывести в TrayClock (TrayClockWClass) время в своём формате,
например с секундами? Проверяю программой Microsoft Spy++, в
Caption часов действительно содержаться мои данные, но в панели
не отображаются. Вот мой код:

var
hTaskbar, hTray, hClock: HWND;

procedure TForm1.FormCreate(Sender: TObject);
begin
hTaskbar := FindWindowEx(0, 0, 'Shell_TrayWnd', nil);
hTray := FindWindowEx(hTaskbar, 0, 'TrayNotifyWnd', nil);
hClock := FindWindowEx(hTray, 0, 'TrayClockWClass', nil);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
SetWindowTextA(hClock, TimeToStr(Now));
UpdateWindow(hClock);
end;


DVM   (2004-02-06 19:04:00) [1]


> В правильном направлении иду с таким кодом или можно как-то
> эффективнее и красивее это сделать?

Эффективнее, это использовать только функции GDI. Но это не тот случай, где будет ощутима разница.
Направление вроде правильное.


SHS   (2004-02-06 15:43:00) [2]

Сразу хочу поблагодарить за советы, спасибо!

Хочу ещё уточнить, значит я сам должен отрисовывать время? В правильном направлении иду с таким кодом или можно как-то эффективнее и красивее это сделать?

var
hTaskbar, hTray, hClock: HWND;
hCanvas: TCanvas;

procedure TForm1.FormCreate(Sender: TObject);
begin
hTaskbar := FindWindowEx(0, 0, 'Shell_TrayWnd', nil);
hTray := FindWindowEx(hTaskbar, 0, 'TrayNotifyWnd', nil);
hClock := FindWindowEx(hTray, 0, 'TrayClockWClass', nil);

hCanvas := TCanvas.Create;
hCanvas.Handle := GetDC(hClock);
hCanvas.Brush.Style := bsClear;
hCanvas.Font.Color := clRed;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
hCanvas.TextOut(0, 10, TimeToStr(Now) );
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ReleaseDC(hClock, hCanvas.Handle);
hCanvas.Free;
end;


DVM   (2004-02-05 18:07:00) [3]


> в
> Caption часов действительно содержаться мои данные, но в
> панели
> не отображаются. Вот мой код:

А кто сказал, что заголовок окна обязательно совпадает с текстом нарисованным на поверхности окна? Часы рисуют новое время раз в минуту (таймер имеет шаг минуту) или по WM_PAINT.


dr Tr0jan   (2004-02-05 15:04:00) [4]

Попробуй убрать UpdateWindow, попробуй поставить период таймера 100 мс, попробуй все делать в отдельном потоке.
Такде можешь попробовать компонент TCoolTrayIcon, ИМХО, вышла уже 1.4 или больше, а может и 1.44, попробуй поищи!
А может быть дело даже в том, что часы в трее, это не текст а картика, а уж текст часов хранится как-раз для генерации картинки. Попробуй рисовать текст на канвасе часов.


Наверх

Титульная страница Поиск, карта сайта Написать письмо