AGB  ·  Datenschutz  ·  Impressum  







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

SelAttributes im RichEdit

Ein Thema von Hügel · begonnen am 11. Mai 2005 · letzter Beitrag vom 18. Mai 2005
Antwort Antwort
Hügel

Registriert seit: 11. Mai 2005
4 Beiträge
 
#1

SelAttributes im RichEdit

  Alt 11. Mai 2005, 17:30
Hallo, ich habe ein Problem mit der Textart (Größe, Farbe, Style etc) in einem Richedit:
Aus einem normalen Memo wird ein Text gelesen, in dem auch solche Textstyle-Infos ahnlich dem BBCode enthalten sind. Diese Infos werden in einer Prozedur ausgelesen und in Variablen gespeichert. anschließend wird das entsprechende Zeichen markiert und ihm werden per SelAttributes die Variablen zugewiesen. Das ganze geschieht in einer Schleife, die immer zeichenweise vorgeht und das nächste Zeichen an den Text im Richedit anhängt.


Delphi-Quellcode:
      RichEdit1.SelStart := Length(RichEdit1.Text) - 1;
      RichEdit1.SelLength := 1;
      with RichEdit1.SelAttributes do
        begin
        Name := TextSchrift;
        Color := TextFarbe;
        Size := TextGroesse;
        Style := TextStyle;
        end;


Das Problem ist nun, dass nur die aller ersten Textstyle-Infos auch angewendet werden, sobald einmal der normale Text angefangen hat, werden in Infos zwar ausgelesen und in den Variablen gespeichert (per Breakpoints geprüft) aber nicht mehr auf den darauf folgenden Text angewendet.

Woran kann das liegen???
Help me plz
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: SelAttributes im RichEdit

  Alt 11. Mai 2005, 19:26
poste doch mal etwas mehr Code. Interessant wäre da diesbezüglich z.B. der Schleifenformalismus selbst und das voranschreitende Pointen (auf den dann jeweils immer als nächstes zu formatierenden Char) mittels SelStart.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Hügel

Registriert seit: 11. Mai 2005
4 Beiträge
 
#3

Re: SelAttributes im RichEdit

  Alt 14. Mai 2005, 18:09
Hier is im Grunde die ganze Proz, den Befehl-Auswerten-Teil hab ich mal als externe Proz nur reingeschrieben, der funktioniert problemlos.

Delphi-Quellcode:
var ganzertext: Ansistring;
    i: integer;

    tbefehl: String; // ließt erstmal generell den Befehl aus
    tgroesse: integer;
    tschrift: string;
    tstyle: tfontstyles;
    tstyle2: string;
    tfarbe: tcolor;
    tAlign: TAlignment;


Prozedure Entschluesseln;
begin
 GanzerText := Memo1.Text;

 for i := 1 to Length(GanzerText) do
    begin
      if Befehl = true then
        Befehl auswerten
    else
      begin
      TextFeld.Text := TextFeld.Text + Copy(GanzerText,1,1);

      Textfeld.SelStart := Length(Textfeld.Text);
      Textfeld.SelLength := -1;



      with TextFeld.SelAttributes do
        begin
        Name := tSchrift;
        Color := tFarbe;
        Size := tGroesse;
        Style := tStyle;
        end;

      Delete(GanzerText, 1, 1); // löscht letztes bearbeitetes Zeichen
      end; // end if kein Befehl, Text formatieren
    if Length(GanzerText) = 0 then Exit;
    end; // Schleife
end;
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: SelAttributes im RichEdit

  Alt 14. Mai 2005, 19:38
also auf den ersten Blick würde ich sagen:

1. Dein SelStart pointet immer genau hinter den letzten, eben gerade addierten, Char. RichEdit-intern hat der erste RichEdit-Text-Char nämlich den Index=0 ...ergo musst du mit Length(Textfeld.Text)-1 pointen

2. SelLength := +1;


Außerdem: Auf deine Weise wirst du auch die Cr- u. Lf-Bytes (Bytes durch die jede Memo- o. RichEdit-Zeile terminiert ist) mitformatieren, ...was dann aber ggf. durchaus auch nochmal zu gewissen (unvorhersehbaren) Fehlereffekten führen könnte.

edit: also normalerweise werden diese CrLf-Bytes natürlich immer mitformatiert, allerdings nur nicht extra ...als wären es ganz normale Chars, denen ich jetzt auch noch ein ganz spezielles Format verpassen möchte.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: SelAttributes im RichEdit

  Alt 14. Mai 2005, 21:09
Hallo Hügel,

wenn du SelLength auf einen negativen Wert setzen willst, dann musst du dich etwas mehr anstrengen - intern wird nur mit dem Betrag gearbeitet. Das Abschneiden, Löschen und Formatieren jeweils eines einzelnen Zeichens ist auch nicht gerade der Hit. Hier ein kleiner Ausschnitt aus einem Programm, mit dem ich selbst solche Style-Infos zeilenweise verarbeite. Vielleicht hilft dir das ja bei der Verbesserung deines Codes. Die Funktion Strip() zerlegt einen String beim ersten Auftreten eines Delimiters und StripStyle() extrahiert die Style-Codes und merkt sie sich in CurrentStyle.

Delphi-Quellcode:
procedure TMainForm.ProcessLine(line: string);
var
  s: string;
begin
  RichEdit.Lines.Add('');
  while line <> 'do begin
    s := Strip(line, '[', pmSingle);
    RichEdit.SelStart := Length(RichEdit.Text) - 2;
    RichEdit.SelAttributes.Style := CurrentStyle;
    RichEdit.SelText := s;
    if line <> 'then
      StripStyle(line);
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Hügel

Registriert seit: 11. Mai 2005
4 Beiträge
 
#6

Re: SelAttributes im RichEdit

  Alt 17. Mai 2005, 14:11
Hallo, danke erst mal für eure Hilfestellungen!!!

@ TStringlist: ich habs jetzt in
Delphi-Quellcode:
      Textfeld.SelStart := Length(Textfeld.Text) - 1;
      Textfeld.SelLength := 1;
geändert, allerdings leider ohne Erfolg.

@ Marabu: du gehst die Formatierung auf ne etwas andere Sache an, so hatte ich das auch schon mal überlegt... deine Version könnte mir also noch hilfreich sein, Danke also.

@ alle anderen: vllt hat ja noch jemand eine Idee, da es bisher leider noch nicht funktioniert hat ...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: SelAttributes im RichEdit

  Alt 17. Mai 2005, 22:22
Der Hauptfehler liegt darin, dass du den Text des RichEdit-Controls nicht immer wieder über dessen Text-Property neu laden darfst!!! Warum? Weil du bei einer jeden solchen Zuweisung dann nämlich auch immer wieder von neuem den gesamten bisherigen RichEdit-Inhalt 100%ig überschreibst. Also gleichzeitig auch immer wieder sämtliche Format-Anweisungen, die du in diesen Text bis dato (theoretisch) schon eingebracht hattest. Auf der rechten Seite der Zuweisung hast du zwar auch wieder das Textfeld.Text stehen, aber das stellt dort nur noch mehr einen ganz normalen einfachen String dar, ohne jegliche Format-Anweisungen.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#8

Re: SelAttributes im RichEdit

  Alt 18. Mai 2005, 07:06
Hallo,
Zitat von Hügel:
...
@ alle anderen: vllt hat ja noch jemand eine Idee, da es bisher leider noch nicht funktioniert hat ...
in dem Thread(Delphi-Forum)Formatierten Text an Richedit übergeben? habe ich eine Alternative beschrieben, vielleicht ist das ja ein Ansatz für Dich.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  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 01:02 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