Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

PaintBox (Frage)

rolfnorrenbrock / 7 Antworten / Baumansicht Nickles

Hallo ich bins wieder. Habe gerade ein kleines Zeichenprogramm erstellt. Mein Problem darin besteht das ich keinen "Neu" Button habe. Ich brauche einfach nur einen Button der alles was in meiner Paintbox ist wieder löscht. Ich komm einfach nicht darauf. Mit "Clear" hab ich auch schon ausprobiert aber dann kommt eine Fehlermeldung. Es wäre nett wenn ihr mir helfen könntet.

bei Antwort benachrichtigen
Borlander rolfnorrenbrock „PaintBox (Frage)“
Optionen
Zeichenprogramm
Dann solltest Du besser ein TImage verwenden, da die Inhalte einer TPaintBox nicht gespeichert sind und beim Repaint (Neuzeichnen z.B. eines vorher durch ein anders Fenster verdeckten bereiches)...

alles was in meiner Paintbox ist wieder löscht
Sollte mit der Methode TPaintBox.Repaint(); funktionieren, beim Neuzeichnen wird übrigens das Ereignis OnPaint ausgelöst.
Beim TImage würde man einfach die gesammte Bildfläche mit einem ausgefüllten Rechteck der gewünschten Hintergrundfarbe übermalen.


CU Borlander
bei Antwort benachrichtigen
rolfnorrenbrock Borlander „ Dann solltest Du besser ein TImage verwenden, da die Inhalte einer TPaintBox...“
Optionen

*Sollte mit der Methode TPaintBox.Repaint(); funktionieren*
Funktioniert nicht. Es wird mir eine Fehlermeldung gezeigt (Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt)

bei Antwort benachrichtigen
Borlander rolfnorrenbrock „ Sollte mit der Methode TPaintBox.Repaint funktionieren Funktioniert nicht. Es...“
Optionen

Wenn Du das 1:1 übertragen hast, kann das auch nicht funktionieren...

TPaintBox steht hier ganz allgemein für eine beliebige Componente vom Typ TPaintBox. Wenn Deine PaintBox beispielsweise den Namen PaintBox1 hat, dann verwendest Du
PaintBox1.Repaint();


CU Borlander

bei Antwort benachrichtigen
rolfnorrenbrock Borlander „Wenn Du das 1:1 übertragen hast, kann das auch nicht funktionieren... TPaintBox...“
Optionen

Klappt leider auch nicht. Kommt zwar keine Fehlermeldung aber es passiert nix.
Wenn ich zur Laufzeit auf den Button klicke kommt einmal ganz kurz nur so ein Flackern und mehr nicht. Es ist alles noch da. Ich kann ja mal den Quelltext posten wenn man das darf.

bei Antwort benachrichtigen
rolfnorrenbrock Nachtrag zu: „Klappt leider auch nicht. Kommt zwar keine Fehlermeldung aber es passiert nix....“
Optionen

Die PaintBox muss ja auch nicht unbedingt neu gemacht werden. Da der Hintergrund des Programms sowieso weiß ist kann der Button auch den Hintergrund der PaintBox weiß "übermalen". Dummerweise weiß ich nicht wie das geht. Oder ein Radiergummi das Dinge weiß übermalt wäre auch ganz nett. Im Moment zeichnet mein Programm pro Pixel einen Punkt. Was kann ich machen damit er größer oder dicker zeichnet?

bei Antwort benachrichtigen
Borlander rolfnorrenbrock „Die PaintBox muss ja auch nicht unbedingt neu gemacht werden. Da der Hintergrund...“
Optionen
den Hintergrund der PaintBox weiß "übermalen"
TCanvas.FillRect(Rechteck: TRect);

Was kann ich machen damit er größer oder dicker zeichnet?
Ich vermute mal Du arbeiteste derzeit mit der Pixels Eigenschaft von TCanvas. Damit kannst Du nur jeweis einen einzelnen Pixel manipulieren.
Zum Zeichnen von Linien, kannst Du TCanvas.LineTo(x,y: Integer) verwenden.
Die Farbe und Dicke kannst Du über die Eingenschaft TCanvas.Pen bestimmen.

Würde so arbeiten:
Beim drücken der Maustaste wird mit dem Zeichnen begonnen.
Beim Bewegen der Maus wird gezeichnet, sofern das Zeichnen gerade aktiviert ist.
Beim Loslassen der Maustaste wird das Zeichnen beendet.

Das darfst Du erst mal selbst probieren umzusetzen, bei Fragen stehe ich gerne wieder zur Verfügung...


CU Borlander
bei Antwort benachrichtigen
Borlander rolfnorrenbrock „Klappt leider auch nicht. Kommt zwar keine Fehlermeldung aber es passiert nix....“
Optionen

Hab das mal schnell ausprobiert, also bei mir ist der Inhalt nach einem Repaint weg. Ist aber noch mit der PaintBox, nicht mit dem Image?
Zeichnest Du das dargestellte evtl. im OnPaint Ereignis?

Quelltext posten wenn man das darf.
Das wäre natürlich sehr praktisch...

bei Antwort benachrichtigen