Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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]

Понял.



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

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

Наверх





Память: 0.48 MB
Время: 0.006 c
3-57657
ol
2002-03-26 15:38
2002.04.18
чем в sql IB можно работать с датами


14-57859
ATLANTIDO
2002-03-10 16:02
2002.04.18
WinXP


1-57751
andr
2002-04-05 14:20
2002.04.18
Очень простой вопрос.


1-57798
Yuriy
2002-04-06 18:24
2002.04.18
как определить имя компонента вызвавшего событие


3-57631
Sergant
2002-03-27 12:39
2002.04.18
Компоненты для поиска/замены и фильтрации





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский