Autor |
Beitrag |
DonDonat
Hält's aus hier
Beiträge: 9
|
Verfasst: Di 28.12.10 15:46
Hi Community
Und zwar bevor ihr ich runter macht ich bin noch delphi anfänger ^.^
Ich arbeite mit delphi 7 seit ende august......
So und jetzt zu meinem problem: Ich muss ein programm schreiben mit dem ich zeichnen kann also:-->beim klick auf die zeichenflache wird eine linie gezogen beim nächsten klick ist die linie zuende, beim nächsten wird vom endpunkt der ersten linie eine zweite gezeichnet....... und zum schluss soll dan beim klick auf einen button das vieleck geschlossen werden
Also ich hab mir natürlich von meinem infolehrer erst mal ein paar tipps geholt aber er gab mir nur einen zettel mit den seiner meinung nach wichtigsten komponennten
(Zuerst über die Canvas eigenschaft-->.Pen, .PenPos, MoveTo, LineTo)
Und ich wollte nur mal nachfragen wie ich das anstellen soll.
(hab mir gedacht das er erst mal beim ersten klick einen Punkt auf der Leinwand festleagt, vom dem aus dan LineTo zum nächsten mausklick usw...... weiß aber net ob das stimmt hab zwar gegoogelt bin aber net schlau draus geworden)
Bitte um anfängerverständliche antworten
Danke im vorraus und MFG DonDonat 
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 28.12.10 15:54
Hallo und
DonDonat hat folgendes geschrieben : | (hab mir gedacht das er erst mal beim ersten klick einen Punkt auf der Leinwand festleagt, vom dem aus dan LineTo zum nächsten mausklick usw...... |
Dann mach das doch. MoveTo setzt die Zeichenposition und LineTo kennst du ja schon.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 28.12.10 21:59
Hey,
is einfacher als es aussieht:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| beim Klick auf die Paintbox: prüfen ob das der 1. Punkt ist (am besstem mit variable, die die Anzahl der Punkte pürft) wenn es der 1. Punkt is, dann... den Punkt zischenspeichern (ich glau das war TPoint) dann den Zeichenstift der Canvas auf den Punkt verschieben (MoveTo) wenn nich der 1. Punktt, dann... Linie zeichnen (LineTo)
baim Klick auf deinen Button: Linie zum 1. (gespeicherten) Punkt zeichnen (LineTo) Variable zum zählen der Punkte zurücksetzen |
wenn du das jetzt so der Reihe nach in Code umwandelst sollte das funktionieren.
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Do 30.12.10 11:22
Danke ich werds glei mal ausprobieren.
PS: Danke für die schnelle und anfänger freundliche antwort 
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 31.12.10 12:10
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 31.12.10 12:21
Naja, du packst die Variable als Feld unter private und zählt die bei jedem Klick hoch. Dann kannst du die Variable abfragen.
Fertig gezählt gibt es das natürlich nicht. 
|
|
der organist
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: Fr 31.12.10 12:27
ich würde das mit dem Zählen nicht mit ner Integervariablen machen. Da du nur zwei Möglichkeiten hast (erster oder zweiter Klick..) eignet sich doch ne Booleanvariable.
Mit der prüfst du, ob es der erste Klick ist, wenn es dieser nicht ist, dann ist es der zweite. Und bevor irgendwelche Merkwürdigkeiten kommen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if Firstklick then begin ... end else begin ... end;
Firstklick:=NOT Firstklick; |
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Fr 31.12.10 17:19
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 31.12.10 17:20
Vor allem musst du die Variable wie gesagt als Feld unter private schreiben. Denn wenn du die lokal deklarierst, ist der Wert beim nächsten Klick logischerweise weg. 
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 01.01.11 16:49
Sorry das ich frage aber:
Wo soll das private hin und was bringt ne privat variable ?.? (die hatten wir bis jtzt nämlich net :X)
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Sa 01.01.11 18:01
Hey,
scoll mal ganz hoch in der Unit, da steht irgendwo
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type TForm1 = class(TForm) private public end; |
wenn du da unter das private jetzt deine Variable deklarierst, dann "gehört" die sozusagen der Form1. Und kann auch nur von Methoden in der Unit oder von Methoden der Form1 gelesen und geschrieben werden. Das macht das ganze übersichtlicher, weil man bei zig. Tausend globalen Variablen schnell durcheinander kommt.
MfG Bergmann.
p.s.: Frohes Neues
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
Für diesen Beitrag haben gedankt: DonDonat
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 03.01.11 19:32
Ok hab die Private variable vereinbart aber trotzdem meine Frage:
Wie kann ich einer variablen den ersten punkt (erste prosition des mausklicks) zuweisen =?
Wenn mir irgendwer das erklären könnte wäre ich fast wunschlos glücklich xD
MFG DonDonat 
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 03.01.11 20:42
DonDonat hat folgendes geschrieben : | Wie kann ich einer variablen den ersten punkt (erste prosition des mausklicks) zuweisen =? |
Allgemein kannst Du so die Maus-Koordinaten relativ zur Form bestimmen:
Delphi-Quelltext 1:
| mausKoordinate := Form1.ScreenToClient(Mouse.CursorPos); |
Die Funktion ScreenToClient und die Klasse TMouse befinden sich in der Unit Controls.
Grüße
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Di 04.01.11 17:52
Könnte ich mir das auch irgendwie einfacher machen indem ich irgendwie .Polyline benutze ?.?
(Sorry das ich frage weiß aber net was .Polyline bringt....)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 04.01.11 18:07
DonDonat hat folgendes geschrieben : | Könnte ich mir das auch irgendwie einfacher machen indem ich irgendwie .Polyline benutze ?.? |
So stimmt es...
Mit Polyline musst du dir halt alle Punkte in einem Array merken. Das hat den Vorteil, dass du die auch noch weißt und ggf. korrigieren kannst wie bessere Zeichenprogramme. Ob du das brauchst...
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Do 06.01.11 15:40
Das mit dem Polyline war ja nur ne idee wußte ja net was das bringt^^
An Marc. --> ScreenClient(Mouse.CursPos) nimmt wenn ich nicht irre nur die Position des Cursers das bringt mir im dem fall aber nix
weil ich ja die Position des Mausklicks habe will......
Also ich habe jetzt mal versucht mir als anfangsprosition ein Shape zu nehmen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.Image1Click(Sender: TObject); var p:TPoint; firstklick:boolean; M:TPoint; begin p:=Shape1.ClientOrigin; if firstklick then begin m:=Form1.ScreenToClient(Mouse.CursPos); Image1.Canvas.MoveTo:=p; end else begin
Image1.Canvas.LineTo:=m; end; m:= NOT m;
end;
procedure TForm1.Button1Click(Sender: TObject); var p: TPoint; begin
Image1.Canvas.LineTo:=p;
end; |
So das funktioniert aber nicht daher meine Frage an Marc. --> ScreenClient(Mouse.CursPos) nimmt wenn ich nicht irre nur die Position des Cursers oder ?.?
Bitte Hilft mir wer bei meinem Programm und sagt mir was ich falsch gemacht hab?^^
Danke
MFG DonDonat
Moderiert von Narses: Delphi-Tag repariert.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 06.01.11 15:51
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 06.01.11 16:00
|
|
Voxe
      
Beiträge: 41
Win XP, Win 7
Delphi 7 prof
|
Verfasst: Do 06.01.11 17:10
Hallo,
mit:
Delphi-Quelltext 1: 2:
| procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
hast du in X und Y die Mausposition beim Clicken.
Gruß Voxe
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
DonDonat 
Hält's aus hier
Beiträge: 9
|
Verfasst: Do 06.01.11 17:31
Erst mal danke für die schnelle Antwort^^ Und ja kla m:= NOT m kann ja net gehn xD
Und Voxe eine frage an dich : wenn ich das einsetzte hab ich da die position des mausklicks nur wenn ich den Button drücke oder wie soll ich die beiden zeilen verstehen ?^^
Wäre nett wenn du mir mal ne kurtze erklärung zu den 2 zeilen gibst binn noch anfänger :-/
Zuletzt bearbeitet von DonDonat am Do 06.01.11 17:35, insgesamt 1-mal bearbeitet
|
|