![]() |
PL TextEngine: Klassenstruktur Problem.... ?
Hallo,
vor vier Tagen habe ich hier eine Frage gestellt: ![]() Wenn ihr mir Informationen braucht könnt ihr es gerne sagen. Das Projekt möchte ich eigentlich noch nicht Hochladen, aber wenn jemand wirklich bereit ist sich das Projekt anzuschauen würde ich es ihn zukommen lassen. Ich komme aufjedenfall seit Tagen nicht mehr weiter. Die Lösung die ich gefunden habe gefällt mir einfach nicht(steht im Link). Weil sie meine ganze Struktur durcheinander bringen würde. Auf der anderen Seite könnte ich weitere Fehler in meiner Klassenstruktur gemacht haben, die damit zusammen hängen. Danke ! PS: Ich hoffe ihr habt nichts gegen dieser Art von "Crossposting"(hieß das so) ? Bei Sprache gebe ich erst einmal Lazarus an. Auch wenn es sich um "Object Pascal", handelt. |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Dein Text ist einfach zu allgemein formuliert, als das man dir konkret helfen könnte. Dafür müsste man alles selber implementieren, um deine beschriebenen Probleme nachempfinden zu können, um dann Lösungen zu erarbeiten.
Aber ehrlich gesagt, habe ich dafür keine Zeit und Lust. Vermutlich wird es anderen ähnlich gehen, deshalb wird dir auch nicht geholfen, aber vielleicht irre ich mich ja auch... |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Ja ! das habe ich auch schon vermutet. Leider kann ich es nicht an einem Test Projekt nach bilden. Ich könnte höchsten die beiden Unit's um die es hier geht rein stellen.
Ich hatte die Hoffnung das ich Irgendwo einfach nur einen kleinen Fehler gemacht habe. |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Auch um kleine Fehler zu finden, benötigt man irgendwas, worin man diese sucht...
Die Methoden die sich mit dem Canvas und dem Zeichnen beschäftigen, dürften wohl am wichtigsten sein. Deine Beschreibung beinhaltet nicht mal von welcher Klasse jeweils abgeleitet wurde. |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Liste der Anhänge anzeigen (Anzahl: 2)
Die ersten Klassen sind jeweils im Moment von TObject abgeleitet. Direkt. Das Ändere ich später allerdings noch, so dass die Klassen auch im OI angezeigt werden können.
Delphi-Quellcode:
Z.B. hier sollte man doch annehmen, das ALL Rechtecke die gezeichnet werden, blau sind oder ? Sind sie aber nicht. nehme ich das FillRect raus, wird gar kein Rechteck gezeichnet.
procedure TPLTE_ObjectBaseSurface.Paint;
begin if Visible then begin Style.ToCanvas(canvas); Canvas.Brush.Color:=clBlue; Canvas.FillRect(Left, Top, (Left+Width)-ExtraWidht, (Top+Height)-ExtraHeight); end; end; Ich hänge mal beide Units hier dran. Die beiden Units beinhalten allerdings nur einen kleinen Teil. Hinzu kommen noch Container und die eigentliche "TPLTextEngine", die ist direkt von TCusomControl abgeleitet. Container haben ihr eigenen Canvas(eine Variable vom Typ TBitMap). Allerdings sind auch Container Objekte. Zum unterschied: Container haben ihr eigenen Buffer, Objekte zeichnen nun in diesen Buffer rein. Wenn Nötig kann ich die Container Unit auch gerne hochladen. Erst einmal Danke für eure Antworten. Ich dachte ich hätte genügend Informationen geliefert mit meiner "kleinen" Beschreibung. Das Ganze Projekt besteht im Moment aus Vier Units und einem "Fenster" |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Auffallend ist in der Unit uPLTE_Style, daß die Objekte teilweise Objektproperty besitzen, diese Objekte aber nicht selbst erzeugen. Intern werden diese Objektproperty benutzt ohne auf nil zu prüfen. Es gibt auch keine Benachrichtigung wenn solche Objekte freigegeben werden.
Wenn tatsächlich ein und das selbe Objekt verwendet wird, wäre die Verwendung von Interfaces mit Referenzzählung sicherer. Sollen aber nur die Eigensschaften zum Zeitpunkt der Zuweisung übernommen werden, muss die jeweilige Klasse eigene Objekte erzeugen und die Eigenschaften per Assign übernehmen. Die Ursache des jetzigen Darstellungsfehlers ist aber wahrscheinlich nicht in diesen Units zu suchen. |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Zitat:
Zitat:
Zitat:
Könnte die Ursache es auch eine Ursache sein, dass sich irgendwie Objekte überlagern ? So sieht es für mich aus. Allerdings weiß ich nicht was ich dagegen tun kann. Was ich auch nicht verstehe ist, wenn ich kurz bevor ich den Hintergrund Zeichne, die Hintergrund Farbe setzte, müssten eigentlich alle Objekte in dieser Farbe gezeichnet werden. Tut es aber nicht. Das Seltsame ist auch: Mit der Font Eigenschaft geht es. Nur die Brush Eigenschaft stellt sich quer. Wenn nötig, lade ich die zwei anderen Units auch noch hoch. Aber ich werde erst mal deinen Vorschlag ausprobieren sobald mir klar ist, wie du es genau gemeint hast. Zitat:
Erst mal Danke für deine Antworten und für dein Vorschlag. Wie genau meinst das mit Assign ? Beim Zeichnen rufe ich nur ToCanvas auf. Das ist die meist verwendete Methode. Alle Style haben sie. |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Meine Bedenken beziehen sich auf den Schreibzugriff auf Objektproperty, z.B. auf Border in der Klasse TPLTE_Style_ObjectSurface.
Das Objekt fBorder wird von der Klasse erzeugt und freigegeben, andere Objekte sollten deshalb keinen direkten Schreibzugriff erhalten. Das sollte IMO so aussehen:
Delphi-Quellcode:
Wenn du das Projekt hier nicht an deinen Beitrag hängen möchtest, kannst du es mir auch per PN zukommen lassen.
type
TPLTE_Style_ObjectSurface = class(TPLTE_Style_BaseExt) private fBorder: TPLTE_Style_Border; protected procedure SetBorder(aBorder: TPLTE_Style_Border); virtual; published property Border: TPLTE_Style_Border read fBorder write SetBorder; end; procedure TPLTE_Style_ObjectSurface.SetBorder(aBorder: TPLTE_Style_Border); begin fBorder.Assign(aBorder); end; |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Danke für den Tipp. Ich werde es gleich mal Testen.
Das heißt also, jedes Objekt sollte seine eigene Style Klasse erzeugen. Beim Schreibzugriff verwende ich dann einfach Assigen und Caste dann. PS: Ich habe dir eine PM gesendet. Der Soruce-Code ist nicht gerade aufgeräumt du wirst viele "Code Leichen" finden. Es ist halt ein Prototyp. |
Re: PL TextEngine: Klassenstruktur Problem.... ?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe es jetzt so probiert:
Delphi-Quellcode:
leider keine Auswirkung. Ich hänge mal ein Bild dran. Dann weißt du was ich meine.
procedure TPLTE_Style_ObjectSurface.SetBoder(const AValue: TPLTE_Style_Border);
begin fBorder.Assign(AValue); end; // TPLTE_Style_ObjectSurface.SetBoder procedure TPLTE_Style_ObjectSurface.SetBrush(const AValue: TPLTE_Style_Brush); begin fBrush.Assign(AValue); end; // TPLTE_Style_ObjectSurface.SetBrush Eigentlich sollte es keinen Orange Fläche geben, sondern nur Blau. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 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