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 probleme bei zeichenprogramm!! (https://www.delphipraxis.net/87430-probleme-bei-zeichenprogramm.html)

malzeit 28. Feb 2007 16:55


probleme bei zeichenprogramm!!
 
hallo ich muss in Into ein zeichenprogramm programieren habe jetzt allerdings das problem das ich nicht richtig weiter komme!
Ich habe bis jetzt ein einfaches Vieleck.
Möchte jetzt ein Quader programieren und würde mich freuen wenn ihr mir helfen könntet.
Hier mal mein Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

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

type
    TPunkt = Record
          xpos,ypos:integer
          end;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Image1: TImage;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Button2: TButton;
    Button1: TButton;


    procedure Image1Click(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
 

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  geklickt:boolean=false;
  punkta,punktb:TPunkt;

implementation

{$R *.dfm}





procedure TForm1.Image1Click(Sender: TObject);
var ypos,xpos:integer;

begin
 xpos:=mouse.CursorPos.X-image1.Left;
 ypos:=mouse.CursorPos.y-image1.Top-27;
 image1.Canvas.MoveTo(xpos,ypos);
 image1.Canvas.lineto(xpos+1,ypos);
 edit3.Text:=IntToStr(ypos);
 edit4.Text:=IntToStr(xpos);
 if not geklickt then
 begin
   punkta.xpos:=mouse.CursorPos.X-image1.Left;
   punkta.ypos:=mouse.CursorPos.y-image1.Top-27;
   geklickt:=true;
   edit5.Text:=IntToStr(punkta.xpos);
   edit6.Text:=IntToStr(punkta.ypos);
 end
 else
 begin
   punktb.xpos:=mouse.CursorPos.X-image1.Left;
   punktb.ypos:=mouse.CursorPos.y-image1.Top-27;
   geklickt:=false;
   edit7.text:=IntToStr(punktb.xpos);
   edit8.text:=IntTOStr(punktb.ypos);
 end;


end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   edit1.Text:=IntToStr(mouse.CursorPos.X);
  edit2.Text:=IntToStr(mouse.CursorPos.y);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   if geklickt=false then
   image1.canvas.rectangle(punkta.xpos,punkta.ypos,punktb.xpos,punktb.ypos)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    if geklickt=false then
    image1.Picture.Bitmap.Canvas.r(punkta.xpos,punkta.ypos,punktb.xpos,punktb.ypos);
end;

end.
[edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen. ;-) Mfg, Daniel[/edit]

bitsetter 28. Feb 2007 19:47

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin,

dein Programm hat irgendwie überhaupt nicht funktioniert. Ich habe mal ein neues geschrieben, wo man mit der Maus einen Quader zeichnen kann.

malzeit 1. Mär 2007 16:04

Re: probleme bei zeichenprogramm!!
 
Danke schön ich habe es nit meinen zusammen gebracht und es funktioniert super.
Kann man das vielleicht so machen das es erst aktiviert wird wenn ich einen Button geclickt habe oder geht das nicht?

bitsetter 1. Mär 2007 16:29

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich habe jetzt den Code so abgeändert, dass der Quader erst gezeichnet wird, nachdem man auf dem Button klickt.

malzeit 3. Mär 2007 17:56

Re: probleme bei zeichenprogramm!!
 
Danke schön du hast mir sehr weriter geholfen.
Wenn ich noch irgendein Problem habe melde ich mich noch einmal.

Nochmals vielen DANK

malzeit 7. Mär 2007 17:32

Re: probleme bei zeichenprogramm!!
 
Hallo ich bins noch mal habe deine sachen verarbeitet und bin schon gut weiter gekommen. Habe auch ne Pyramide draus gebaut.
Allerdings möchte ich jetzt mit der maus einfach malen. Das Problem was ich habe besteht darin, dass wenn ich etwas gemalt habe und die maus loslasse um an einer anderen Stelle weiter zu machen zieht es immer einen Strich vom letzten Punkt bis zu meinen Neuen Punkt.
Wie könnte ich das weg bekommen?
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    oldPos:TPoint;
    hoehe,breite:integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var a,b:integer;
begin
 edit1.Text:=IntToStr(mouse.CursorPos.X);
  edit2.Text:=IntToStr(mouse.CursorPos.y);
  a:=StrToInt(edit1.Text);
  b:=StrToInt(edit2.Text);
  if ssLeft in Shift then
   begin

    image1.Canvas.Pen.Style:=graphics.pssolid;
    image1.Canvas.LineTo(x,y);



    end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.DoubleBuffered:=true;
image1.Canvas.Rectangle(0,0,image1.Width,image1.Height);
image1.Canvas.Pen.Style:=graphics.psDot;
image1.Canvas.Brush.Style:=bsClear;
end;

end.

shmia 7. Mär 2007 18:03

Re: probleme bei zeichenprogramm!!
 
Zitat:

Zitat von malzeit
Allerdings möchte ich jetzt mit der maus einfach malen. Das Problem was ich habe besteht darin, dass wenn ich etwas gemalt habe und die maus loslasse um an einer anderen Stelle weiter zu machen zieht es immer einen Strich vom letzten Punkt bis zu meinen Neuen Punkt.
Wie könnte ich das weg bekommen?

Der Parameter Shift muss ausgewertet werden:
Delphi-Quellcode:
  if ssLeft in Shift then
  begin
     // linke Maustaste ist gedrückt ...

bitsetter 7. Mär 2007 18:29

Re: probleme bei zeichenprogramm!!
 
Hallo,

füge doch mal folgenden Code deinem Programm hinzu:

Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    image1.Canvas.Pen.Style:= pssolid;
    image1.Canvas.MoveTo(x, y);
  end;
end;
Jetzt müsste es eigentlich funktionieren.

malzeit 8. Mär 2007 12:26

Re: probleme bei zeichenprogramm!!
 
bitsetter wenn ich deins eingebe passier garnichts.
Wenn ich die zeile shmia eingebe funktioniert es so wie ich das möchte.


Trotzdem danke euch beiden!!

malzeit 8. Mär 2007 13:30

Re: probleme bei zeichenprogramm!!
 
muss mich korigieren bitsetter deins geht doch!!

Hab aber noch ne frage wenn ich ein Quader mit deinem Programm zeichne sieht man diesen.
Wenn ich jetzt nen neuen zeichne verschwindet der alte kann man das so machen das man trotzdem den alten noch sieht?

ich denke es liegt an den folgenden Zeilen
Delphi-Quellcode:
begin
  if ssLeft in Shift then
  begin
  Image1.Canvas.Brush.Style:= bsSolid;
  Image1.Canvas.Pen.Style :=graphics.psSolid;
  Image1.Canvas.Rectangle(0,0,Image1.Width, image1.Height);
und zwar wenn ich das "bsSolid"tausche bleibt der alte Quader stehen allerding erkennt man dann den neuen nur noch als schwarze Fläche

TonyR 8. Mär 2007 14:21

Re: probleme bei zeichenprogramm!!
 
Zitat:

Zitat von malzeit
Delphi-Quellcode:
...
  Image1.Canvas.Brush.Style:= bsSolid;
...
und zwar wenn ich das "bsSolid"tausche bleibt der alte Quader stehen allerding erkennt man dann den neuen nur noch als schwarze Fläche

Hast du mal in der Delphi-Hilfe nachgesehen, was es alles für Brush-Typen gibt und was diese bewirken???
Dann würdest du es nämlich logisch finden, dass bssolid eine schwarze Fläche zeichnet :wink:

Übrigens versteh ich dein Problem nicht... solange man das Image nicht komplett übermalt oder es leert, dann kann der vorher gezeichnete Inhalt nicht verschwinden!!!

bitsetter 8. Mär 2007 15:28

Re: probleme bei zeichenprogramm!!
 
Hi,

Zitat:

Zitat von malzeit
muss mich korigieren bitsetter deins geht doch!!

ich hatte mich auch schon deswegen gewundert, denn bei mir funktionierte es ja.


Du hast es schon richtig erkannt, also entferne doch einfach die 3 Zeilen Code:
Delphi-Quellcode:
 
  (*Image1.Canvas.Brush.Style:= bsSolid;
  Image1.Canvas.Pen.Style :=graphics.psSolid;
  Image1.Canvas.Rectangle(0,0,Image1.Width, image1.Height);*)

malzeit 9. Mär 2007 12:44

Re: probleme bei zeichenprogramm!!
 
da zeichnet es twar noch den Quader allerdings ziemlich komisch mit schwarzen linien und punkten.

Der alte Quader bleibt allerdings stehen wenn ich einen neuen zeichne. Blos halt ziemlich schwarz, das hatte ich nämlich auch schon probiert!!

bitsetter 9. Mär 2007 13:06

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

bei mir funktioniert es jedenfalls wenn ich die 3 Zeilen rausnehme, das Projekt habe ich angehängt. Wenn gar nicht anders, dann zeige uns doch mal deinen Code oder das Programm.

TonyR 9. Mär 2007 13:19

Re: probleme bei zeichenprogramm!!
 
Eigentlich würde auch für den Anfang schon mal ein Screenshot des "Quaders" helfen... denn ich z.B hab überhaupt keine Ahnung, was du meinst... also was deiner Meinung nach nicht richtig gemalt wird :wink:

malzeit 9. Mär 2007 14:05

Re: probleme bei zeichenprogramm!!
 
wie kann ich das so machen das du das gleich runter laden kannst?
Da musst du das nicht extra in Delphi einbinden!!

TonyR 9. Mär 2007 14:10

Re: probleme bei zeichenprogramm!!
 
Zitat:

Zitat von malzeit
wie kann ich das so machen das du das gleich runter laden kannst?...

:?: Einfach hier als Post hochladen :gruebel: Siehe unten bei "Attachment hinzufügen! :wink:

Zitat:

Zitat von malzeit
...Da musst du das nicht extra in Delphi einbinden!!

Was muss man denn in Delphi einbinden??? Ich wollte bloß mal einen Screenshot sehen und Bitsetter möchte doch nur den Code sehen... also brauchst du da bloß die gesamte Unit posten (hast du ja schon mal so ähnlich gemacht), oder was meinst du?

bitsetter 9. Mär 2007 14:22

Re: probleme bei zeichenprogramm!!
 
Hi,

du klickst auf "Antwort erstellen" und dort unten auf den Button "durchsuchen".

malzeit 9. Mär 2007 15:29

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier mal bisheriges Programm

bitsetter 9. Mär 2007 22:22

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

dein Programm habe ich jetzt umgeschrieben, ich hoffe mal dass es jetzt deinen Vorstellungen entspricht.
War doch etwas aufwendiger, da ich mit
Delphi-Quellcode:
Canvas.Pen.Mode:= pmNotXor;
gearbeitet habe.

malzeit 14. Mär 2007 15:46

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
dank das ist super

habe jatzt eine linie programmiert die man mit der maus zieht.
Mein Problem ist das man die linie beim ziehen nicht sieht, ich wollte das allerdings so machen wie im Paint das man die linie zieht.
Bekommt man das hin?

bitsetter 14. Mär 2007 20:06

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

siehe Anhang:

malzeit 15. Mär 2007 14:52

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
schau mal ich habe das jetzt eingebunden allerdings funktioniert das da nicht mehr.
Habe auch schon probiert etwas zu änder allerdungs ging dann gar nichts mehr!

bitsetter 15. Mär 2007 18:55

Re: probleme bei zeichenprogramm!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

du hast bei onMouseMove
Delphi-Quellcode:
if ssLeft in Shift then
vergessen.


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