![]() |
Re: hDC überzeichnet zu unbestimmten zeiten alles
Male in ein TBitMap und zeige über dieses alles im Ganzen an. (entweder direkt auf dem Form.Canvas oder auf einer TPaintBox)
DoubleBuffering kannst'e abschalten. |
Re: hDC überzeichnet zu unbestimmten zeiten alles
Und hier etwas Beispielcode:
![]() |
Re: hDC überzeichnet zu unbestimmten zeiten alles
jetzt bekomme ich nach ca 50 sekunden diese fehlermeldung
Delphi-Quellcode:
Erste Gelegenheit für Exception bei $75A89617. Exception-Klasse EOutOfResources mit Meldung 'Fehler beim Erstellen des Fenster-Gerätekontexts'. Prozess Proj_gEvo.exe (4780)
|
Re: hDC überzeichnet zu unbestimmten zeiten alles
Kein Wunder, wenn du den Code von ganz von oben in einer Schleife laufen lässt. Ich sehe nirgends ein DeleteObject(), weshalb du dir damit die GDI-Ressourcen mit Pens und Brushes volljauchst.
|
Re: hDC überzeichnet zu unbestimmten zeiten alles
Delphi-Quellcode:
wo überlade ich hier welche ressourcen ?
procedure TgEvo.BtStartClick(Sender: TObject);
begin Label1.Visible:=False; Label2.Visible:=False; Label3.Visible:=False; Label4.Visible:=False; Trackbar1.Visible:=False; Trackbar2.Visible:=False; Trackbar3.Visible:=False; Trackbar4.Visible:=False; BtStart.Visible:=false; BorderStyle:= bsNone; ///FormStyle:= fsStayOnTop; BoundsRect:= Monitor.BoundsRect; PaintBox.Width:= gEvo.Width; PaintBox.Height:= gEvo.Height; BMP.Width:= PaintBox.Width; BMP.Height:= PaintBox.Height; Erzeuge_und_Zeichne; Application.OnIdle:=IdleHandler; end; procedure TgEvo.FormCreate(Sender: TObject); begin OrganismusID:=0; ProduzentID:=0; BMP:= TBitMap.Create; end; procedure TgEvo.Paint; Var i: integer; begin Brush:= CreateSolidBrush(clWhite); SelectObject(BMP.Canvas.Handle, Brush); Pen:= CreatePen(PS_SOLID,10,clPurple); SelectObject(BMP.Canvas.Handle, Pen); Rectangle(BMP.Canvas.Handle,0,0,gEvo.Width,gEvo.Height); MoveToEx(BMP.Canvas.Handle,2,2,NIL); LineTo(BMP.Canvas.Handle,gEvo.Width-2,2); LineTo(BMP.Canvas.Handle,gEvo.Width-2,gEvo.Height-2); LineTo(BMP.Canvas.Handle,2,gEvo.Height-2); LineTO(BMP.Canvas.Handle,2,2); for i := 1 to ProduzentID do begin Produzent[i].Koerper; end; for i := 1 to OrganismusID do begin Organismus[i].Bewegung; end; for i := 1 to ProduzentID do begin Produzent[i].Kollision; end; SetBkMode(BMP.Canvas.Handle, TRANSPARENT); TextOut(BMP.Canvas.Handle,7,7,PWChar(IntToStr(Frames)+' FpS; '+IntToStr(Sekunden)+' Sek'),10+Length(IntToStr(Frames))+Length(IntToStr(Sekunden))); BitBlt(PaintBox.Canvas.Handle, 0, 0, BMP.Width, BMP.Height, BMP.Canvas.Handle, 0, 0, SrcCopy); end; procedure TgEvo.Erzeuge_und_Zeichne; Var RanStartX, RanStartY, Ran2StartX, Ran2StartY, RanGroesse, RanLeben, i: Integer; begin for I := 1 to 6 do begin OrganismusID:=OrganismusID + 1; Randomize; RanStartX:=Random(gEvo.Width-200)+100; RanStartY:=Random(gEvo.Height-200)+100; Organismus[OrganismusID]:= TOrganismus.Create(RanStartX,RanStartY,50,1000,Random(360),55,250,6); end; for I := 1 to 6 do begin ProduzentID:=ProduzentID + 1; Ran2StartX:=Random(gEvo.Width-200)+100; Ran2StartY:=Random(gEvo.Height-200)+100; RanGroesse:=Random(70)+30; RanLeben:=RanGroesse*20; Produzent[ProduzentID]:= TProduzent.Create(Ran2StartX,Ran2StartY,RanGroesse,RanLeben); end; end; procedure TgEvo.IdleHandler(Sender: TObject; var Done: Boolean); begin StartTime:= GetTickCount; Paint; DrawTime:= GetTickCount - StartTime; Inc(TimeCount, DrawTime); Inc(FrameCount); if TimeCount >= 1000 then begin Frames:= FrameCount; Inc(Sekunden); TimeCount:= TimeCount - 1000; FrameCount:= 0; end; Done:= false; end; |
Re: hDC überzeichnet zu unbestimmten zeiten alles
![]() Zitat:
|
Re: hDC überzeichnet zu unbestimmten zeiten alles
ohh man ..... :D sowas "einfaches"
vielen vielen dank leute jetzt läuft es einwandfrei und ich kann mich um die wichtigen nicht-graphischen sachen kümmern :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz