AGB  ·  Datenschutz  ·  Impressum  







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

RichEdit , RTF und Großbuchstaben

Ein Thema von jaikai · begonnen am 23. Feb 2016 · letzter Beitrag vom 26. Feb 2016
Antwort Antwort
jaikai

Registriert seit: 1. Jun 2005
70 Beiträge
 
#1

RichEdit , RTF und Großbuchstaben

  Alt 23. Feb 2016, 12:29
Delphi-Version: 5
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

\b\caps apfel\b0\caps0

kleingeschrieben (apfel) und im RTF als "APFEL" im RTF zu lesen ist.

Meine Analyse über

Delphi-Quellcode:
function IsGrossBuchstabe(ch: char): boolean;
begin
   Result := ch in ['A'..'Z'];
end;

oder auch:

Result := c = AnsiUpperCase(c);
scheitern, weils zu char ausgelesen (string[1]) immer Kleinbuchstaben bleiben.

Wie bekomme ich das sichtbare RTF-"APFEL" zum String-"APFEL" konvertiert?


Danke
Wenn die Programme das machen, wie's wir machen, wären sie unbrauchbar...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: RichEdit , RTF und Großbuchstaben

  Alt 23. Feb 2016, 15:56
Dies soll ich zu Wörtern zerhacken (ellenlange Wortlisten), die jeweils auf Art der Formatierung (Fett, kursiv etc.) interpretiert werden sollen...
Dafür bietet sich rein Record an
Delphi-Quellcode:
tmyrec=record
         text:string;
         Dicke: fett/normal/mager;
         ....usw
end;
Nun kommen wir zu Deinem "Apfel".
der kann ja
Code:
\caps apfel \caps0
oder
Code:
\caps Apfel \caps0
oder
Code:
\caps aPFel \caps0
oder
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jaikai

Registriert seit: 1. Jun 2005
70 Beiträge
 
#3

RichEdit , RTF und Großbuchstaben 2

  Alt 23. Feb 2016, 16:49
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
Wenn die Programme das machen, wie's wir machen, wären sie unbrauchbar...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: RichEdit , RTF und Großbuchstaben

  Alt 23. Feb 2016, 17:18
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. (Aus Sicht der Datenverwaltung sind diese Eigenschaften auch eher unnütz hinderlich)

Zitat:
CFE_ALLCAPS
Characters are all capital letters. The value does not affect the way the control displays the text. This value applies only to versions earlier than Microsoft Rich Edit 3.0.

CFE_SMALLCAPS
Characters are in small capital letters. The value does not affect how the control displays the text.
RichEdit.SelAttributes.ConsistentAttributes unterstützt kein CFM_ALLCAPS, aber du kannst das ja auch selber abfragen.
https://msdn.microsoft.com/de-de/lib.../bb787883.aspx
Delphi-Quellcode:
var Format: TCharFormat2;
Format.cbSize := SizeOf(TCharFormat2);
SendGetStructMessage(RichEdit.Handle, EM_GETCHARFORMAT, 1, Format, True);
Texte mit dieser Eigenschaft suchen und dann SelText := AnsiUpperCase(SelText);
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Feb 2016 um 17:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: RichEdit , RTF und Großbuchstaben 2

  Alt 23. Feb 2016, 17:58
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)
Könnte es sein, daß Du da etwas verwechselst?
In einer RTF-Datei liegen die Formatinformationen und der angezeigte Text hintereinander (stream).
z.B.
Code:
{\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 }
das kannst Du Lesen und die entsprechenden Attribute für jedes Wort setzen.
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:
while letzteposition<length(text) do
  lp1:=Posex(' ',meintext,letztePosition)
  lp2:=Posex(' ',meintext,letztePosition)
  selstart:=p1+1;
  sellength:=p2-1-p1;
  ..machwas
  letzteposition:=p2;
end;
nutzen. (Ist nicht getestet, nur als Anregung!)

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:

Aus Sicht der Datenverwaltung sind diese Eigenschaften auch eher unnütz hinderlich)
Wer ist auch so ... Dateneigenschaften am Aussehen fest zu machen.

Sind die Jedis nicht etwas weiter gekommen?
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (23. Feb 2016 um 18:03 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.008 Beiträge
 
Delphi 2009 Professional
 
#6

AW: RichEdit , RTF und Großbuchstaben 2

  Alt 23. Feb 2016, 19:49
Ich hatte auf eine bequemere, vor allem eine elegantere Methode gehofft. Aber im komplette Internet scheint es nichts passendes zu geben.
Es gibt für Delphi Bibliotheken, die eine RTF Datei einlesen und in andere Formate konvertieren können. Diese enthalten daher auch mehr oder weniger ausgefeilte Parser, die den Text und die Formatierungen verarbeiten

Beispiel: http://wiki.delphi-jedi.org/wiki/JVC...RichEditToHtml
Michael Justin
habarisoft.com

Geändert von mjustin (23. Feb 2016 um 19:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.367 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: RichEdit , RTF und Großbuchstaben

  Alt 24. Feb 2016, 08:11
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:
\caps Apfel und Birne \caps0
oder
Code:
\caps ap\caps0 fel
Wie ist das Wort dann formatiert?
Peter
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: RichEdit , RTF und Großbuchstaben

  Alt 24. Feb 2016, 11:23
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 03:58 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 by Thomas Breitkreuz