Autor Beitrag
DonDonat
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 28.12.10 15:46 
Hi Community :D
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 :D
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 28.12.10 15:54 
Hallo und :welcome:

user profile iconDonDonat hat folgendes geschrieben Zum zitierten Posting springen:
(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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: Di 28.12.10 21:59 
Hey,

is einfacher als es aussieht:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 30.12.10 11:22 
Danke ich werds glei mal ausprobieren.

PS: Danke für die schnelle und anfänger freundliche antwort :-)
DonDonat Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 31.12.10 12:10 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Hey,

is einfacher als es aussieht:
ausblenden Quelltext
1:
2:
beim Klick auf die Paintbox:
  prüfen ob das der 1. Punkt ist (am besstem mit variable, die die Anzahl der Punkte pürft)



MfG Bergmann


Also ich bekomm das irgendwie net hin O.o
Ich hab versucht:

ausblenden 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:
procedure TForm1.Image1Click(Sender: TObject);
var p:integer; 
begin

p:=.........//Hier weiß ich net wie ich p die anzahl der Mausklicks zuweisen soll

if p=1 then
begin
p:=TPoint;
Image1.Canvas.MoveTo:=p;
end;

else

begin

Image1.Canvas.LineTo:=p;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.LineTo:=TPoint;
p:=0;
end;


Kann mir wer helfen xD ?

Danke im Vorraus und MFG DonDonat

Moderiert von user profile iconMartok: Delphi-Tags gesetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :lol:
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 31.12.10 17:19 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Danke für den tipp aber ich habs versucht :X und bin gescheitert...


ausblenden 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:
procedure TForm1.Image1Click(Sender: TObject);
var p:TPoint;
    firstklick:boolean;
begin
if firstklick then
begin
p:=TPoint
Image1.Canvas.MoveTo:=p;
end
else
begin

Image1.Canvas.LineTo:=p;
end;
p:= NOT p;


end;

procedure TForm1.Button1Click(Sender: TObject);
var p: TPoint;
begin

Image1.Canvas.LineTo:=p;

end;


Hab da extrem viele Fehler drinne weiß aber nicht wie ich sie lösen kann :X
Wenn mir wer helfen könnte danke im vorraus :D

Moderiert von user profile iconMartok: Delphi-Tags repariert
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: Sa 01.01.11 18:01 
Hey,

scoll mal ganz hoch in der Unit, da steht irgendwo
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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 :D
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 03.01.11 20:42 
user profile iconDonDonat hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich einer variablen den ersten punkt (erste prosition des mausklicks) zuweisen =?

Allgemein kannst Du so die Maus-Koordinaten relativ zur Form bestimmen:
ausblenden Delphi-Quelltext
1:
mausKoordinate := Form1.ScreenToClient(Mouse.CursorPos); // TPoint					

Die Funktion ScreenToClient und die Klasse TMouse befinden sich in der Unit Controls.

Grüße
DonDonat Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 04.01.11 18:07 
user profile iconDonDonat hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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:
ausblenden 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 :D

MFG DonDonat

Moderiert von user profile iconNarses: Delphi-Tag repariert.
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Do 06.01.11 15:51 

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 06.01.11 16:00 
user profile iconDonDonat hat folgendes geschrieben Zum zitierten Posting springen:
So das funktioniert aber nicht
Was mich das wundert, wenn ich da nur mal schnell nen Auge draufwerfe... :roll:
user profile iconDonDonat hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Image1Click(Sender: TObject);
var p:TPoint;
    firstklick:boolean;
    M:TPoint;
begin
[..]
m:= NOT m;


end;
Voxe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win XP, Win 7
Delphi 7 prof
BeitragVerfasst: Do 06.01.11 17:10 
Hallo,

mit:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
DonDonat Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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