Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Pen.Style-Varianten nur bedingt erkennbar (https://www.delphipraxis.net/157322-pen-style-varianten-nur-bedingt-erkennbar.html)

delphianfänger123 7. Jan 2011 15:44

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!

Fussball-Robby 7. Jan 2011 16:07

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:
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;
Dann wird die Linie gepunktet.
Viele Grüße

delphianfänger123 7. Jan 2011 18:22

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:
FillChar(Array,SizeOf(Array),0);
bei MouseUp hinbekommen!

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?

delphianfänger123 8. Jan 2011 18:22

AW: Pen.Style-Varianten nur bedingt erkennbar
 
Zitat:

Edit3: Habe gerade eben gemerkt, das wohl doch nicht alles ganz richtig läuft. Bei eine Stiftgröße > 1 sieht man keine Striche bzw. Punkte mehr. Was ist da denn los?
Weiß niemand wie man das lösen kann? :(

rollstuhlfahrer 8. Jan 2011 18:25

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

delphianfänger123 8. Jan 2011 18:46

AW: Pen.Style-Varianten nur bedingt erkennbar
 
Hm, hat ein Speicherleck irgendwelche folgen? Oder is das halt nur unschön programmiert?

rollstuhlfahrer 8. Jan 2011 18:54

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

delphianfänger123 8. Jan 2011 19:05

AW: Pen.Style-Varianten nur bedingt erkennbar
 
Zitat:

Und jetzt in deinem Fall: Die Linie, die bei dir gezeichnet werden soll, müsste immer bei (0, 0) anfangen.
Hm, okay. Aber eigentlich ist das ja nicht so, die Linie beginnt ja immer da wo ich die linke Maustaste runterdrücke. :?:

rollstuhlfahrer 8. Jan 2011 23:22

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

delphianfänger123 9. Jan 2011 12:46

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:

Habe gerade eben gemerkt, das wohl doch nicht alles ganz richtig läuft. Bei eine Stiftgröße > 1 sieht man keine Striche bzw. Punkte mehr. Was ist da denn los?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.
Seite 1 von 2  1 2      

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