Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Работа с Bitmap-оми


Автор: Guest 16.12.2003, 10:17
Уважаемые госпада программисты, подскажите плз!

Есть программа, в ней штук двадцать процедур, каждая из которых по мере надобности подсасывает в себя Bitmap-ы, (Bit.Free; делать нельзя sad.gif ).

Проблем через 20-30 итераций все это дело аккуратно падает со словами, что мол нет такой ерунды в файле ресурсов....Файл ресурсов не используется. confused.gif

Квештанс: Могу ли я по окончании отработки всех процедур очистить всю область памяти занятую под картинки. confused.gif

Зараниее спасибо!!!

Автор: Seti 16.12.2003, 11:24
Код в студию!

Автор: Unregistered 16.12.2003, 17:32
Код
procedure MoveX(Row, NGrid: integer);
var
 r: integer;
 Rect: TRect;          
 bit: TBitmap;        
 BitS: string;        
 x: integer;          
 ALeft: array[0..11,0..2] of integer;    
 ARight: array[0..11,0..2] of integer;    
 AUp: array[0..2,0..11] of integer;      
 ADown: array[0..2,0..11] of integer;    
 AGeneral: array[0..11,0..11] of integer;

begin
 randomize;
 r:= random(6)+1;
 If NGrid = 2 then
   begin
     aright[Row, 0]:=aright[Row, 1];
     aright[Row, 1]:=aright[Row, 2];
     aright[Row, 2]:=r;
     for x:= 0 to 2 do
        begin
          BitS:= CreatePath(aright[row, x]);
          bit:= TBitmap.Create;
          bit.LoadFromFile(BitS);
          Rect:= Form1.DrawGrid2.CellRect(x, row);
          Form1.DrawGrid2.Canvas.Brush.Bitmap := bit;   // - Рисуем
          Form1.DrawGrid2.Canvas.FillRect(Rect);        ///
        end;
   end
 else if Ngrid = 3 then
   begin
     aleft[Row, 2]:=aleft[Row, 1];
     aleft[Row, 1]:=aleft[Row, 0];
     aleft[Row, 0]:=r;
     for x:= 2 downto 0 do
        begin
          BitS:= CreatePath(aleft[row, x]);
          bit:= TBitmap.Create;
          bit.LoadFromFile(BitS);
          Rect:= Form1.DrawGrid3.CellRect(x, row);
          Form1.DrawGrid3.Canvas.Brush.Bitmap := bit;   // - Рисуем
          Form1.DrawGrid3.Canvas.FillRect(Rect);        ///
        end;
    end
 else if Ngrid = 4 then
   begin
     aup[2, Row]:=aup[1, Row];
     aup[1, Row]:=aup[0, Row];
     aup[0, Row]:=r;
     for x:= 2 downto 0 do
       begin
        BitS:= CreatePath(aup[x, row]);
        bit:= TBitmap.Create;
        bit.LoadFromFile(BitS);
        Rect:= Form1.DrawGrid4.CellRect(row, x);
        Form1.DrawGrid4.Canvas.Brush.Bitmap := bit;   // - Рисуем
        Form1.DrawGrid4.Canvas.FillRect(Rect);        ///
      end;
    end
 else if Ngrid = 5 then
   begin
     adown[0, Row]:=adown[1, Row];
     adown[1, Row]:=adown[2, Row];
     adown[2, Row]:=r;
     for x:= 0 to 2 do
        begin
          BitS:= CreatePath(adown[x, row]);
          bit:= TBitmap.Create;
          bit.LoadFromFile(BitS);
          Rect:= Form1.DrawGrid5.CellRect(row, x);
          Form1.DrawGrid5.Canvas.Brush.Bitmap := bit;   // - Рисуем
          Form1.DrawGrid5.Canvas.FillRect(Rect);        ///
        end;
  end;
end;


В краце.....сия процедура двигает картинку в одном из 4-х ДравГридов (3х12). Первая картинка вылетает, смещаются две стоящие за ней, на место последней встает другая картинка, выбранная случайным образом.....



Автор: Полудненко Олег 16.12.2003, 22:54
Ещё раз: почему нельзя писать .фриconfused.gifconfused.gif

Автор: Seti 17.12.2003, 02:51
в этом участке кода указатель на экземпляр Form1.DrawGrid2.Canvas.Brush.Bitmap замещается указателем на экземпляр bit класса TBitmap

Form1.DrawGrid2.Canvas.Brush.Bitmap := bit

попробуй копировать содержимое объекта bit в Bitmap с помощью Assign:

Form1.DrawGrid2.Canvas.Brush.Bitmap.Assign(bit)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)