Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Друзья, как мне скопировать копию рабочего стола в буфер?   Найти похожие ветки 

 
raymond ©   (2004-02-24 16:24) [0]

Друзья, как мне скопировать копию рабочего стола в буфер до появления своей формы? Я делаю, что-то вроде открытки девушке на 8 марта. Будет играть приятная музыка (например, Gregorian "Moments Of Peace"), а на "рабочем столе" будет текст поздравления плюс какие-нибудь симпатичные эффекты. Кстати, пожелания насчет эффектов принимаются.
Братья по разуму! Давайте подарим нашим дамам помимо цветов и открыток еще и продукты нашей, не побоюсь этого слова, интелектуальной деятельности


 
Skier ©   (2004-02-24 16:32) [1]


>  Друзья, как мне скопировать копию рабочего стола в буфер?
>

press PrintScreen when ready...


 
raymond ©   (2004-02-24 16:35) [2]

Skier ©   (24.02.04 16:32) [1]
Друг, ты меня не понял!


 
Skier ©   (2004-02-24 16:37) [3]

BitBlt(...)


 
Игорь Шевченко ©   (2004-02-24 16:54) [4]

Примерно так:
const
 DisplayDCName : WideString = "DISPLAY";
var
{ Эти переменные требуются для BitBlt }
 hdcWin : HDC;           // DC окна
 hdcScreen : HDC;        // DC полного экрана
 hdcScreenCompat : HDC ; // memory DC полного экрана
 hbmpCompat : HBITMAP;   // Содержимое экрана
 bmp : BITMAP;           // Структура для битмапа, куда помещается содержимое
                         // экрана
 fBlt : Boolean;         // TRUE if BitBlt occurred

procedure CaptureScreen (WindowHandle : HWND);
begin
     // Create a normal DC and a memory DC for the entire
     // screen. The normal DC provides a snapshot of the
     // screen contents. The memory DC keeps a copy of this
     // snapshot in the associated bitmap.
     hdcScreen := CreateDCW(PWideChar(DisplayDCName), nil, nil, nil);
     hdcScreenCompat := CreateCompatibleDC(hdcScreen);
     // Retrieve the metrics for the bitmap associated with the
     // regular device context.
     bmp.bmBitsPixel := Byte(GetDeviceCaps(hdcScreen, BITSPIXEL));
     bmp.bmPlanes := Byte(GetDeviceCaps(hdcScreen, PLANES));
     bmp.bmWidth := GetDeviceCaps(hdcScreen, HORZRES);
     bmp.bmHeight := GetDeviceCaps(hdcScreen, VERTRES);
     // The width must be byte-aligned.
     bmp.bmWidthBytes := ((bmp.bmWidth + 15) and (not 15)) div 8;
     // Create a bitmap for the compatible DC.
     hbmpCompat := CreateBitmap(bmp.bmWidth, bmp.bmHeight,
       bmp.bmPlanes, bmp.bmBitsPixel, nil);
     // Select the bitmap for the compatible DC.
     SelectObject(hdcScreenCompat, hbmpCompat);
     // Initialize the flags.
     fBlt := false;
 // Copy the contents of the current screen
 // into the compatible DC.
 BitBlt(hdcScreenCompat, 0, 0, bmp.bmWidth,
        bmp.bmHeight, hdcScreen, 0, 0, SRCCOPY);
 // Copy the compatible DC to the client area.
 hdcWin := GetDC(WindowHandle);
 BitBlt(hdcWin, 0, 0, bmp.bmWidth, bmp.bmHeight,
        hdcScreenCompat, 0, 0, SRCCOPY);
 ReleaseDC(WindowHandle, hdcWin);
 fBlt := true;
end;
 


Извиняюсь, кусок выдран из APIшной демки.


 
raymond ©   (2004-02-25 08:38) [5]

>Skier и Игорь Шевченко
Огромное человеческое СПАСИБО!
Как скопировать рабочий стол до появления формы? Выполнить битблиттинг до комманды CreateForm?


 
Zacho ©   (2004-02-25 08:41) [6]


>  Выполнить битблиттинг до комманды CreateForm?

