Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Вниз

Who know ASMa ? 


ATLANTIDO   (2002-03-09 16:00) [0]

Не в том форуме конечно ... но : требуется
вывести на экране надпись ("осталось 5 минут", как в компьютерных клубах), во время когда моя прога перекрыта другой.
Думаю другими средствами это не получится.
Заранее благодарен.



VuDZ   (2002-03-09 16:19) [1]

а при чём тут асм?

> Думаю другими средствами это не получится.

То же мне гуру нашёлся, под win32 assembly юзается для оптимизации, и может быть ещё для вызова некоторых ф-ий прерываний, типа 0x2E.


> Не в том форуме конечно ... но : требуется

Ты бы ещё рассылку устроил всем вподряд.
Рисуй на DC(0) И смотри, что получиться



_Oleg   (2002-03-09 20:32) [2]

>VuDZ © (09.03.02 16:19)
Может, лучше сначала вызвать GetDesktopWindow() и получить дескриптор рабочего стола? А то может не везде работать.



SV   (2002-03-09 20:58) [3]

А почему тебя не устраивает API Timer+ спящий поток? А Asm в данном случае вообще не нужен.



ATLANTIDO   (2002-03-09 23:24) [4]

По рекомендациям VuDZ сделал так:

procedure TForm1.TimeMes(s:string);
var
DC: HDC;
Canva: TCanvas;
B: TBitmap;
W, H, i : integer;
begin
for i:=1 to 30 do
begin
Canva := TCanvas.Create;
B := TBitmap.Create;
DC := GetDC(0);
try
Canva.Handle := DC;
Canva.Font.Handle := CreateFont(50, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, nil);
W := Canva.TextWidth(s);
H := Canva.TextHeight(s);
B.Width := W;
B.Height := H;
B.Canvas.CopyRect(Rect(0, 0, W, H), Canva,Rect(0, 0, W, H));
Canva.TextOut(0,0,s);
finally
ReleaseDC(0, DC);
sleep(100);
Canva.CopyRect(Rect(0, 0, W, H), B.Canvas,Rect(0, 0, W, H));
B.Free;
Canva.Free
end
end;
end;

пока работает ...



copyr25   (2002-03-10 00:00) [5]

...
public
procedure DeskTopPaint(Sender:Tobject);
end;
...
var DeskTop:TCanvas;
...
procedure TForm1.DeskTopPaint(Sender:Tobject);
var
DeskTop:TCanvas;
begin
DeskTop:=TCanvas.Create;
try
DeskTop.Handle:=GetDC(0);
DeskTop.Brush.Style:=bsClear;
with DeskTop.Font do begin
Color:=clRed; Size:=20; Name:="MS SanSerif"; Style:=[fsBold];
end;
DeskTop.TextOut(200,200,"Иногда с ней лучше не спорить!");
ReleaseDC(0, DeskTop.handle);
finally DeskTop.Free;
end;

end;



ATLANTIDO   (2002-03-10 15:46) [6]

copyr 25 : почему лучше на рабочем столе рисовать ?



VuDZ   (2002-03-10 18:02) [7]

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

> Может, лучше сначала вызвать GetDesktopWindow() и получить
> дескриптор рабочего стола? А то может не везде работать.

А ги де не работает?
Если под win9x - тоя с ней обшался постольку-поскольку, и для неё не пишу, наоело высматривать win95, 98 - not supported in MSDN :<

Так что это всё надо проверять, а судя по тому. что сказал ATLANTIDO, под win9x работает, я так понял, под winNT он ещё не пробовал :>

если делать только для winNT, то можно создать оый вирЬтуальный декстоп, переключиться на него, отобразить надпись на 2-5 сек, переключиться обратно... И без глюков, и юзвери напряжены :>>



ATLANTIDO   (2002-03-10 19:21) [8]

to VuDZ : а под XP мой код потянет ?



VuDZ   (2002-03-10 19:32) [9]

я так делал помеши на экране, примерно так:
GetDC(0)
SetPoint(random_colr, x, y);
смотрелось - как испорченный телевизор :>



ATLANTIDO   (2002-03-10 19:42) [10]

Т. е. работает под XP ?



Anatoly Podgoretsky   (2002-03-10 19:44) [11]

Вообще на слова не стоит опираться, ты сам должен проверить под нужными ОС



ATLANTIDO   (2002-03-10 19:49) [12]

Проблема в том что у меня винт ~700 Mb , и вторая ось туда
станет только если все ценное повытирать.



Anatoly Podgoretsky   (2002-03-10 19:55) [13]

Ну тогда остается надеяться только на везение



ATLANTIDO   (2002-03-10 19:56) [14]

Согласен :(



VuDZ   (2002-03-10 21:34) [15]

ну, у меня работает.
вот тебе примерчик слоаного телека:
основное. надеюсь поймёшь

bool g_bCanWork = true;

void painter (void*){
HDC dc = GetDC(0);
if (!dc)
return;

int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);

printf("Press Any Key To Cancel\n");

do {
for (int y = 0; y < cy; ++y)
for (int x = 0; x < cx; ++x)
SetPixel(dc, x, y, RGB(rand() % 256, rand() % 256, rand() % 256));

} while(g_bCanWork);
}

int main(int argc, char* argv[])
{
HANDLE hProc = (HANDLE)(_beginthread(painter, 1024, NULL));
getch();
g_bCanWork = false;
WaitForSingleObject(hProc, INFINITE);
return 0;
}



VuDZ   (2002-03-10 21:35) [16]

почему табы не форматируются!!!!!!!!!!!
точнее через одно место??????



ATLANTIDO   (2002-03-10 22:42) [17]

Понял.




Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.067 c
1-57800           ded_di                2002-04-04 11:18  2002.04.18  
хороший richedit


1-57667           vlv                   2002-04-04 21:32  2002.04.18  
Проблема с MDIForm


7-57901           ATLANTIDO             2002-01-25 13:35  2002.04.18  
кЛАВА


3-57601           AlexMey               2002-03-27 12:18  2002.04.18  
ADO, Access и Delphi.


1-57807           Di_wind               2002-04-06 19:03  2002.04.18  
RxLib