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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2013, 20:25   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию изменить цвет панели в компоненте TFire

Доброго времени. Подскажите, как изменить цвет панели в компоненте TFire, в свойствах инспектора объектов что-то нет, и смотрел исходник, что-то не могу найти. Посмотрите пожалуйста, и подскажите, где там редактировать , чтоб заметить основной цвет этой панели



Код:
procedure TFire.CreateBitmap;
var y,x:Integer;pRow:PByteArray;lpbi:pBITMAPINFO;
  uUsage:Uint;
begin
  if (m_Fire <> nil) then
  begin
          FreeMem(m_Fire);
          m_Fire := nil;
  end;
  m_MaxBurn := Trunc(Height * (N_Max/100));
  if m_Bitmap<>0 then
  begin
    DeleteObject(m_Bitmap);
    m_Bitmap:=0;
  end;
  if m_Feel<>0 then
  begin
    DeleteObject(m_Feel);
    m_Feel:=0;
  end;
  m_nSize := Round(Width *FEdgeRatio);
  GetMem(m_Fire,Width);
  getMem(lpbi,sizeof(TBITMAPINFOHEADER) + (256 * sizeof(TRGBQUAD)));
  lpbi.bmiHeader.biSize := sizeof(TBITMAPINFOHEADER);
  lpbi.bmiHeader.biWidth := Width;
  lpbi.bmiHeader.biHeight := Height;
  lpbi.bmiHeader.biPlanes := 1;
  lpbi.bmiHeader.biBitCount := 8;
  lpbi.bmiHeader.biCompression := BI_RGB;
  lpbi.bmiHeader.biSizeImage := WIDTHBYTES(Width*8) * Height;
  lpbi.bmiHeader.biXPelsPerMeter := 0;
  lpbi.bmiHeader.biYPelsPerMeter := 0;
  lpbi.bmiHeader.biClrUsed := 0;
  lpbi.bmiHeader.biClrImportant := 0;
  uUsage := DIB_RGB_COLORS;
  move( pal,lpbi.bmiColors,  sizeof(TRGBQUAD) * 256 );
  m_pWinDC :=Canvas.Handle;
  m_Bitmap := CreateDIBSection( m_pWinDC, lpbi^, uUsage, Pointer(m_pBits), 0, 0 );
  m_feel   := CreateDIBSection( m_pWinDC, lpbi^, uUsage, Pointer(m_Show), 0, 0 );
  FreeMem(lpbi);
  if m_Bitmap = 0 then Abort;
  for y := 0 to Height-1 do
  begin
     pRow := PByteArray(Integer(m_pBits)+WIDTHBYTES(Width * 8)* y);
     for x := 0 to Width-1 do
     begin
       pRow[x]:= 16;
     end;
  end;
  for y := 0 to Height-1 do
  begin
     pRow := PByteArray(Integer(m_Show)+WIDTHBYTES(Width * 8)* y);
     for x := 0 to Width-1 do
     begin
       pRow[x]:= 16;
     end;
  end;
  m_pMemDC:=CreateCompatibleDC(m_pWinDC);
  m_pOldPalette := SelectPalette(m_pWinDC, m_Palette, FALSE );
  RealizePalette(	m_pWinDC);
  m_pOldBitmap := SelectObject(m_pMemDC, m_Feel );
  for x := 0  to width-1 do m_Fire[x]:= 16;
end;


procedure TFire.BurnPoint( pRow,pNextRow:PByte);
var Off,val:Integer;
  pTarget:PByte;
begin
  off := Rand mod (m_nDistribution +1);
  val := m_nDecay + 1;
  val := Rand Mod val;
  val := pNextRow^ - val;

  if (Rand mod 2)=1 then
  begin
          pTarget := pRow;
          Inc(pTarget, off);
  end
  else
  begin
          pTarget := pRow;
          Dec(pTarget, off);
  end;
  if (val > 16)then
          pTarget^ := val
  else
          pTarget^ := 16;
end;

procedure TFire.RenderFlame;
var pRow, pNextRow:PByteArray;
 xStart, xEnd, x, y,MaxHeat ,off,val:Integer;
begin
	xStart :=(Width - m_nSize) div 2;
	xEnd := xStart + m_nSize + 1;
	pRow := m_pBits;
	for x:=0 to Width-1 do
	begin
          if (x < (xStart + m_nDistribution)) or( x >= (xEnd - m_nDistribution))then
				m_Fire[x] := 16;
	  pRow[x]:= m_Fire[x];
        end;
        pRow:=PByteArray(Integer(pRow)+WIDTHBYTES(Width * 8) * (m_MaxBurn+1));
        pNextRow:=PByteArray(Integer(m_pBits)+WIDTHBYTES(Width * 8) * (m_MaxBurn));
	for y := m_MaxBurn downto 1 do
	begin
                pRow:=PByteArray(Integer(pRow)-WIDTHBYTES(Width * 8) );
                pNextRow:=PByteArray(Integer(pNextRow)-WIDTHBYTES(Width * 8) );
		if (Rand mod 2) = 0 then
		begin
		  for x := 0 to Width-1 do
		  begin
                    try
                    BurnPoint(@pRow[x], @pNextRow[x]);
                    except
                    end;
		  end;
		end
		else
		begin
			for x := Width-1 downto 0 do
			begin
				BurnPoint(@pRow[x], @pNextRow[x]);
			end;
		end;
	end;

	MaxHeat := m_nMaxHeat + 16;

	if  (rand mod(400 - m_nFlammability)) = 0 then
	begin
		off := m_nSize - 5;
		off := rand mod off;
		off := Off+xStart;

		for x := off to off + 4 do
                  m_Fire[x] := 239;
	end;

	for x := xStart to xEnd-1 do
	begin
		if (Ord(m_Fire[x]) < MaxHeat) then
		begin
			val := rand mod m_nChaos+1;
			val :=val- m_nChaos div 2;
			val :=val+ m_nSpreadRate;
			val :=val+ m_Fire[x];
			if ( val > MaxHeat) then
				m_Fire[x] := MaxHeat
			else if ( val < 16) then
				m_Fire[x] := 16
			else
				m_Fire[x] := val;
 	        end
		else
			m_Fire[x] := MaxHeat;
	end;

	if (m_nSmoothness > 0)then
	begin
		xStart :=xStart+ m_nSmoothness;
		xEnd :=xEnd- m_nSmoothness;
		for x := xStart to xEnd-1 do
		begin
			val := 0;
			for y := x - m_nSmoothness to  x + m_nSmoothness do
				val :=val+ m_Fire[y];

			m_Fire[x] := val div (2*m_nSmoothness+1);
		end
	end;

end;
Вложения
Тип файла: rar Tfire.rar (29.0 Кб, 8 просмотров)

Последний раз редактировалось beegl; 02.01.2013 в 20:51. Причина: добавил исходник
beegl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
цвет серии в компоненте chart matbe14 Помощь студентам 0 01.03.2012 06:49
Изменить дизайн кнопки на панели инструментов Microsoft Excel 2007 GARY_X Microsoft Office Excel 1 16.01.2011 23:43
изменить цвет Dimarik HTML и CSS 2 20.07.2010 10:18
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05
сменить цвет линии в компоненте TChart Blondinka Общие вопросы Delphi 1 24.12.2007 15:52