![]() |
Visible Eigenschaften bei Klassen
Hay Community, ich habe eine Frage :D und zwar:
Wie kann ich innerhalb von Klassen die Visible [true/false] Eigenschaften der Klassen ändern? Die Klasse nennt sich "Punkt" und das Objekt "Punkt1". Der Punkt1 ist im Bild "Image1" und soll dem Mauszeiger folgen. Dies habe ich mit den folgenden Anweisungen erfüllt:
Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin Punkt1.setpos(X,Y); Punkt1.zeigen; end; Jetzt habe ich aber das Problem, dass bei jeder Bewegung der Maus ein neuer Punkt erstellt wird und der vorige Punkt nicht gelöscht wird, sodass nach kurzer Zeit ganz viele Punkte auf dem Bild sind. Wie bekomme ich es hin, dass die alten Punkte bei Mausbewegung weggehen? Wäre es logisch ein neues Attribut einzufügen, wenn ja welches? Von meiner Seite aus würde ich überlegen mit visible zu arbeiten, aber ich wüsste nicht genau wo ich das anwenden sollte ( ich habe ne ahnung)... außerdem meint Delphi wenn ich visible auf die Klasse beziehe, dass es visible nicht gibt. -> muss ich dann im Deklarationsteil noch visible:boolean einfügen? In meiner Klasse steht die Procedure
Delphi-Quellcode:
constructor Punkt.create(image:TImage);
begin self.image1:=image; self.image1.canvas.pen.mode:=pmxor; self.x:=0; self.y:=0; end; procedure Punkt.zeichnen; begin self.image1.canvas.ellipse(self.x-10,self.y-10,self.x+10,self.y+10); end; //bei der Erstellung der procedure unsichtbar bitte helfen !! :) Liebe Grüße und Danke im Vorraus Katika :) |
AW: Visible Eigenschaften bei Klassen
Entweder die Originalfarben an den Stellen wegsichern oder einfach Bild neu Laden/Malen(Hintergrund)
|
AW: Visible Eigenschaften bei Klassen
Da du ja mit dem Modus pmXOR arbeitest, musst du einfach nur VOR dem ändern der Position noch einmal zeichnen, damit wieder das ursprüngliche Bild zu sehen ist :wink:
PS: Du musst nicht immer Self vor eigene Variablen schreiben, denen man übrigens i.d.R. gerne ein "F" voranstellt, also z.B. so: FImage :-D |
AW: Visible Eigenschaften bei Klassen
Zitat:
Delphi-Quellcode:
oder so?// in der Klasse KPunkt procedure KPunkt.zeichnen; begin self.image1.canvas.pen.mode:=pmxor; self.image1.canvas.ellipse(self.x-5,self.y-5,self.x+5,self.y+5); end;
Delphi-Quellcode:
oder noch anders? :D// in der Unit1 procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin KPunkt.image1.canvas.pen.mode:=pmxor; Punkt1.setpos(X,Y); Punkt1.zeigen; end; Also: Die erste Variante bringt garnix und die zweite variante geht nicht weil ich das nicht hinbekomme delphi zu sagen dass das image1 in der Klasse KPunkt schon definiert ist... Delphi findet es zumindest nicht.... |
AW: Visible Eigenschaften bei Klassen
Ganz anders. Du sollst die Funktion "zeichnen" in der Funktion "setpos" aufrufen, bevor du die Koordinaten änderst. Außerdem könntest du es auch noch mal danach aufrufen, dann muss das nicht in MouseMove gemacht werden.
|
AW: Visible Eigenschaften bei Klassen
Danke jetzt klappt's :)... leider habe ich jetzt noch einen Punkt bei ungefähr P(0,0).
Wie bekomme ich den weg? |
AW: Visible Eigenschaften bei Klassen
Zitat:
|
AW: Visible Eigenschaften bei Klassen
Zitat:
|
AW: Visible Eigenschaften bei Klassen
Vermutlich kommt der Punkt ja von Deiner Zeichenroutine, also musst Du wieder an diesen Punkt gehen und ihn übermalen wie bereits beschrieben.
|
AW: Visible Eigenschaften bei Klassen
Zitat:
Der kommt, wenn du das erste mal die Position zuweist: Du versuchst den alten Punkt zu löschen, aber es gibt ja noch gar keinen alten Punkt. Es gibt aber noch weitere Probleme: Wenn das Fenster neu gezeichnet wird, gibt es auch keinen alten Punkt mehr und ein neuer wird auch nicht gezeichnet, solange man die Maus nicht bewegt, da du ja nur in diesem Ereignis zeichnest :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz