Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизКак вывести в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c