Текущий архив: 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.48 MB
Время: 0.008 c