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

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

Нарисовать поверх [D6, Win95/98, WinME, WinXP]


hogo ©   (2002-11-11 06:39:00) 

Кто знает как, допустим выводить время, поверх всего, для примера можно использовать PowerStrip, выводит информацию о экране поверх всего.


hogo   (2002-11-13 11:54:00) [1]

Вот процедура, достаточно повторять ее в цикле, или в таймере:
procedure DeskTopPaint;
var
DeskTop:TCanvas;
begin
DeskTop:=TCanvas.Create;
try
DeskTop.Handle:=GetDC(0);// Получим Handle Рабочего стола
DeskTop.Brush.Style:=bsClear; // Устанавливаем тип кисти
With DeskTop.Font do // Подбираем шрифт
Begin
Color:=clRed;
Size:=40;
Name:="Times New Roman";
Style:=[fsBold];
end;
DeskTop.TextOut(10,10,"Сегодня : "+DateToStr(Now));
ReleaseDC(0, DeskTop.handle);
finally
DeskTop.Free; // Уберем за собой
end;
end;


hogo   (2002-11-13 11:38:00) [2]

И всетаки это не то, мне необходимо навроде как нарисовать на Canvas приложения.
Я понимаю этонадо сделать так:
1. найти активное в данный момент окно
2. найти на чем оно сейчас рисует
3. вывести

Правильно я думаю или нет?


hogo   (2002-11-11 12:24:00) [3]

2Александр Павлов
Первая функция прикольная сегодня вечером испробую :)


Александр Павлов   (2002-11-11 10:28:00) [4]

Попробуй так:
TForm1 = class(TForm)
...
protected
procedure CreateParams(var Params: TCreateParams); override;
...
end;

...
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
Params.Style := WS_POPUP or WS_BORDER;
Params.WndParent := GetDesktopWindow; //!
end;

или так:

SetWindowPos(Form1.Handle, HWND_TOPMOST, x, y, cx, cy, SWP_SHOWWINDOW);
или 2й вариант с учётом возможных изменений разрешения экрана:

TForm1 = class(TForm)
...
protected
procedure WndProc(var Message: TMessage); override;
...
end;

...

procedure TfrmBlock.WndProc(var Message: TMessage);
begin
with Message do
case Msg of
WM_DISPLAYCHANGE: begin
// Здесь необходимо произвести необходимые расчёты,
// связанные с координатами формы на экране с учётом
// новых размеров экрана:
// wParam - сод. нов. глубину цвета
// LOWORD(lParam) - сод. нов. ширину экрана в пикс.
// HIWORD(lParam) - сод. нов. высоту экрана в пикс.
...
x := ;
y := ;
cx := ;
cy := ;
...
//
SetWindowPos (Form1.Handle, HWND_TOPMOST, x, y, cx, cy, SWP_SHOWWINDOW);
end;
end;
inherited WndProc(Message);
end;


Separator   (2002-11-11 10:27:00) [5]

прикинься драйверо видеокарты


hogo   (2002-11-11 09:48:00) [6]

FormStyle:= fsStayOnTop - не помогает.
PowerStrip ведь пришет поверх игр, как?


Separator   (2002-11-11 08:18:00) [7]

повер окон еще можно, а вот повер игр нельзя (точнее только на некоторых можно). Сделай у формы FormStyle:= fsStayOnTop


hogo   (2002-11-11 08:13:00) [8]

Поверх игр, поверх окон, любого приложения!


Separator   (2002-11-11 08:08:00) [9]

Поверх чего? Поверх в чем?


Наверх

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