Текущий архив: 2002.04.18;
Скачать: CL | DM;
Вниз
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]Понял.
Страницы: 1 вся ветка
Текущий архив: 2002.04.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.006 c