AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PL TextEngine: Klassenstruktur Problem.... ?

Ein Thema von mimi · begonnen am 7. Sep 2009 · letzter Beitrag vom 10. Sep 2009
Antwort Antwort
Seite 2 von 2     12   
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#11

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

  Alt 9. Sep 2009, 12:54
Ich habe noch mal etwas nach geforscht und mir ist ein weiterer Fehler aufgefallen:
Delphi-Quellcode:
procedure TPLTE_ObjectBaseSurface.Paint;
begin
  if Visible then begin
    Style.ToCanvas(canvas);

    if (self is TPLTE_ObjectSTD_TextLink) then begin
      writeln(assigned(Style.Brush));
    end;
    Canvas.FillRect(Left, Top, (Left+Width)-ExtraWidht, (Top+Height)-ExtraHeight)
  end;
// Canvas.Rectangle(Left, Top, (Left+Width)-ExtraWidht, (Top+Height)-ExtraHeight);
end; // TPLTE_ObjectBaseSurface.Paint
rate mal was in writeln drin steht. Da steht false drin. Dadurch kommt der Fehler zu Stande, die Frage ist jetzt, warum ist das False. Das dürfte gar nicht. im Übrigen geht die Schrift Farbe nur wenn ich kein FillRect anwende.

Edit01:
Wenn ich mir noch den Classenamen ausgeben lasse von Style kommt da "TPLTE_Style_ObjectLink" Das darf eigentlich gar nicht sein. Ich denke das ist die Ursache. Eine Lösung habe ich damit leider noch nicht.

Edit02:
Ich bin mir unsicher im Moment, ich glaube aber das dieses Verhalten richtig ist. Denn ein Link hat nun mal kein Brush im Style.

Edit03:
Es wird immer Seltsamer:
Delphi-Quellcode:
{ TPLTE_Style_ObjectLink }
constructor TPLTE_Style_ObjectLink.Create;
begin
  inherited Create;
  Link:=TPlTE_Style_ObjectText.Create;
  Link.brush.Color:=clLime;
  Link.Font.Color:=clRed;

  Active:=TPlTE_Style_ObjectText.Create;
  Active.Brush.Color:=clRed;
// Focus:=TPlTE_Style_ObjectText.Create;
// Hover:=TPlTE_Style_ObjectText.Create;


// Visited:=TPlTE_Style_ObjectText.Create;
// Modus:=OLM_Link;

end; // TPLTE_Style_ObjectLink.Create
Active.Brush.Color wird übernommen. So wie es aussieht. Allerdings wird er nicht intern verwendet !

Edit04: Wenn ich alles intern auf Active umstelle klappt es. Aber mit dem Style Link geht es nicht.
Delphi-Quellcode:
procedure TPLTE_Style_ObjectLink.Assign(const aStyle: TPLTE_Style_ObjectLink);
begin
  Active.Assign(aStyle.Active);
// Hover.Assign(aStyle.Hover);
end; // TPLTE_Style_ObjectLink.Assign
Wenn ich beim erstellen des Objektes ebenfalls auf Active zurückgreife geht es.
Der Fehler liegt wahrscheinlich beim TPLTE_Style_ObjectLink würde ich sagen.

Edit05: Ich verstehe die Welt nicht mehr:
Delphi-Quellcode:
 TPLTE_Style_ObjectLink = class(TPLTE_Style_BaseExt)
  private
    fCurrentStyle: TPlTE_Style_ObjectText;
    fModus: TPLTE_Style_ObjectLinkModus;

    fLink: TPlTE_Style_ObjectText;
    fActive: TPlTE_Style_ObjectText;
    fFocus: TPlTE_Style_ObjectText;
    fHover: TPlTE_Style_ObjectText;
    fVisited: TPlTE_Style_ObjectText;
  protected
Auf die Reihenfolgen kommt es an. Jetzt nimmt er die werte von Link. Immer das was ganz oben steht. Wie kann das sein ? Das Verhalten verstehe ich nicht.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#12

Re: PL TextEngine: Klassenstruktur Problem.... ? [Gelöst]

  Alt 9. Sep 2009, 18:12
Problem endlich gelöst. Vielen Dank an Blup.
Die Lösung war ganz einfach(wie ich es mir gedacht hatte, nur ich habe sie übersehen bzw. nicht dran gedacht):
Zitat:
Einen Fehler habe ich in "TPLTE_ObjectSTD_Text.GetSize" gefunden, hier wurde eine bestimmte Style-Klasse erwartet.
TPLTE_ObjectSTD_TextLink setzt aber eine ganz andere Style-Klasse ein. Deshalb kam als Breite immer -1 raus und das ist nicht viel Hintergrund zum Zeichnen.
Delphi-Quellcode:
function TPLTE_ObjectSTD_Text.GetSize(AIndex: integer): Integer;
var
  i:integer;
begin
  Result := inherited GetSize(AIndex);
  if Result = -1 then
  begin
    FStyle.ToCanvas(Canvas);
    case AIndex of
      0: result:=Canvas.TextWidth(Text);
      1: result:=Canvas.TextHeight(Text)
    end;
  end;
end;
Die Lösung erklärt zwar nicht das Komische Verhalten, aber löst das Problem auf dem Ersten Blick.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#13

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

  Alt 10. Sep 2009, 09:48
Wie schon gesagt wurde in GetSize auf Style.Font zugegriffen.
In einem TPLTE_ObjectSTD_TextLink ist Style aber eine Klasse, die kein Font property besitzt.
Entsprechend wurde irgend ein Wert aus dem Speicher der Klasse gelesen.
Dies muss, abhängig von der Reihenfolge der Deklaration, eine der TPlTE_Style_ObjectText variablen gewesen sein.

TPLTE_Style_Font und TPlTE_Style_ObjectText sind beide von TPLTE_Style_Base abgeleitet.
TPLTE_Style_Base deklariert virtuell bereits ToCanvas, so konnte tatsächlich ein Funktionsaufruf erfolgen.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#14

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

  Alt 10. Sep 2009, 14:12
Zitat:
TPLTE_Style_Base deklariert virtuell bereits ToCanvas, so konnte tatsächlich ein Funktionsaufruf erfolgen.
Das währe eine Erklärung. Ich frage mich auch, warum Trotzdem ein Hintergrund gezeichnet wurden ist, zwar der Falsche aber immerhin.
Aber das währe eine Erklärung. Nun ja, ich konnte gestern endlich weiter machen. Das ist die Hauptsache.

Ich finde die Klassenstruktur gar nicht so schlecht, oder ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
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