Ты сам себе ответил :) Кто тебе мешает написать какой-либо код до CreateForm ?


 
raymond ©   (2004-02-25 08:48) [7]

Zacho ©   (25.02.04 08:41) [6]

Ок! Не знаешь, сколько fps можно достичь перерисовывая экран 1024х768 средствами GUI? Под DirectX не программил, не хочется заморачиваться, т.к. времени осталось мало, а успеть нужно!


 
Zacho ©   (2004-02-25 08:50) [8]

Не знаю.


 
raymond ©   (2004-02-25 09:16) [9]

Из эффектов предлагаю скроллинг праздничного поздравления на рабочем столе, на фоне приятной музики.

Какие еще будут предложения?


 
Skier ©   (2004-02-25 09:56) [10]

>raymond ©   (25.02.04 09:16) [9]
Лучше купи девушке хорошие духи и не парься...


 
raymond ©   (2004-02-25 09:59) [11]

> Skier ©   (25.02.04 09:56) [10]

Подарки, цветы, поцелуйчики и так будут. Но хочется еще и так самовыразиться! Тем более, от меня уже ждут подобного шага, я не могу не оправдать надежды своих друзей и знакомых.


 
Skier ©   (2004-02-25 10:01) [12]

>raymond ©   (25.02.04 09:59) [11]

> Но хочется еще и так самовыразиться!

Стихи напиши...


 
raymond ©   (2004-02-25 15:56) [13]

> Skier ©   (25.02.04 10:01) [12]

Стихи в виде поздравления будут...
Ты бы мне бы советик бы дал бы какой эффектик прибамбасить бы!


 
Иван Николаевич Понырев   (2004-02-25 16:20) [14]

плохие лучше не писать совсем


 
Алхимик ©   (2004-02-25 17:46) [15]

Мессагу выводи - типа поздравление от Билли Гейтса и
открывай лоток CD с загодя заложеной денежкой :)


 
DVM ©   (2004-02-25 17:50) [16]


> Ок! Не знаешь, сколько fps можно достичь перерисовывая экран
> 1024х768 средствами GUI?

Мало 5-15 от проца зависит. Загрузка проца будет 100%.


 
raymond ©   (2004-02-26 11:26) [17]

> DVM ©   (25.02.04 17:50) [16]

Понятно... Буду перерисовывать часть экрана...
Как определить производительность процессора? Перед выполнением "основного цикла" прогнать какой-нить свой тестик? А потом использовать большие значения таймера для быстрых процов. Я правильно мыслю?


 
raymond ©   (2004-02-27 09:41) [18]

> Игорь Шевченко ©   (24.02.04 16:54) [4]

Данный кусок кода:
// Copy the compatible DC to the client area.
hdcWin := GetDC(WindowHandle);
BitBlt(hdcWin, 0, 0, bmp.bmWidth, bmp.bmHeight,
       hdcScreenCompat, 0, 0, SRCCOPY);
ReleaseDC(WindowHandle, hdcWin);


нужно и в методе OnPaint окна указывать? Или я что-то не догоняю?


 
raymond_   (2004-02-27 16:22) [19]

Уже скоро Восьмое марта! :)


 
raymond ©   (2004-03-04 10:12) [20]

> Игорь Шевченко ©   (24.02.04 16:54) [4]

Проводил тут эксперименты над HDC и BITMAP... У меня такой вопрос, как мне вывести картинку из TBitmap"a в BITMAP? Задача усложняется тем, что нужно использовать один цвет в качестве прозрачного.
Я понимаю, что можно все сделать, а есть ли универсальный, простой метод?



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

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
3-1077146940
Ve_Ko
2004-02-19 02:29
2004.03.28
Файл-сервер


3-1078054159
ser_ega
2004-02-29 14:29
2004.03.28
DbGrid


7-1073639480
Juliet
2004-01-09 12:11
2004.03.28
Лоток принтера


14-1077793338
Vik_Mix
2004-02-26 14:02
2004.03.28
Где скачать эмулятор К580


1-1079013992
Thick
2004-03-11 17:06
2004.03.28
Компонент в RichEdit