![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вывести в 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, попробуй поищи!
А может быть дело даже в том, что часы в трее, это не текст а картика, а уж текст часов хранится как-раз для генерации картинки. Попробуй рисовать текст на канвасе часов.