Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-23294
vopros
2003-04-22 13:00
2003.05.08
ЧТо то нас давно не кто не покидал


1-23225
spac
2003-04-25 13:25
2003.05.08
edit


1-23184
Zilog
2003-04-24 17:48
2003.05.08
Организация задержки


1-23147
Pasha
2003-04-24 12:01
2003.05.08
---|Ветка была без названия|---


9-22901
ProTeuS
2002-12-05 11:34
2003.05.08
OpenGL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский