Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   PL TextEngine: Klassenstruktur Problem.... ? (https://www.delphipraxis.net/139889-pl-textengine-klassenstruktur-problem.html)

mimi 7. Sep 2009 21:11


PL TextEngine: Klassenstruktur Problem.... ?
 
Hallo,
vor vier Tagen habe ich hier eine Frage gestellt: http://www.lazarusforum.de/viewtopic.php?f=18&t=2905 könnt ihr sie mir beantworten ?

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.

omata 7. Sep 2009 21:48

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

mimi 7. Sep 2009 21:54

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.

Blup 8. Sep 2009 07:29

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.

mimi 8. Sep 2009 12:40

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

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"

Blup 8. Sep 2009 15:47

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.

mimi 8. Sep 2009 20:26

Re: PL TextEngine: Klassenstruktur Problem.... ?
 
Zitat:

Sollen aber nur die Eigensschaften zum Zeitpunkt der Zuweisung übernommen werden, muss die jeweilige Klasse eigene Objekte erzeugen und die Eigenschaften per Assign übernehmen.
Du meinst ich verwende in der Text Objekt Klasse z.b. den Style Text Objekt, sollte diese Klassen diesen Style erzeugen, aber sollte jetzt auch die Surface Klasse, ein eigenen Style erstellen und per Assign die Notwendigen Eigenschaften übernehmen ? Quasi so:
Zitat:

- Surface Klasse: Eigenen Surface Style erstellen
- Surface Style
- Text Klasse: Eigenen Style für Text Objekt erstellen
- Text Style
So ähnlich hatte ich das am Anfang. Das mit Assign ist neu. Das könnte ich versuchen.

Zitat:

Die Ursache des jetzigen Darstellungsfehlers ist aber wahrscheinlich nicht in diesen Units zu suchen.
Es gibt noch zwei Units, an den es Theoretisch liegen könnte. Glauben tue ich es zwar nicht.

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:

Auffallend ist in der Unit uPLTE_Style, daß die Objekte teilweise Objektproperty besitzen, diese Objekte aber nicht selbst erzeugen
Ja, das ist Absicht. Ich dachte dadurch könnte den Fehler beseitigen. Davor hatte jede Klasse ihr eigenen Style erstellt, halt passend zum Objekt.

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.

Blup 9. Sep 2009 08:01

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:
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;
Wenn du das Projekt hier nicht an deinen Beitrag hängen möchtest, kannst du es mir auch per PN zukommen lassen.

mimi 9. Sep 2009 11:15

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.

mimi 9. Sep 2009 11:20

Re: PL TextEngine: Klassenstruktur Problem.... ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe es jetzt so probiert:
Delphi-Quellcode:
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
leider keine Auswirkung. Ich hänge mal ein Bild dran. Dann weißt du was ich meine.

Eigentlich sollte es keinen Orange Fläche geben, sondern nur Blau.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz