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

Вниз

Вывод текста на экран поверх всего.   Найти похожие ветки 

 
Colt ©   (2003-02-25 09:14) [0]

Пишу программу, в функции которой входит ограничение работы пользователя по времени за компьютером. По истечении срока работы пользователя зак компьютером за 2 мин выдается сообщение об истечении времени, проблема в том, что если пользователь играет игра вылетает и потом по Alt+Tab в неё нельзя вернуться и сохраниться. Знаю что можно выводить текст (рисовать на экране), но проблема в том что его частици потом остаются, т.е. не происходит какбы очистки экрана. Подскажите что сделать можно или дайте ссылку на ресурс с исходником.
Спасибо.


 
Nic_B   (2003-02-25 09:56) [1]

Попробуй так, может чего и получится
1.
DeskTop:=TCanvas.Create;
DeskTop.Handle:=GetDC(0);// Получим Handle Рабочего стола
DeskTop.Brush.Style:=bsClear; // Устанавливаем тип кисти
DeskTop.TextOut(70,10,"ПРИВЕТ ");
ReleaseDC(0, DeskTop.handle);
DeskTop.Free; // Уберем за собой

2.
//по идее должно все перерисовывать
SendMessage(FindWindow("Progman", "Program Manager"),
WM_COMMAND,
$A065,
0);


 
Colt ©   (2003-02-25 12:08) [2]

Извиняюсь а куда это вставить:
SendMessage(FindWindow("Progman", "Program Manager"),
WM_COMMAND,
$A065,
0);
=======================
И я вроде и цвет могу менять и тип кисти, а как менять размер изображённой надписи


 
gsu ©   (2003-02-25 12:16) [3]

А форму с сообщением не хочешь вывести ?


 
Colt ©   (2003-02-25 12:18) [4]

В том то и дело что нет


 
DVM ©   (2003-02-25 12:52) [5]

Причем здесь рисование на десктопе? Если где и рисовать, то на окне той программы, которая сверху. Только делать это надо по таймеру и очень быстро, так как игра будет постоянно обновлять окно и надпись будет исчезать.


 
Colt ©   (2003-02-26 11:29) [6]

Может это делается не так, а появляется форма, которая прозрачная а на ней изображение текста ? С таймером очень быстро это не столь эффективно, я пробовал.


 
DVM ©   (2003-02-26 12:37) [7]


> а появляется форма, которая прозрачная

противоречит:


> В том то и дело что нет


надо рисовать. Все программы такого рода, что я видел рисуют.


 
Colt ©   (2003-02-26 13:39) [8]

тогда как это сделать ?


 
colt ©   (2003-02-27 10:44) [9]

Может есть ещё какие-нибудь идеи ?


 
zorg ©   (2003-03-05 22:38) [10]

какого типа переменная DESKTOP ?


 
DeadMeat ©   (2003-03-05 23:41) [11]

Я согласен с DVM. Надо рисовать. Если попытаешься вывести какую-нибудь формочку, то игрушка тут-же свернётся. Я, например, рисую по мультимедийному таймеру. Почему именно он? Я пробовал все (ну или почти все) таймеры, и только он обеспечил более-менее сносный результат. Но у него есть и свои минусы: некоторые игрушки на слабых машинах подтормаживают в этот момент, и остаётся опасность того, что чёто может глюкануть, а мультимедийный таймер - это такая фтука, шо ежли раз глюканул, то всё... С другой стороны, если очень хоца вывести формочку, то мона попробовать следующее: запомнил handle нужного окна и его состояние (min, max, act), свернул его (либо оно само свернётся, тут уж дело вкуса), по возможности спрятал с глаз людских (чёб лишний раз на ALT+TAB не давили), вывел форму, подождал пока юзверь прочитает то шо ты ему там вывел, осмыслет это всё, и после этого ты прячешь свою мессагу (или чего там у тебя) и разворачиваешь игрушенцию на своё законное место... Правда тут есть свои нюансы: не все игрулины это переживут (у некоторых будет разрыв сердца, но почве не сворачиваемости кро... окон), и ещё не известно какой юзерок попадётся, может он нетерпеливый и очень подозрительный, как нажмёт свою любимую педалину и ... Вообщем поле для идей большое...


 
Style   (2003-03-06 09:45) [12]

Зачем рисовать на Экран???? А если игруха в которая запущена -> использует DIRECTX FullScreen Mode.. Что тогда??

Предварительно сохранив хэнл активного Окна!
Попробуй вывести простой MessageBox
После того как Юзверь прочитал сообщения
Востанови игруху (приложение) сам:
ShowWindow(Handle, SW_NORMAL);


 
Colt ©   (2003-03-11 06:33) [13]

После всяческих эксперементов стал рисовать форму прозрачную поверх всего, игры начинают безбожно тормозить, но ни одна игрушка не выпала. Вот пример, может за место таймера использовать что-нибудь другое, помоему тормоза из-за него:


unit Unit1;
interface

uses
....

type
TMyForm = class(TForm)
CloseButton: TButton;
MyImage: TImage;
Label1: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure CloseButtonClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MyForm: TMyForm;
i,j: Integer;
implementation

uses Unit2;

{$R *.DFM}

procedure TMyForm.FormCreate(Sender: TObject);
begin
i:=0;
j:=0;
Brush.Style:=bsClear;
end;

procedure TMyForm.CloseButtonClick(Sender: TObject);
begin
halt;
end;

procedure TMyForm.Timer1Timer(Sender: TObject);
begin
i:=i+1;
j:=j+1;
Form2.Show;
if i > 5 then
begin
Form2.Close;
Form2.Label1.Caption:= IntToStr(j);
end;
if i = 10 then i:=0;
end;

end.
===================
unit Unit2;
interface
uses
...
type
TForm2 = class(TForm)
MyImage: TImage;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
Brush.Style:=bsClear;
end;

end.


 
Style   (2003-03-11 08:05) [14]

Попробуй воспользоваться одним только API

program Timer;

uses
Windows,
sysutils;

function WinMain(hInstance : HINST; hPrevInstance : HINST;
lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
Var
DC : HDC;
tm: string;
rc: TRect;
visible: boolean;
begin

Visible := true;
repeat
if(Visible)
then
begin
DC := GetDC(0);
SetTextColor(DC,RGB(255,255,255));
SetBkColor(DC,RGB(110,64,255));

rc.Left := 4;
rc.Top := 4;
rc.Bottom := 18;
rc.Right := 100;

tm := FormatDateTime("hh:nn:ss.zzz",time);
DrawText(DC,pchar(tm), Length(tm),rc,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
DeleteObject(dc);
end;
Sleep(1);

if (GetAsyncKeyState(VK_MENU) < 0) and (GetAsyncKeyState(Integer("Q")) < 0) then Halt(0);

if (GetAsyncKeyState(VK_MENU) < 0) and (GetAsyncKeyState(Integer("H")) < 0) then
begin
if(not visible) then visible := true else visible := false;
end;;
until nCmdShow = -1;

result := 0;
end;


begin
WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
end.



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

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

Наверх




Память: 0.51 MB
Время: 0.026 c
14-23311
Filat
2003-04-18 20:12
2003.05.08
Не могу поставить Borland C Bilder 5.0


3-22937
Tomkat
2003-04-18 13:05
2003.05.08
Поик подстроки символов


1-23204
Alek Aaz
2003-04-24 06:20
2003.05.08
Как распечатать выделенный фрагмент текста


14-23384
vopros
2003-04-21 16:40
2003.05.08
Давайте обьединимся и будем зарабатывать деньги.


1-23117
Yegor
2003-04-25 19:09
2003.05.08
ListView.UpdateImage