Pen.Style-Varianten nur bedingt erkennbar
Hallo!
Ich habe wieder ein Problem mit meinen Zeichenprogramm. Ich habe mehreren Buttons verschiedene Zeichenstile(Punkte, gestrichelt, Durchgezogener Strich)zugeordnet. Das funktioniert soweit ganz gut, jedoch sind die Varianten "Punkte" und "gestrichelt" nur auf der Paintbox erkennbar, wenn ich mich mit der Maus sehr schnell über diese bewege. Wenn ich jedoch einen Körper mit diesen Varianten zeichne, erkennt man die untersch. Zeichenstil perfekt. Das Problem ist also nur beim freien Zeichnen mit dem Pen vorhanden. Lässt sich dieses Problem irgendwie beheben? Und wenn ja, wie? Für Hilfe wäre ich wieder sehr dankbar! |
AW: Pen.Style-Varianten nur bedingt erkennbar
Ich vermute mal, dass du beim freien Zeichnen immer die vorherige Position des Cursors mit der jetzigen per Canvas.LineTo() verbindest. Wenn du den Cursor dabei langsam bewegst, entstehen halt sehr viele einzelne kurze Linien, die eventuell nicht länger als ein paar Pixel sind. Es ist einleuchtend, dass die Punktung der Linie dabei nicht sichtbar wird, denn wie will man eine 1Pixel lange Linie punkten?
Als Lösung fällt mir spontan eine Sache ein: Merke dir die Punkte in einem Array of TPoint. Dann zeichnest du sie per Canvas.Polyline:
Delphi-Quellcode:
Dann wird die Linie gepunktet.
var
Pt: Array of TPoint; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin SetLength(Pt, Length(Pt) + 1); Pt[High(Pt)].X := X; Pt[High(Pt)].Y := Y; Canvas.Polyline(Pt); end; end; Viele Grüße |
AW: Pen.Style-Varianten nur bedingt erkennbar
Okay! Klingt einleuchtend,danke schonmal.
Irgendwie bekomm ich es aber auf die Weise nicht hin, mit gedrückter Maustaste zu zeichnen wie bei der MoveTo/LineTo-Methode :? Edit: Okay, hab das jetzt mehr oder weniger, jedoch hab ich mit der Methode jetzt das Problem, dass wenn ich mit dem Pen an einer anderen Stelle der paintbox weitermale als an der, an der ich aufgehört habe, eine "Verbindungslinie" vom End- zum Startpunkt erscheint :? Edit2: hab es nun mit
Code:
bei MouseUp hinbekommen!
FillChar(Array,SizeOf(Array),0);
Vielen Dank nochmal, Fussball-Robby! :) Edit3: Habe gerade eben gemerkt, das wohl doch nicht alles ganz richtig läuft. Bei eine Stiftgröße > 1 sieht man keine Stricke bzw. Punkte mehr. Was ist da denn los? |
AW: Pen.Style-Varianten nur bedingt erkennbar
Zitat:
|
AW: Pen.Style-Varianten nur bedingt erkennbar
Zu Edit2: Du baust damit ein riesiges Speicherleck auf. Statt das Array zu leeren solltest du stattdessen die Größe des Arrays auf 0 setzen und beim nächsten Zeichnen normal weitermachen.
Bernhard |
AW: Pen.Style-Varianten nur bedingt erkennbar
Hm, hat ein Speicherleck irgendwelche folgen? Oder is das halt nur unschön programmiert?
|
AW: Pen.Style-Varianten nur bedingt erkennbar
Allgemein: Ja, mit jeder Mausbewegung braucht deine Anwendung mehr Speicherplatz im RAM. Du hast maximal 2 GB und dann ist Schluss. 2 GB klingt jetzt viel, ich habe es aber schon geschafft, dass einer Anwendung nach etwa 20 Sekunden der Speicher ausgegangen ist.
Und jetzt in deinem Fall: Die Linie, die bei dir gezeichnet werden soll, müsste immer bei (0, 0) anfangen. Bernhard |
AW: Pen.Style-Varianten nur bedingt erkennbar
Zitat:
|
AW: Pen.Style-Varianten nur bedingt erkennbar
Dann mal mal ein bisschen und beobachte dabei mit dem TaskManager oder dem ProcessExplorer die Speicherlast deines Programmes. Sie müsste immer weiter steigen und eigentlich nicht geringer werden (kommt auf den Rest an).
Bernhard |
AW: Pen.Style-Varianten nur bedingt erkennbar
Okay, der Speicherverbrauch steigt wirklich, wenn auch sehr geringfügig. Ich glaube, da müsste ich schon mehrere Stunden hintereinander ununterbrochen zeichnen, um den Speicher vollzukriegen!
Ich setze dennoch mal vorsichtshalber den Array immer auf Null zurück. Sicher ist sicher. Danke für den Tipp! :thumb: Mein anderes Problem besteht jedoch immernoch :( Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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