Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Paintbox: Inhalt löschen
Bestzeller - Mo 15.12.08 19:52
Titel: Paintbox: Inhalt löschen
Hallo Zusammen
Ich möchte gerne wissen, wie ich das Bild in der Paintbox verschwinden lasse,
denn ich will ein anderes Bild hineinkopeieren, aber wenn ich dies tue erscheint es nur kurz
und das alte bild ist wieder da. Brauch ich vielleicht eine ganz neue Paintbox, weil das zweite Bild kleiner ist?
Delete - Mo 15.12.08 20:30
Reden wir hier von TPaintbox oder von TImage? Bei Ersterem würde ich einfach mit FillRect das Ganze übermalen, bei Zweiterem nil als Picture zuweisen.
Hidden - Mo 15.12.08 20:50
Hi :)
Bei einer paintbox sollte ein einfaches Paintbox1.Repaint; genügen. Beachte allerdings, wie eine Paintbox funktioniert: Sie sollte stets ausschließlich in ihrem OnPaint-Ereignis bemalt werden.
Um also ein neues Bild in eine Paintbox zu laden, deklarierst du eine Feldvariable vom Typ TBitmap. In diese lädst du dann das neue Bild. Im OnPaint sollte nun immer der in der Feldvariable befindlcihe Bild per StretchDraw auf die Paintbox gemalt werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| type TForm1 = class (TForm) Paintbox1: TPaintbox; procedure FormCreate(Sender: TObject); procedure Paintbox1Repaint(Sender: TObject); private FBmp: TBitmap; public end;
procedure TForm1.FormCreate(Sender: TObject); begin FBmp := TBitmap.Create; FBmp.LoadFromFile(); end;
procedure TForm1.Paintbox1Repaint(Sender: TObject); begin Paintbox1.Canvas.StretchDraw(FBmp, Paintbox1.ClientRect); end;
FBmp.LoadFromFile(); Paitnbox1.Repaint; |
mfG,
Dude566 - Mo 15.12.08 21:04
Du kannst den Inhalt mit PaintBox1.Refresh löschen.
turboPASCAL - Di 16.12.08 00:58
Wichtig wäre wohl hier noch zu fragen wie die Paintbox verwendet wird.
Zitat: |
Sie sollte stets ausschließlich in ihrem OnPaint-Ereignis bemalt werden. |
Wenn er dies macht, reicht es nicht einfach mal
Paintbox1.Repaint(); aufzurufen.
;)
Dude566 - Mi 17.12.08 18:20
PaintBox1.Refresh funktioniert doch in jedem Fall.
turboPASCAL - Mi 17.12.08 21:18
Repaint ruft OnPaint auf, wenn darin gemalt wird ist's ja wieder Sichtbar gelle.
Dude566 - Mi 17.12.08 21:55
Ich rede von "Refresh" und nicht "Repaint".
Boldar - Mi 17.12.08 22:31
Aber beim Refresh isses wieder da, sobald es halt neugezeichnet wird :nixweiss: :nixweiss: :nixweiss:
turboPASCAL - Mi 17.12.08 22:54
Refresh, löscht jedes Bild auf dem Bildschirm und zeichnet alles neu.
Repaint, zeichnet jedes Bild auf dem Bildschirm neu, ohne Vorhandenes zu löschen.
Btr. Problemchen:
PaintBox ist eigentlich nur ein Platzhalter mit einem Canvas.
Verwende ein Bitmap welches in der Paintbox dargestellt wird.
Willst du nun etwas löschen, mach es auf dem Bitmap zB. mit FillRect() etc.
in sofern (siehe Anhang)
Bestzeller - Fr 19.12.08 19:54
Hm irgentwie will das nicht ich habs mal so hingeschrieben:
(timer1 und 2 bewegen ein Objekt in der Paintbox;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| timer1.enabled:=false; timer2.enabled:=false; paintbox1.Width:=450; paintbox1.Height:=517; bmp2:=tbitmap.create; bmp2.LoadFromFile(file5); paintbox1.canvas.FillRect(rect(0,0,517,450)) ; bitblt(form1.paintbox1.Canvas.handle,0,0,517,450,bmp2.canvas.handle,0,0,srccopy); |
Das Bild (hier:file5) erscheint zwar kurz, aber dann taucht wieder das Bild auf was davor in die Paintbox kopiert wurde.
Liegt es daran das ich nicht das OnPaint-Ereignis benutze?
Hidden - Fr 19.12.08 20:20
Hi :)
Am besten ist es wohl du stellst deinen bisherigen Quelltext einfach mal vollständig hier rein :)
Zitat: |
Liegt es daran das ich nicht das OnPaint-Ereignis benutze? |
Kann ich so nicht sagen. Ich würde dir aber raten, die PB so zu benutzen, wie sie gedacht ist. Lässt sich sicher schnell udn einfach umschreiben.
mfG,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!