Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi FMX TMemo -> TMemo mit Textattr. (https://www.delphipraxis.net/184571-fmx-tmemo-tmemo-mit-textattr.html)

Mavarik 7. Apr 2015 11:37

FMX TMemo -> TMemo mit Textattr.
 
Hallo Zusammen!

Nach einem kurzem Blick in die FMX.Memo Sourcen musste ich feststellen, dass die "Lines" eigentlich keine
TStrings sind, sondern TMemoLines und so gar jede Zeile Ihr eigenen TTextLayout mit bringt.

Wie weit ist der Schritt bis zu einem Memo das Fett und unterstrichen kann? ggf. Mehr...

Hat sich da schon einer von Euch mit beschäftigt?
In der Regel würden doch kleine Textstyle oft reichen... Muss ja nicht immer direkt RTF sein!

Mir würde es zum Beispiel reichen aus einem

Das ist ein #FBeispiel#F Text...
Das ist ein Beispiel Text...

zu machen...

Mavarik

Sir Rufo 7. Apr 2015 12:09

AW: FMX TMemo -> TMemo mit Textattr.
 
Nur dass man hier dieses TextLayout eben nicht pro Zeile sondern pro Buchstaben benötigen würde oder etwas schlauer zusammengefasst pro Formatierungs-Block.

Einfach so das
Delphi-Quellcode:
TMemo
ein bisserl erweitern wird nicht funktionieren.

Wir hatten hier mal einen Thread, wo aus einem Text die Formatierung herausgelesen werden sollte und dann entsprechend die Darstellung erfolgen sollte (war für VCL). Das Prinzip ist dabei gleich nur das tatsächliche Zeichnen ist halt anders bei FMX (logisch).

Mavarik 7. Apr 2015 12:50

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von Sir Rufo (Beitrag 1296468)
Einfach so das
Delphi-Quellcode:
TMemo
ein bisserl erweitern wird nicht funktionieren.

Aber sicher einfacher als ein Control von vorne neu zu programmieren... Oder?

Sir Rufo 7. Apr 2015 12:52

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von Mavarik (Beitrag 1296478)
Zitat:

Zitat von Sir Rufo (Beitrag 1296468)
Einfach so das
Delphi-Quellcode:
TMemo
ein bisserl erweitern wird nicht funktionieren.

Aber sicher einfacher als ein Control von vorne neu zu programmieren... Oder?

Hmmm, ich sach mal so
Zitat:

"Queen Kelts?!? Was soll das denn?" - "Och, mit ein paar kleinen Änderungen kriegen wir da auch Uschi raus."

p80286 7. Apr 2015 13:01

AW: FMX TMemo -> TMemo mit Textattr.
 
NaJa, Eigentlich ist es so, daß Du nur die Ausgabe modifizieren mußt.
Für jede Textzeile benötigst Du eine Attributzeile (vorrausgesetzt wir beschränken uns auf fett,unterstrichen, hochgestellt usw.). Dann gibst Du Zeichen für Zeichen und Attribut für Attribut mit Hilfe von .Textout den Text aus. Klar kann man da auch noch ein wenig verkürzen z.B. "StartFett"/"EndeFett" aber das Prinzip bleibt gleich.
(jo das ist das gleiche Prinzip wie damals zu DOS-Zeiten und dem direkten Schreiben in den Displaybuffer)

Gruß
K-H

Mavarik 7. Apr 2015 13:50

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von p80286 (Beitrag 1296482)
(jo das ist das gleiche Prinzip wie damals zu DOS-Zeiten und dem direkten Schreiben in den Displaybuffer)

[OT]
Und? war doch prima und super schnell und hat uns doch jahrelang gute Dienste geleistet... Auf jeden Fall besser als den int21 auf zu rufen... Und von scrollen wollen wir gar nicht erst reden...[/OT]

FMX macht es auch nicht anders... Ein TTextAttribute mit Range für die Formatierung...
Ist unterm Strich auch nix anderes wie eine StartFett EndFett...

p80286 7. Apr 2015 14:24

AW: FMX TMemo -> TMemo mit Textattr.
 
[OT] :mrgreen: [/OT]

Daniel 7. Apr 2015 14:49

AW: FMX TMemo -> TMemo mit Textattr.
 
Ich denke, ich würde für diesen Zweck 150,- EUR in die Hand nehmen und das FMX-Paket von TMS kaufen, dort ist ein RTF-Control enthalten.

Mavarik 7. Apr 2015 16:30

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von Daniel (Beitrag 1296495)
Ich denke, ich würde für diesen Zweck 150,- EUR in die Hand nehmen und das FMX-Paket von TMS kaufen, dort ist ein RTF-Control enthalten.

Natürlich wäre das ökonomischer... Aber dabei hat man nix gelernt... (Außer das es andere besser können)...

p80286 7. Apr 2015 16:41

AW: FMX TMemo -> TMemo mit Textattr.
 
Das blöde ist ja, daß die verschiedenen RTF-Komponenten nicht die vollständige RTF-Definition beherschen (was auch legitim ist). Wenn jetzt jemand eine TextmitAttributen-Komponente hat, dann ist das eine feine Sache, aber eine Komponente "RTF" zu nennen, nur weil sie fette Schrift kann, oder umgekehrt weil ich fette Schrift brauche, dann gleich eine RTF-Komponente nutzen, das fühlt sich nicht richtig an.

Gruß
K-H

Mavarik 7. Apr 2015 16:51

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von p80286 (Beitrag 1296520)
Das blöde ist ja, daß die verschiedenen RTF-Komponenten nicht die vollständige RTF-Definition beherschen (was auch legitim ist). Wenn jetzt jemand eine TextmitAttributen-Komponente hat, dann ist das eine feine Sache, aber eine Komponente "RTF" zu nennen, nur weil sie fette Schrift kann, oder umgekehrt weil ich fette Schrift brauche, dann gleich eine RTF-Komponente nutzen, das fühlt sich nicht richtig an.

Eben... Wie oft gibt es hier im Forum die Frage wie man eine Memo-Zeile Fett bekommt ohne den Rest des Textes?
Ich brauche keine Tabellen oder Bilder im Text oder aus auch immer...

Lediglich mal einen Text mit ein bisschen fett und unterstrichen...

Wenn das dann noch ein (Multiline)Edit ist... um so besser...

himitsu 7. Apr 2015 16:56

AW: FMX TMemo -> TMemo mit Textattr.
 
PS: Man versucht nun endlich wieder auf native Komponenten umzusteigen, also eh du jetzt versuchst diesem Memo ein Verhalten beizubringen, welches es von der Definition her eigentlich nicht besitzt, solltest du bedenken, daß die aktuelle Implementierung bald ganz anders aussehn könnte und dein Vorhaben dann so garnicht mehr möglich wäre.

Im QC gibt es ein aktuelles Ticket von mir, wo ich auf die aktuelle Implementierung des TLinkLabel eingeh.
Wenn man das wirklich multiplattfom umsetzen würde, dann muß man sowieso <a> manuell behandeln, wobei dort natürlich der Text eine andere Formatierung besitzt.

Eventuell könnte man dort auch noch recht "einfach" <b>, <i> und <u> mit implementieren.

Harry Stahl 7. Apr 2015 18:21

AW: FMX TMemo -> TMemo mit Textattr.
 
Ich würde hier auch nicht das TMemo "verwurschteln", sondern lieber gleich eine Komponente verwenden, die für sowas gedacht ist, eben den hier schon erwähnten RichEditor von TMS.

Ansonsten: Wenn es nur darum geht, an ganz wenigen Stellen im Text Fett, unterstrichen oder sonst was zu machen, nimm doch ein TGrid, lege dort eine TStringColumn rein, neutralisiere den Selektionsbalken (Farbe) durch einen angepassten Style, lasse Linien und Header weg und zeichne den Text selber (nach Deiner angedeuteten Systematik) in dem GridDrawColumCell-Event (Du musst dabei allerdings das GetValue-Event mit einem Flag austricksen, damit das Grid den Text nicht selber malt, sondern Dir das überlassen wird).

Könnte man machen. Aber ehrlich gesagt, die Arbeit würde ich mir nicht machen, sondern eben direkt eine fertige Komponente nehmen.

Mavarik 7. Apr 2015 20:28

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von Harry Stahl (Beitrag 1296528)
Ich würde hier auch nicht das TMemo "verwurschteln"

OK... Darum geht es doch gar nicht...

Ich habe schon lange eigene Routinen die einen beliebigen Text mit allen Formatierungen auf einen Canvas
"printet"...

Was ich nicht habe ist eine Editor...

Derjenige von Euch der mal eben eine FMX-Komponte mit Cursor Markierungen Clibboard usw... Programmiert...
Hut ab...
Ich würde den FMX.Memo.pas File kopieren und so lange erweitern, bis er das nötige kann...

Harry Stahl 7. Apr 2015 21:00

AW: FMX TMemo -> TMemo mit Textattr.
 
OK, dann wäre ja ein gängiger Weg, eine neue Komponente zu erstellen und die von TMemo abzuleiten und die notwendigen Änderungen vorzunehmen.

Da könntest Du Dich mal in FMX.Memo an TMemo.DoContentPaint orientieren. Da wird u.a. auch das highlighting für das Spellchecking gezeichnet. Statt Kringel zeichnest Du dann eben z.B. Unterstreichungen, bzw. Du klinkst Dich da in die Darstellung des Textes ein, in dem Du dort irgendwelche von Dir ausgedachten TAGS auswertest, die Tags entfernst und noch den verbleibenden Text entsprechend der TAG-Information zeichnest.

Mavarik 8. Apr 2015 08:21

AW: FMX TMemo -> TMemo mit Textattr.
 
Zitat:

Zitat von Harry Stahl (Beitrag 1296569)
OK, dann wäre ja ein gängiger Weg, eine neue Komponente zu erstellen und die von TMemo abzuleiten und die notwendigen Änderungen vorzunehmen.

Da könntest Du Dich mal in FMX.Memo an TMemo.DoContentPaint orientieren. Da wird u.a. auch das highlighting für das Spellchecking gezeichnet. Statt Kringel zeichnest Du dann eben z.B. Unterstreichungen, bzw. Du klinkst Dich da in die Darstellung des Textes ein, in dem Du dort irgendwelche von Dir ausgedachten TAGS auswertest, die Tags entfernst und noch den verbleibenden Text entsprechend der TAG-Information zeichnest.

So war meine Idee... Daher die Frage, ob das schon jemand gemacht hat... :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 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