Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Как вывести в TrayClock (TrayClockWClass) время в своём формате?   Найти похожие ветки 

 
SHS   (2004-02-05 09:18) [0]

Как вывести в 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;


 
dr Tr0jan ©   (2004-02-05 15:04) [1]

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


 
DVM ©   (2004-02-05 18:07) [2]


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

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


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

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

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

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-06 19:04) [4]


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
3-1079533564
Kein
2004-03-17 17:26
2004.04.11
какая база данных побыстрей


1-1079952889
martyanov
2004-03-22 13:54
2004.04.11
Проблемы с временем


11-1068798502
Ал
2003-11-14 11:28
2004.04.11
Bitmap.LoadFromStream для bmp, сделанных в разных программах


14-1079289669
Asteroid
2004-03-14 21:41
2004.04.11
Такое не бывает!


8-1076566297
disciple
2004-02-12 09:11
2004.04.11
Компоненты TrackBar и MediaPlayer