Author Topic: Linie in Paintbox bewegen  (Read 1360 times)

Geronimo

  • Newbie
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« on: May 31, 2005, 07:35:50 pm »
Hi...

bin gerad aufs verrecken an meinem info-beleg und brauch dringend mal hilfe bzw. nen tip.

was muss ich machen, damit ich bei delphi ne einfache linie im fenster mit der maus hin und her bewegen kann.  hab hab null ahnung wie das alles ausschauen muss.

wär echt für jeden tip dankbar oder am besten nen quelltextauszug

vielen dank schonmal

Geronimo

Trääcks

  • Full Member
  • ***
  • Posts: 213
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #1 on: May 31, 2005, 07:59:26 pm »
du gehst bei der paintbox auf ereignisse -> mousemove
dadurch werden mausposition in x und y gespeichert
dann sagst du

Quote
paintbox1.Refresh;
paintbox1.Canvas.MoveTo(x-20,y);
paintbox1.Canvas.LineTo(x+20,y);

mit refresh wird die paintbox auf zurückgesetzt
moveto und lineto sollten klar sein.

s.
Etikette tötet
Stell dir vor es sind Prüfungen und keiner geht hin

n-w

  • Hero Member
  • *****
  • Posts: 1011
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #2 on: May 31, 2005, 08:00:06 pm »
Du kannst zwei Fkt. schreiben:
MouseButtonDown + Up oder so. So könntest du zumindest eine geg. Linie anklicken und beim loslassen neu zeichnen. Mit der Bewegung würde ich es mit FormMouseMove versuchen.

Was möchtest du genau machen?

Geronimo

  • Newbie
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #3 on: May 31, 2005, 08:55:10 pm »
Quote
Originally posted by Trääcks@31.5. 2005 - 18:59
du gehst bei der paintbox auf ereignisse -> mousemove
dadurch werden mausposition in x und y gespeichert
dann sagst du

Quote
paintbox1.Refresh;
paintbox1.Canvas.MoveTo(x-20,y);
paintbox1.Canvas.LineTo(x+20,y);

mit refresh wird die paintbox auf zurückgesetzt
moveto und lineto sollten klar sein.

s. [/b]
danke, das war schonmal verdammt hilfreich

kannst du mir auch sagen, wie ich an die horizontale linie eine dazu senkrechte, die sich mit bewegt ranbastele..

Geronimo

  • Newbie
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #4 on: May 31, 2005, 09:17:13 pm »
Quote
Originally posted by n-w@31.5. 2005 - 19:00
Du kannst zwei Fkt. schreiben:
MouseButtonDown + Up oder so. So könntest du zumindest eine geg. Linie anklicken und beim loslassen neu zeichnen. Mit der Bewegung würde ich es mit FormMouseMove versuchen.

Was möchtest du genau machen?
und wie mach ich das genau mit der funktion onmousedown, dass ich ne existierende linie anklicke, die irgendwo hinziehe und neu zeichne bzw. dass da ne flüssige bewegung angezeigt wird?

Trääcks

  • Full Member
  • ***
  • Posts: 213
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #5 on: May 31, 2005, 10:16:04 pm »
du solltest dich wahrschienlcih erstmal mit der syntax und logik auseinander setzen
sonst schreiben wir hier dein programm nach und nach fertig  :innocent:

Quote
paintbox1.Canvas.MoveTo(x-20,y);
heißt soviel wie setze den virtuellen zeichenstift an den punkt (x-20,y)
x = x wert der mauszeigerposition
y = y wert der mauszeigerposition
 
nun steht da aber x-20, das heißt er setzt den stift 20pixel links von der mausspitze, aber immer noch auf der höhe der mausspitze (siehe y)

Quote
paintbox1.Canvas.LineTo(x+20,y);
heißt soviel wie zeichne eine linie zu dem Punkt (x+20, y), (ausgangspunkt siehe moveto)

er zeichnet nun also die linie bis 20 pixel rechts von der mausspitze (x+20) und nachwievor auf der gleichen höhe (y)

