AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

VCL-Paintbox: Wie komplett neu zeichnen lassen?

Ein Thema von Der schöne Günther · begonnen am 27. Mai 2016 · letzter Beitrag vom 27. Mai 2016
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.172 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

VCL-Paintbox: Wie komplett neu zeichnen lassen?

  Alt 27. Mai 2016, 18:06
Ich verstehe Folgendes nicht:

Ein leeres Formular. Man platziere eine TPaintBox und einen TSplitView :

Delphi-Quellcode:
  object PaintBox1: TPaintBox
   Left = 0
   Top = 0
   Width = 585
   Height = 299
   Align = alClient
   OnPaint = PaintBox1Paint
   ExplicitLeft = 272
   ExplicitTop = 120
   ExplicitWidth = 105
    ExplicitHeight = 105
  end
  object SplitView1: TSplitView
   Left = 435
   Top = 0
   Width = 200
   Height = 299
   CloseStyle = svcCompact
   DisplayMode = svmOverlay
   OpenedWidth = 200
   Placement = svpRight
   TabOrder = 0
  end
(Und in den SplitView noch einen Button zum Auf- und zuklappen)

Warum liefert folgender Code:

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
begin
   SplitView1.Opened := not SplitView1.Opened;
end;

procedure TForm8.FormCreate(Sender: TObject);
begin
   PaintBox1.Canvas.Pen.Width := 3;
end;

procedure TForm8.PaintBox1Paint(Sender: TObject);
var
   paintRect:   TRect;
   newColor:   TColor;
begin
   paintRect := PaintBox1.ClientRect;
   PaintBox1.Canvas.Brush.Color := Random($FFFFFF);
   PaintBox1.Canvas.FillRect(paintRect);

   paintRect.Inflate(-10, -10);
   PaintBox1.Canvas.Pen.Color := Random($FFFFFF);
   PaintBox1.Canvas.Ellipse(paintRect);
end;
Ein Ergebnis wie das Video im Anhang?
  1. Die Paintbox wird komplett neu gezeichnet wenn ich das Fomular in der Größe ändere. So habe ich das erwartet
  2. Wenn man den SplitView auf und zu macht wird nur ein Teil der Paintbox neu gezeichnet, der Rest bleibt "alt".

Den zweiten Punkt möchte ich nicht. Ich möchte dass alles zusammenpasst. Ist die PaintBox die falsche Komponente für mich?
Angehängte Dateien
Dateityp: zip Eine harmlose MP4-Datei.zip (137,2 KB, 14x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: VCL-Paintbox: Wie komplett neu zeichnen lassen?

  Alt 27. Mai 2016, 18:17
Zwei Ideen:

1) Die Paintbox auf ein Panel setzen und das auf alClient und auf Resize reagieren

2) Zum SplitView1.Opened noch ein Paintbox.Refresh (o.ä.) auslösen
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.172 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: VCL-Paintbox: Wie komplett neu zeichnen lassen?

  Alt 27. Mai 2016, 18:25
Das OnResize-Event wird leider nicht ausgelöst wenn sich der SplitView darüber legt. Aber Das OnOpened und OnClosed-Event für den SplitView sind schonmal ein Anfang. Dann kann man die Paintbox noch einmal komplett neu zeichnen lassen, dann stimmt alles wieder.

Danke schon mal


// Update:
Ich habe jetzt statt der PaintBox ein TImage genommen, und alles läuft wie es soll.

Geändert von Der schöne Günther (27. Mai 2016 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#4

AW: VCL-Paintbox: Wie komplett neu zeichnen lassen?

  Alt 27. Mai 2016, 19:08
Du kannst auch im TSplitView.OnClosed ein PaintBox1.Invalidate aufrufen. Das hilft zwar nicht während der Animation, aber sorgt danach für ein Neuzeichnen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.172 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: VCL-Paintbox: Wie komplett neu zeichnen lassen?

  Alt 27. Mai 2016, 19:19
Ja, das war ja im Endeffekt was stahli vorgeschlagen hat.

Nur sollte das spezielle Teil mit der Paintbox eigentlich nichts von irgendwelchen SplitViews wissen, der hat mit dem nämlich gar nichts am Hut

Mit dem TImage bin ich jetzt eigentlich glücklich geworden. Da flackert auch nichts mehr wenn man den SplitView auf und zu macht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz