Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2007, 14:12   #1
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию проблемы со скринсейвером

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


Код
Код:
type

PScreenJoke=^TScreenJoke;

TScreenJoke=record
AllColors,oneSize:boolean;
ParticularColor:TColor;
LimitOfSize,Wait:cardinal;
end;

const
colors:Array [0..21] of TColor=
(clBlack,clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal,clGray,
clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,clLTGray,
clDKGray,clWhite,clMoneyGreen,clSkyBlue,clCream,clMedGray);

procedure SetScreenJoke(m:PscreenJoke; LimitOfSize,Wait:cardinal; OneSize:boolean=false; AllColors:boolean=true; ParticularColor:TColor=clnone);
          begin
           m^.AllColors:=AllColors;
           m^.LimitOfSize:=LimitOfSize;
           m^.Wait:=Wait;
           m^.oneSize:=OneSize;
           if not AllColors then m^.ParticularColor:=ParticularColor;
          end;

procedure Jeans(struct:pointer);
          Var hdcDesk: THandle; c:TBrush; Ifcol:boolean;
          X, Y: Integer; SX,SY,size,sizelimit,time:cardinal; col:TColor;
          begin
          randomize;
          with PScreenJoke(struct)^ do
          begin
           Ifcol:=AllColors;
           sizelimit:=LimitOfSize+1;
           if OneSize then size:=sizelimit;
           if not ifcol then col:=ParticularColor;
           time:=Wait;
          end;
          hdcDesk := GetWindowDC (GetDesktopWindow);
          c := TBrush.Create;
          SX:=GetSystemMetrics(SM_CXSCREEN);
          SY:=GetSystemMetrics(SM_CYSCREEN);
          if not ifcol then
          begin
          c.Color:=col;
          SelectObject (hdcDesk, C.Handle);
          end;
          repeat
          X := Random (SX);
          Y := Random (SY);
          if size<>sizelimit then size:=Random(sizelimit);
          if ifcol then
          begin
          c.Color:=colors[random(22)];
          SelectObject (hdcDesk, C.Handle);
          end;
          Ellipse (hdcDesk, X - size, Y - size,
          X + size, Y + size);
          sleep(time);
          until false;
          ReleaseDC (GetDesktopWindow,hdcDesk);
          c.Free;
          end;
Хотел сделать это культурненько, как скринсайвер с окном настроек в свойствах экрана и чтобы по нажатию клавиши убирались последствия, а не путём диспетчера задач, да вот только все кружочки появляються тогда не прямо на рабочем столе а на фоне экрана, а если и появляются то вылезает ошибка
canvas does not allow drawing - пробовал заносить в bitmap текущую копию экрана с помощью BitBlt а потом canvas.draw(bitmap), подскажите чё-надо сделать
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 23.10.2007, 14:18   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

А если поверх рабочего стола поместить форму без рамки и рисовать на ней
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с WIN+D Altera Общие вопросы Delphi 4 15.08.2008 15:55
Проблемы с Mozilla KsanDra JavaScript, Ajax 1 29.10.2007 11:44
Проблемы с DLL Дмитрий2006 Общие вопросы C/C++ 5 15.10.2007 12:43
Проблемы с FPC Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 1 10.07.2007 17:09
проблемы с INI delphi Общие вопросы Delphi 4 10.04.2007 00:28