Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mit Maus zeichnen / malen (https://www.delphipraxis.net/72433-mit-maus-zeichnen-malen.html)

bwolf 30. Jun 2006 08:39


Mit Maus zeichnen / malen
 
Hi all!

bin grad dabei ein Nachrichtensystem zu schreiben, mit dem man auf einem Touchscreen Nachrichten mit einem Stift schreiben kann.
Hier ist auch mein Problem:
Ich benutze eine TPaintbox, und im onMouseMove Event färbe ich den entsprechenden Pixel ein:

PaintBox1.Canvas.Pixels[X,Y] := clRed;

Allerdings entsteht dann beim Zeichnen keine durchgehende Linie, sondern es entstehen zwischen den einzelnen Pixeln lücken, die, wenn man die Maus schneller bewegt, entsprechend größer werden.

Meine Frage:
Is die TPainbox die falsche Komponente dafür, oder muß da ein Puffer eingebaut werden oder wie mach ich das ? :gruebel:

Für ein paar Tips wär ich sehr dankbar, hab googel schon ne Weile genervt, aber leider ohne Erfolg :/

Danke schonmal,
greets ben

atreju2oo0 30. Jun 2006 09:06

Re: Mit Maus zeichnen / malen
 
ist eigentlich nicht so schwer... ;O)
Benutz einfach die Befehle moveto und lineto
Damit wird dann automatisch zwischen dem letzten und dem neuen Punkt ne Linie gezogen.

bwolf 30. Jun 2006 09:27

Re: Mit Maus zeichnen / malen
 
Hi,

also wüßte nicht was das bringen soll ??
MoveTo bewirkt doch das selbe, wie wenn ich die PenPos setze.
Und mit LineTo kann ich den Endpunkt angeben, wohin die Linie gezogen werden soll.

Delphi-Quellcode:
PaintBox1.Canvas.MoveTo(X,Y);
PaintBox1.Canvas.LineTo(X+1,Y+1);
bewirkt genau das selbe wie:

Delphi-Quellcode:
PaintBox1.Canvas.Pixels[X,Y] := clRed;
Oder hab ich nich kapiert worauf die hinaus willst?

Thx für eure Hilfe,
greets Ben

ste_ett 30. Jun 2006 09:35

Re: Mit Maus zeichnen / malen
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    SollGezeichnetWerden, ErsterZug: Boolean;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (ErsterZug) then
  begin
    ErsterZug := False;
    MoveTo(X, Y);
  end;
  if (SollGezeichnetWerden) then
    LineTo(X, Y);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ErsterZug := True;
end;

end.
So war es gemeint. :)

Muetze1 30. Jun 2006 09:36

Re: Mit Maus zeichnen / malen
 
Du sollst beim MouseDown ein MoveTo() machen und bei dem MouseMove() jeweils nur ein LineTo() zu den X, Y Koordinaten die du bekommen hast. Dann sind diese von dir beschriebenen Lücken weg, da er eine Linie zeichnet anstatt eine Lücke zu lassen.

/EDIT: Rote Box??

bwolf 30. Jun 2006 09:39

Re: Mit Maus zeichnen / malen
 
Danke Muetze, für diese Erklärenden Worte ;)
Dachte ich mir doch fast das ich es net geschnallt hab ^^

Ach und thx @ ste_ett für den eben geposteten Source :-D

Thx a lot!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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