dadurch dass der quelltext im unter dem ereignis mousemove steht, werden die drei schritte (refresh, moveto, lineto) immerausgeführt, wenn du deine maus innerhalb der paintbox bewegst. preisfrage: was passiert, wenn du die refresh zeile rausläßt? überlegs dir erstmal und dann probiers mal!

diese linie kannst du dann acuh festsetzen, wenn du mit der maus klickst. dafür bracuhst du dann mousedown. dort schreibst du erstmal das gleiche rein wie bei mousemove. das problem wird aber sein, dass wenn du nach einem klcik die maus bewegst, acuh wieder die prozedure mousemove ausgeführt wird. und dort wird erstmal etwas verherrendes passieren  :innocent:

wie kann man das umgehen, wird dann sicherlich deine nächste frage sein. ganz einfach indem du vorher prüfst ob mit der maus schon einmal geklickt wurde.
das amchst du über ne if anweisung und am besten mit einer globalen variable.

besorg dir einfach mal das buch vom prof. mein mitbewohner hat sich das gekauft. er hatte auch vor dem studium acuh noch nie delphi (hat aber mal zugegebener maßen früher bißchen mit php programmiert) und hat den beleg an nem wochenende gemacht. hab dann auch mal das ding durhcgeblättert und fand das ding auf den ersten blick nicht schlecht. sind hilfreiche tipps drin.

will deinen post damit nicht gänzlich abblocken, sondern dich lediglihc darauf hinweisen, dass es nix bringt quelltexte von anderen zusammen schnippeln zu lassen. damit würdeste spätestens zur prüfung auf die nase fallen. prüfung soll wohl komplett ohne rechner geschehen. sprich du kannst noch ncihtmal die syntaxhilfe von delphi befragen

hope it helps
s.
Etikette tötet
Stell dir vor es sind Prüfungen und keiner geht hin

n-w

  • Hero Member
  • *****
  • Posts: 1011
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #6 on: May 31, 2005, 11:00:10 pm »
Kann Trääcks nur zustimmen. Die Hilfe kannst du dir selbst durchlesen.

In der MouseDown Prozedur kannst du auswerten, wo hingeklickt wurde -> ob dort eine Linie ist + kannst dann die MouseMove Prozedur aktivieren usw.

Das Buch find ich auch ok, obwohl relativ viel unnützer Text drinn steht. Ich hatte vorher kein Delphi, hab den Beleg an ca. einem Tag programmiert - dabei halt immer mal ins Buch geschaut bzw. die Hilfe genutzt.

Geronimo

  • Newbie
  • *
  • Posts: 7
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #7 on: June 01, 2005, 11:52:51 pm »
Quote
Originally posted by n-w@31.5. 2005 - 22:00
Kann Trääcks nur zustimmen. Die Hilfe kannst du dir selbst durchlesen.

In der MouseDown Prozedur kannst du auswerten, wo hingeklickt wurde -> ob dort eine Linie ist + kannst dann die MouseMove Prozedur aktivieren usw.

Das Buch find ich auch ok, obwohl relativ viel unnützer Text drinn steht. Ich hatte vorher kein Delphi, hab den Beleg an ca. einem Tag programmiert - dabei halt immer mal ins Buch geschaut bzw. die Hilfe genutzt.
Besten Dank für euren tip mit dem buch...

habt mir das heute mal zu gemüte geführt und nach knapp 8 stunden  war mein beleg fertig, hätte ich nie mit gerechnet, dass ich nen lauffähiges programm hinbekomme, aber wird wirklich alles gut  beschrieben.

geronimo

Trääcks

  • Full Member
  • ***
  • Posts: 213
  • Karma: +0/-0
    • View Profile
    • http://
Linie in Paintbox bewegen
« Reply #8 on: June 02, 2005, 12:07:06 am »
naja es geht doch. man muss sich eben manchmal einfach nur mal aufraffen.

und ich meine acht stunden dafür dass du noch keinen stich von delphi hattest. da muss ich echt mal respekt aussprechen!!  :sorcerer:

Glückwunsch!
Etikette tötet
Stell dir vor es sind Prüfungen und keiner geht hin