Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Visible Eigenschaften bei Klassen (https://www.delphipraxis.net/158383-visible-eigenschaften-bei-klassen.html)

katika90 15. Feb 2011 15:44

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

mkinzler 15. Feb 2011 15:47

AW: Visible Eigenschaften bei Klassen
 
Entweder die Originalfarben an den Stellen wegsichern oder einfach Bild neu Laden/Malen(Hintergrund)

Deep-Sea 15. Feb 2011 15:51

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

katika90 15. Feb 2011 16:14

AW: Visible Eigenschaften bei Klassen
 
Zitat:

Zitat von Deep-Sea (Beitrag 1081888)
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:

Erstmal danke fürs schnelle beantworten, meinst du das so?

Delphi-Quellcode:

// 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;
oder so?

Delphi-Quellcode:

// 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;
oder noch anders? :D

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....

Deep-Sea 15. Feb 2011 16:16

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.

katika90 15. Feb 2011 16:29

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?

DeddyH 15. Feb 2011 16:37

AW: Visible Eigenschaften bei Klassen
 
Zitat:

Zitat von katika90 (Beitrag 1081902)
Danke jetzt klappt's :)... leider habe ich jetzt noch einen Punkt bei ungefähr P(0,0).
Wie bekomme ich den weg?

Mit TippEx :mrgreen:

katika90 15. Feb 2011 16:39

AW: Visible Eigenschaften bei Klassen
 
Zitat:

Zitat von DeddyH (Beitrag 1081907)
Zitat:

Zitat von katika90 (Beitrag 1081902)
Danke jetzt klappt's :)... leider habe ich jetzt noch einen Punkt bei ungefähr P(0,0).
Wie bekomme ich den weg?

Mit TippEx :mrgreen:

ok und wie sage ich das dem PC? :D

DeddyH 15. Feb 2011 16:48

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.

Deep-Sea 15. Feb 2011 17:25

AW: Visible Eigenschaften bei Klassen
 
Zitat:

Zitat von katika90 (Beitrag 1081902)
leider habe ich jetzt noch einen Punkt bei ungefähr P(0,0).

Na ... kommste nicht selber drauf? :P
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