AGB  ·  Datenschutz  ·  Impressum  







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

MDLabel: Komponente verbessern. Bitte um Mithilfe

Ein Thema von DieDolly · begonnen am 7. Jun 2020 · letzter Beitrag vom 8. Jun 2020
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 7. Jun 2020, 19:23
Ich habe mir vor einiger Zeit mal die Komponente MDLabel, ein HTML Label, angeguckt. Es besteht aus einer einzigen Unit, was mir sehr gefällt.
Aber die hat scheinbar ein paar Kinderkrankheiten.

1) die Caption muss am Ende eine Leerstelle haben, damit das letzte Wort oder das letzte Zeichen gezeichnet wird
2) Links respektieren nicht den Rest der schon aktiven Font-Styles

Würdet ihr mir helfen, diese Komponente auf Vordermann zu bringen?

Info: in GetToken() wird ausgewertet, welche Tags verwendet werden. Ich habe das schon so erweitert, dass das Set-basiert ist.
TextToWords; wertet das gesetzte Set aus. TextToWords ist also der Knackpunkt denke ich.

Erledigt
Beispiel-Captions:
:= '0 <b>1<a>google.de</a>2</b> 3 ';
Ergebnis sollte sein: 0 1google.de>2 3
Das Ergebnis ist aber: 0 1google.de>2 3

:= '0 <b><i>1<a>google.de</a>2</i></b> 3 ';
Ergebnis sollte sein: 0 1google.de2 3
Das Ergebnis ist aber: 0 1google.de2 3
Angehängte Dateien
Dateityp: pas MDLabel.pas (51,1 KB, 7x aufgerufen)

Geändert von DieDolly ( 8. Jun 2020 um 13:59 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 8. Jun 2020, 09:41
2) Das die Links zwei eigene Schriften (TFont-Instanzen) haben, ist dir aber bewusst?

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FMDLabel1 := TMDLabel.Create(Self);
  FMDLabel1.Parent := Self;
  FMDLabel1.Align := TAlign.alTop;
  FMDLabel1.Name := 'FMDLabel1';
  FMDLabel1.LinkFontNormal.Style := FMDLabel1.LinkFontNormal.Style + [fsBold];
  FMDLabel1.LinkFontHover.Style := FMDLabel1.LinkFontHover.Style + [fsBold];
  

  FMDLabel2 := TMDLabel.Create(Self);
  FMDLabel2.Parent := Self;
  FMDLabel2.Align := TAlign.alBottom;
  FMDLabel2.Name := 'FMDLabel2';
  FMDLabel2.LinkFontNormal.Style := FMDLabel2.LinkFontNormal.Style + [fsBold, fsItalic];
  FMDLabel2.LinkFontHover.Style := FMDLabel2.LinkFontHover.Style + [fsBold, fsItalic];

  FMDLabel1.Caption := FMDLabel1.Name + ' 0 <b>1<a>google.de</a>2</b> 3 ';
  FMDLabel2.Caption := FMDLabel2.Name + ' 0 <b><i>1<a>google.de</a>2</i></b> 3 ';
end;
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 8. Jun 2020, 12:48
Zitat:
2) Das die Links zwei eigene Schriften (TFont-Instanzen) haben, ist dir aber bewusst?
Danke für die Hilfe aber soviel Code (3 Zeilen) möchte ich nicht für einen Aufruf, der eigentlich nur 1 Zeile lang ist, ausgeben. So verliert man den Vorteil dieser Komponente ja irgendwo. Denn genau das soll ja das HTML erledigen was man in der Caption übergibt. Tut sie auch, aber nur zur Hälfte.

Guck dir meine Ausgaben mal genau an. Bei der zweiten Ausgabe wird <i> verarbeitet, <b> aber nicht. Das Problem ist also woanders. Auch wenn man es so lösen könnte wie du - das behebt das Problem in der Komponente nicht.

In TLink.Create() übergebe ich CurrentStyle aus TextToWords;. Das wird aktuell nicht verarbeitet aber das ist egal, denn es funktioniert ja eh nicht. Siehe oben. Auch ohne es auszuwerten wird i für den Link verarbeitet, b aber nicht. Diese Komponente hat in dieser Form also irgendein grundlegendes Problem.

Geändert von DieDolly ( 8. Jun 2020 um 13:07 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 8. Jun 2020, 13:14
Zitat:
2) Das die Links zwei eigene Schriften (TFont-Instanzen) haben, ist dir aber bewusst?
Danke für die Hilfe aber soviel Code (3 Zeilen) möchte ich nicht für einen Aufruf, der eigentlich nur 1 Zeile lang ist, ausgeben. So verliert man den Vorteil dieser Komponente ja irgendwo. Denn genau das soll ja das HTML erledigen was man in der Caption übergibt. Tut sie auch, aber nur zur Hälfte.

Guck dir meine Ausgaben mal genau an. Bei der zweiten Ausgabe wird <i> verarbeitet, <b> aber nicht. Das Problem ist also woanders. Auch wenn man es so lösen könnte wie du - das behebt das Problem in der Komponente nicht.
1. Alles was du zwischen <a> und </a> schreibst, unterliegt nicht den Formatierungstags wie <i> oder <b>.
Diese steuern nur das Verhalten von TMDLabel.Font.Style. Alle Label-Inhalte zwischen <a> und </a> werden über TMDLabel.LinkFontNormal.Style und TMDLabel.LinkFontHover.Style gesteuert.

2. Deine Ausgaben - konkret: dein zweites Beispiel - ist falsch.
Das lässt sich so im Testprojekt nicht nachstellen. Dort ist www.google.de nicht kursiv gezeichnet.

3. Wenn du das anders haben möchtest, dann musst du die Zeilen 1421-1422, 1427-1445 und 2080-2081, 2086-2104 auskommentieren und/oder löschen.

4. Damit verlierst du aber die Fähigkeit, Links mit MouseHover farbig darzustellen und einen Underline anzuzeigen. Das sollte dir bewusst sein. Das nach zu implementieren überlasse ich dir als Hausaufgabe.
Mit den aufgezeigten Quelltextzeilen aus 3. und etwas Verständnis über die Zusammenhänge, ist das aber keine große Schwierigkeit.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 8. Jun 2020, 13:46
Hausaufgabe erledigt. Ich habe das durch das hier ausgetauscht. Das funktioniert. Ich habe auch das Event OnGetLinkStyle und alles was damit zusammenhängt (auch Font, FontHover in TLink) rausgenommen. Seitdem ist das in Ordnung. Die Farbwerte sind nur Testwerte.
Delphi-Quellcode:
          if IsMouseOverLink(WordInfo.FLinkID) then
           Canvas.Font.Color := clRed
          else
           Canvas.Font.Color := clYellow;
Die aktuelle Version ist oben zu finden.

Eine letzte Frage habe ich aber noch und da habe ich tatächlich keine Lösung für.

Warum muss ich am Ende der Caption eine Leerstelle angeben?
Code:
'0 <b>1<a>google.de</a>2</b> 3 '
Ohne die Leerstelle wird die 3 nicht gezeichnet.

Geändert von DieDolly ( 8. Jun 2020 um 14:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#6

AW: MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 8. Jun 2020, 13:57
1<a href="google.de"><b>google.de</b></a>2 sowas geht nicht?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: MDLabel: Komponente verbessern. Bitte um Mithilfe

  Alt 8. Jun 2020, 13:58
Wie gesagt. Sobald am Ende eine Lererstelle ist, wird das letzte Zeichen/Wort verschluckt.
Im ersten Post habe ich auf die aktuelle Version aktualisiert. Das Linkproblem ist beseitigt.

~~~Problem auch erledigt~~

Geändert von DieDolly ( 8. Jun 2020 um 16:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:56 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