Q&A

  • 안녕하십니까~~처음 프로그램을 작성했는데 메모리누수가 있습니다.
아주 간단한거 같은데 메모리가 4KB씩 주기적으로 올라갑니다. 뭐가 잘못된걸까요 ~~ 초보라서 ㅡ,,ㅡ
시간 주기를 주고 RxRichEdit1과 RxRichEdit2에 글씨를 써서 두개를 번갈아 화면에 표출하게 짤라고 하는데요
imgfile은  Timage입니다. 시간설정해서 돌려보면 표출은 번갈아 잘되는데 메모리를 보면 거의 주기적으로 4KB씩 증가하네요 그리고 시간이 지나면은 죽어버립니다. 도와주십시요  감사합니다. 꾸벅

procedure TForm1.Timer2Timer(Sender: TObject);
  var
    DTime : integer;
    i : Extended;
    Cap : TBitmap;
    TheRect : TRect;
    DC : HDC;
    TimerVar:integer;
begin
        Timer2.Enabled:= True;
        if A=1 then
        ImgFile.Visible := True;
        ImgFile.Enabled := True;
        TimerVar := TimerVar + 1;
        i := TimerVar/SpinEdit3.Value;
        DTime := trunc(i);
        DTime := DTime mod 2;
        Case DTime of
        0 : begin
            Cap := Tbitmap.Create;
            Cap.Width := LedWidth.Value*16;
            Cap.Height := LedHeight.Value * 16;
            RxRichEdit1.PaintTo(Cap.Canvas.Handle,LedWidth.Value*16,LedHeight.Value*16);
            DC := GetDc(RxRichEdit1.Handle);
            Cap.Canvas.Handle := DC;
            Therect := Rect(0,0,LedWidth.Value*16,LedHeight.Value*16);
            ImgFile.Canvas.CopyRect(TheRect,Cap.Canvas,Rect(1,0,LedWidth.Value*16+1,LedHeight.Value*16));
            Cap.Free;
            ReleaseDC(RxRichEdit1.Handle,DC); //표출문안1 생성

            end;
1 : begin
            Cap := Tbitmap.Create;
            Cap.Width := LedWidth.Value*16;
            Cap.Height :=LedHeight.Value*16;
            RxRichEdit2.PaintTo(Cap.Canvas.Handle,LedWidth.Value*16,LedHeight.Value*16);
            DC :=GetDC(RxRichEdit2.Handle);
            Cap.Canvas.Handle := DC;
            Therect := Rect(0,0,LedWidth.Value*16,LedHeight.Value*16);
            //Screen.Canvas.CopyRect(TheRect,Cap.Canvas,Rect(1,0,LedWidth.Value*16+1,LedHeight.Value*16));
            ImgFile.Canvas.CopyRect(TheRect,Cap.Canvas,Rect(1,0,LedWidth.Value*16+1,LedHeight.Value*16));
            Cap.Free;
            ReleaseDC(RXRichEdit2.Handle,DC);

            end; //end of begin

          end; //end of case 내부 1
        if A=0 then
        begin
        ImgFile.Visible := False;
       end;
  end;
0  COMMENTS