Показать сообщение отдельно
  #2  
Старый 22.01.2013, 13:12
Anklav Anklav вне форума
Прохожий
 
Регистрация: 10.06.2011
Адрес: Харьков
Сообщения: 22
Версия Delphi: 7
Репутация: 10
По умолчанию

Вот то что ты подписал, это и есть присвоение битмапу orig, изображения рабочего стола.

Код:
c.Handle := GetWindowDC(GetDesktopWindow);  //узнаем хандл рабочего стола и присваиваем его хандлу канваса "с"
orig.Canvas.CopyRect(r, c, r); // копируем изображение в битмап

CopyRect(Dest:Trect;Canvas:TCanvas; Source:TRect) Выполняет копирование прямоугольника Source из канвы Canvas в прямоугольник Dest в области самого объекта (нашел в первой ссылке)

А в коде который ты выложил, я вообще не вижу как рисуется затемнение.

Собственно вот здесь у тебя заполняется битмап темп, который и рисует свечение:
Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  i, j, x0, x1, y0, y1, h : Integer;
  O, T : PRGBArray;
begin
  x0 := max(0, X - d);
  x1 := min(orig.Width-1, X + d);
  y0 := max(0, Y - d);
  y1 := min(orig.Height-1, Y + d);
  temp.Canvas.FillRect(r);
  for j := y0 to y1 do begin
    O := orig.Scanline[j];
    T := temp.ScanLine[j];
    for i := x0 to x1 do begin
      h := hypotenuse[Abs(X-i), Abs(Y-j)];
      if h < d then begin
        h := Trunc(h/d*255);
        T[i].rgbtRed := max(0, O[i].rgbtRed - h);
        T[i].rgbtGreen := max(0, O[i].rgbtGreen - h);
        T[i].rgbtBlue := max(0, O[i].rgbtBlue - h);
      end;
    end;
  end;
  Repaint;
end;
Ответить с цитированием