Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Frage zur Komponentenerstellung graphisch (https://www.delphipraxis.net/154729-frage-zur-komponentenerstellung-graphisch.html)

Satty67 23. Sep 2010 21:51

AW: Frage zur Komponentenerstellung graphisch
 
Besser, entferne aus der Basisklasse TGeoForm Paint komplett. (Also Deklaration Paint, virtual und die fast leere Methode, in der nur inherited steht)

Dann setze in TOval die Koordinaten in den sichtbaren Bereich:
Delphi-Quellcode:
  x1:=0;
  y1:=0;
  x2:=Width;
  y2:=Height;
Zum verschieben, verschiebst Du dann nicht das Oval in deiner Klasse, sondern die ganze Klasse durch ändern von Top und Left.

***

Grundsätzliches:

Dein Oval füllt Deine Komponente TOval ganz aus. Deshalb könnte man in TOval.Paint gleich
Delphi-Quellcode:
Canvas.Ellipse(0, 0, width, height);
.
Dann wird das Oval größer, wenn die Komponente größer wird. x1,x2,y1,y2 kann man sich dann ganz sparen!

Verschoben wird dann wie gesagt nicht das Oval in der Komponente, sondern die ganze Komponente durch ändern von Top und Left.

stahli 23. Sep 2010 22:03

AW: Frage zur Komponentenerstellung graphisch
 
Delphi-Quellcode:
  with Canvas do
  begin
    Brush.Color := clRed;
    FillRect(GetClientRect);
    Pen.Style := psSolid;
    Pen.Color := clBlue;
    Pen.Style := psDot;
    Rectangle(GetClientRect);
  end;
sollte doch etwas zeichnen.

Setze mal auch noch Oval.Left und Oval.Top.

Satty67 23. Sep 2010 22:08

AW: Frage zur Komponentenerstellung graphisch
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich würde ja das sinnlose Paint aus der Basisklasse TGeoForm entfernen.

TOval.Paint braucht auch keine lokalen variablen, das kann ganz übersichtlich bleiben:
Delphi-Quellcode:
procedure TOval.Paint();
begin
  Canvas.Brush.Color := self.Fuellfarbe;
  Canvas.Pen.Color := self.Randfarbe;
  Canvas.Pen.Width := 3;
  Canvas.Ellipse(0, 0, width, height);
end;
Zitat:

Zitat von stahli (Beitrag 1051626)
Setze mal auch noch Oval.Left und Oval.Top.

Die Bounds sind in der Basisklasse schon gesetzt worden.

thomas274 23. Sep 2010 22:12

AW: Frage zur Komponentenerstellung graphisch
 
Momentan will es ja noch gar nicht gezeichnet werden.

Ich verstehe jetzt bloß nicht warum ich das Paint aus der Klasse TGeoform entfernen soll ? Die Methode Paint ist ja nur abstrakt vorher und hat damit keinerlei Implementation meine ich.

Habe das mit den Koordinaten mal in den Constructor geschrieben, will aber auch nicht klappen.

Edit @ stahli

will auch nicht klappen. das top und left ist ja im constructor von tgeoform gesetzt und wird beim inherited aufgerufen.

Ich werde morgen in der schule mal konkret nachfragen und hier dann das Ergebnis posten, bin jetzt erstmal schlafen :)

Aber schonmal vielen Dank für die ganze Hilfe, die mich schon ein ganzes stück weiter gebracht hat :) (bei anderen foren erlebt man es ja manchmal, dass neuen mitgliedern nicht so schnell geholfen wird oder einfach auf die tutorials verwiesen wird)

Satty67 23. Sep 2010 22:15

AW: Frage zur Komponentenerstellung graphisch
 
Jo, und weil Sie in der Basisklasse ohne Funktion ist, dort unnötig. (Wenn Du es machst wird auch gezeichnet)

Wie Du am Bild (#23) siehst, fehlt nicht viel (#21) ;) Aber muss ja nicht heute alles klappen...

thomas274 24. Sep 2010 23:46

AW: Frage zur Komponentenerstellung graphisch
 
Hallo nochmal,

nachdem ich den Code jetzt nochmal sauber in neue Units geschrieben habe, klappt es :thumb:
war wohl irgendwo wieder ein kleiner Fehler drin :?
Aber vielen Dank für die Hilfe :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz