OK, aber wie gebe ich ein Array frei?
Habs mit
Array.Free;
versucht, also wie bei Bitmaps, aber da kommt nen Fehler.
Und ich hätte da noch eine andere Frage:
Inzwischen hat mein Prog mehrere Bitmaps.
Delphi-Quelltext
1: 2: 3: 4:
| public
Hintergrund : TBitmap; HGPunkte,HGSpannbaum : TBitmap; |
Die Hintergrundbitmap wird immer noch wird beim starten bemalt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TF_1.FormCreate(Sender: TObject); begin
Hintergrund := TBitmap.Create; Hintergrund.Canvas.Brush.Color := clWhite; Hintergrund.Canvas.Pen.Color := clWhite; Hintergrund.Width := PB_Oberflaeche.Width; Hintergrund.Height := PB_Oberflaeche.Height; Hintergrund.Canvas.Rectangle(0,0,Hintergrund.Width,Hintergrund.Height); end; |
In OnPaint wird die OffScreenBitmap Hintergrund auf meine PB geladen und auf Click Punkte gemalt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TF_1.PB_OberflaechePaint(Sender: TObject); begin
BitBlt(PB_Oberflaeche.Canvas.Handle, 0, 0, Hintergrund.Width, Hintergrund.Height, Hintergrund.Canvas.Handle, 0, 0, SrcCopy); end;
procedure TF_1.PB_OberflaecheClick(Sender: TObject); var Point : TPoint; begin
GetCursorPos(Point); Point := PB_Oberflaeche.ScreenToClient(Point); Hintergrund.Canvas.Brush.Color := clBlack; Hintergrund.Canvas.Pen.Color := clBlack; Hintergrund.Canvas.Rectangle(Point.x-3,Point.y-3,Point.x+3,Point.y+3); PB_Oberflaeche.Repaint; end; |
In einer weiteren click procedure erstell ich die anderen beide Bitmaps und weise darauf Hintergrund zu, dann zeichne ich in einer Schleife Linien auf die HGSpanbaum Bitmap. Solange bleiben nur die schwarzen Punkte sichbar, denn ich löse ja kein Repaint aus.
Löse ich jetzt in einer anderen Click procedure Repaint aus, wird eine bmp mit Linien angezeigt...
Das versteh ich nicht, ich zeichne meine Linien doch auf HGSpannbaum und lass mir Hintergrund anzeigen, da sollten doch gar keine Linien drauf sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TF_1.B_RechneClick(Sender: TObject); HGPunkte := TBitmap.Create; HGSpannbaum := TBitmap.Create; HGPunkte := Hintergrund; HGSpannbaum := Hintergrund; for AnzeigeschleifeSB := 0 to PunkteLaufVar - 2 do begin HGSpannbaum.Canvas.MoveTo(Punkte[Spannbaum[AnzeigeschleifeSB].Von].x,Punkte[Spannbaum[AnzeigeschleifeSB].Von].y); HGSpannbaum.Canvas.LineTo(Punkte[Spannbaum[AnzeigeschleifeSB].Nach].x,Punkte[Spannbaum[AnzeigeschleifeSB].Nach].y) end; end;
procedure TF_1.B_ZeigePunkteClick(Sender: TObject); begin
Hintergrund := HGPunkte; PB_Oberflaeche.Repaint; end; |