![]() |
Delphi-Version: 5
RichEdit , RTF und Großbuchstaben
Moin,
ich hab mal wieder ein unlösbares Problem: in einem TRichEdit wird ein RTF-Text geladen, mit allen Formierungen - normale Groß-Klein Schreibweisen. Dies soll ich zu Wörtern zerhacken (ellenlange Wortlisten), die jeweils auf Art der Formatierung (Fett, kursiv etc.) interpretiert werden sollen... Jetzt taucht tausendmal ein klein-geschriebenes Wort (Beispiel - RTF Text "APFEL") auf, welches über die RTF-Formatierung
Delphi-Quellcode:
\b\caps apfel\b0\caps0
kleingeschrieben (apfel) und im RTF als "APFEL" im RTF zu lesen ist. Meine Analyse über
Delphi-Quellcode:
scheitern, weils zu char ausgelesen (string[1]) immer Kleinbuchstaben bleiben.
function IsGrossBuchstabe(ch: char): boolean;
begin Result := ch in ['A'..'Z']; end; oder auch: Result := c = AnsiUpperCase(c); Wie bekomme ich das sichtbare RTF-"APFEL" zum String-"APFEL" konvertiert? Danke |
AW: RichEdit , RTF und Großbuchstaben
Zitat:
Delphi-Quellcode:
Nun kommen wir zu Deinem "Apfel".
tmyrec=record
text:string; Dicke: fett/normal/mager; ....usw end; der kann ja
Code:
oder
\caps apfel \caps0
Code:
oder
\caps Apfel \caps0
Code:
oder
\caps aPFel \caps0
Code:
...
\caps ApFel \caps0
codiert sein und immer wird er als APFEL dargestellt. Wie lautet in diesem Zusammenhang Deine Aufgabenstellung genau? Dementsprechend könnte man die vorhandenen Daten konvertieren. Gruß K-H |
RichEdit , RTF und Großbuchstaben 2
Moin,
den Sring Apfel aus dem RTF herauszubekommen ist nicht das Problem. Das Problem liegt an der Formatierung innerhalb des RTF's. Obwohl es dort großgeschrieben ist, muss ich (auf Grund der Vorgabe) den String anhand der Schreibweise verschieden bewerten. Der kann fett, kursiv etc - und eben Großbuchstaben sein (auch Groß kursiv fett, was dann eine andere interne Bedeutung hat) Schemata : apfel - in Liste 1 einsortieren (fett) apfel - in Liste 2 einsortieren (italic) APFEL - (Caps) - in Liste 3 einsortieren ((fett, groß) APFEL - (Caps) - in Liste 4 einsortieren usw.(fett, groß, kursiv) Ich könnte den String über die Zwischenablage in eine Textfeld importieren. Aber bei 30 MB Sourcematerial ists kein angenehmer Arbeitsschritt (langsam und flackernd). Zudem geht mir eine resp. die Information (siehe Schemata) verloren. Diese müsste ich parallel über Positions- oder Stellenzähler mitlaufen lassen... Ich hatte auf eine bequemere, vor allem eine elegantere Methode gehofft. Aber im komplette Internet scheint es nichts passendes zu geben. Danke j |
AW: RichEdit , RTF und Großbuchstaben
Codegear hatte es mal geschafft Delphi von RichEdit 1.0 auf RichEdit 2.0 umzustellen, aber dann hatte sich da nichts mehr getan.
Bis RichEdit 1.0 oder ab RichEdit 3.0+ hättest du das Problem nicht. :stupid: (Aus Sicht der Datenverwaltung sind diese Eigenschaften auch eher unnütz hinderlich) Zitat:
![]()
Delphi-Quellcode:
Texte mit dieser Eigenschaft suchen und dann
var Format: TCharFormat2;
Format.cbSize := SizeOf(TCharFormat2); SendGetStructMessage(RichEdit.Handle, EM_GETCHARFORMAT, 1, Format, True);
Delphi-Quellcode:
:zwinker:
SelText := AnsiUpperCase(SelText);
|
AW: RichEdit , RTF und Großbuchstaben 2
Zitat:
In einer RTF-Datei liegen die Formatinformationen und der angezeigte Text hintereinander (stream). z.B.
Code:
das kannst Du Lesen und die entsprechenden Attribute für jedes Wort setzen.
{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid1331219 Apfel}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid3025572
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid1331219 Apfel \par Apfel \par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\insrsid1331219\charrsid1331219 Apfel \par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid1331219 Apfelmus \par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\i\insrsid1331219\charrsid1331219 Apfel \par } oder aber Du arbeitest mit einem TRichEdit und nutzt SelText/SelLength/selstart und SelAttribute den Text und die zugehörigen Attribute zu bekommen. Um SelText zu positionieren könnte man z.b
Delphi-Quellcode:
nutzen. (Ist nicht getestet, nur als Anregung!)
while letzteposition<length(text) do
lp1:=Posex(' ',meintext,letztePosition) lp2:=Posex(' ',meintext,letztePosition) selstart:=p1+1; sellength:=p2-1-p1; ..machwas letzteposition:=p2; end; Mit den Informationen fütterst du Dann eine Wortliste, die auch die Attribute enthält. Ob das eine Stringliste mit Objects oder eine Objectlist mit Records oder.. ist, ist zunächst einmal egal. Gruß K-H Nachtrag: Zitat:
Sind die Jedis nicht etwas weiter gekommen? |
AW: RichEdit , RTF und Großbuchstaben 2
Zitat:
Beispiel: ![]() |
AW: RichEdit , RTF und Großbuchstaben
Es ist zwar schon ein bisschen her, dass ich mich mit Richtext beschäftigen musste, aber die Vorgehensweise des TE irritiert mich ein wenig.
Man kann doch eine TRichEdit-Komponente wortweise durchgehen und die Formatierungen des gerade ausgewählten Bereiches feststellen. Wie man wortweise durchgeht, weiß ich im Moment nicht, aber ich bin mir ziemlich sicher, dass es relativ einfach ist. Die Formatierung war über SelAttributes.Style, festzustellen, wenn ich mich richtig erinnere. Die Wortliste kann man also einfach erstellen und die zugehörigen Formatierungen hat man dann doch eigentlich auch sofort verfügbar. Warum soll man denn die Formatierung selbst analysieren? Und was passiert bei
Code:
oder
\caps Apfel und Birne \caps0
Code:
Wie ist das Wort dann formatiert?
\caps ap\caps0 fel
|
AW: RichEdit , RTF und Großbuchstaben
a) ist klar: Großdarstellung
b) 1) darf es nicht geben 2) sollte es trotzdem einmal vorkommen tritt automatisch 1) in Kraft! Gruß K-H |
\Caps apfel \cap0 bleibt apfel...
Moin,
also nach zwei Tagen Recherche und wildesten, verzweifestem Herumprobieren ergibt sich folgendes: Lösung := false; Web.Lösung := false; Frust := true; Wer was anderes behauptet: Bitte! Sagt es mir... Hinweis: Ich bin DTP'ler und setze Bücher, wirklich fette Bücher. Der Delphi-Zwischenschritt der Konvertierung verwandelt Format X in meine Rohdaten zum Setzen. Das spart für gewöhnlich richtig fiese, ewiglange, ermüdende Stunden Arbeit. Also: Das gute alte Wordpad belässt die \Caps apfel \cap0 in Kleinbuchstaben, auch wenn ich sie über die Zwischenablage in den Editor kopiere. WordViewer (ich verweigere MS-Office) wandelt dito in APFEL(!!!) um, wenn ich übers Clipboard kopiere. Der Umweg über ein (OCR-) PDF ist dito (APFEL)... Ergo: Zugriff auf \Caps muss möglich sein. Weiss das Web davon? Als DTP'ler behaupte ich: Die ganze RTF-Kiste ist fürn Ar... Leider ist html auch kein Ausweg. No alternate, no way... Die zusätzlichen Meta-Informationen, die einer Schrift-Art und Farbe oder Groß-/Kleinschreibung innewohnen kann, bekommt man nicht kopiert. Nonverbale Kommunikation. Da steckt mehr Info, drin, wie sichtbar - ähem - auslebar! Es macht einfach keinen Sinn, Zugriff auf die Schrift zuzulassen - wie Fett, kursiv oder zu unterstreichen (was auch über zB. if SelAttributes.Style = [fsBold] durchaus wieder abfragbar kann). Anderes ist gar nicht direkt zuweisbar/lesbar - was an meinem veraltenten Delphi + VCL liegen mag). Schrift-Attribute wie Versalien, Kapitälchen, Hochstellen etc. sind weder zuweisbar, geschweige denn auslesbar. Versalien sind doch vom Kern her nix anderes wie fett oder kursiv. DTP-Programme (Windows-Versionen - Mac unbekannt) InDesign, Quark etc. verfahren übrigens genauso: Caps ist nur virtuell, beim Kopieren ists noch immer im Original (ggf mit Formatierung), was logisch durchaus richtig ist (wenn man alles wieder verwirft/verwerfen möchte). Beim Export als/zu RTF werden wunderbarerweise unlesbare Formatierungen übergeben... Irgendwas läuft da falsch... Ich habs über die Schiene: Suchen und Ersetzen beim Autor in den Griff bekommen. Attribute in einer anderer Schrift oder Farbe... das kann ich über Style etc auslesen. Purer Pfusch, Interimslösung, mehr nicht. Für alle die suchen : Es geht nicht! \Caps apfel \cap0 bleibt apfel... ... ich ess jetzt Birnen. Gut Nächtle j |
AW: \Caps apfel \cap0 bleibt apfel...
Zitat:
Hast dir meinen Beitrag und die Links bestimmt durchgelesen? :stupid: Word und Co. lesen das RTF und konvertieren es in ihr Format. WordPad kann es nicht, da es aktuell RichEdit 3.0 verwendet und dieses \Caps ausschließlich in 2.x vorhanden war, welches aber Delphi "aktuell" verwendet, allerdings mit der VCL-Schnittstelle für 1.x mit paar Änderungen, aber ohne neue Funktionalitäten. -> In RichEdit 1.x gab es \Caps noch nicht, also kennt die VCL das nicht. Und natürlich hatte ich die Lösung auch schon erwähnt. :roll: PS: Es gibt Fonts, welche nur Großbuchstaben kennen. :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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