Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.
Seite 1 von 3  1 23      

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