AGB  ·  Datenschutz  ·  Impressum  







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

Code tags umwandeln?

Ein Thema von Headi · begonnen am 17. Dez 2005 · letzter Beitrag vom 18. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#1

Code tags umwandeln?

  Alt 17. Dez 2005, 22:41
Hallo leute,

kleine frage und zwar habe ich ein richedit, wenn dort jetzt ein spezieller tag vorkommt,
soll der Text unterschiedlich formatiert werden.
Formatierungen sind genaugenommen BBCodes.
Das heisst wenn ich z.B.

Code:
[B]hallo[/B]
eingebe, dann erkennt der das und macht hallo fett.

Ich habe mir mal überlegt wie ich das machen soll. Nur da gibt es noch einige probleme.

Ich habe mal folgenden code:

Delphi-Quellcode:
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var
  StartPos, Position, Endpos: Integer;
begin
  StartPos := 0;
  with RichEdit do
  begin
    Endpos := Length(RichEdit.Text);
    Lines.BeginUpdate;
    while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do
    begin
      Endpos := Length(RichEdit.Text) - startpos;
      Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
      Inc(StartPos, Length(SearchText));
      SetFocus;
      SelStart := Position;
      SelLength := Length(SearchText);
    end;
    Lines.EndUpdate;
  end;
end;

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SearchForText_AndSelect(RichEdit1, 'Some Text');
end;
nur jetzt stosse ich schon auf das erste problem.
Wie kann ich dem sagen dass er nach * suchen soll?

SearchForText_AndSelect(RichEdit1, '[b]'+*+'[/b]'); geht natürlich nicht, da er * als variable und nicht als "irgend ein beliebiger Text" ansieht.

wie mache ich das am besten?
Und was mache ich wenn ich den text gefunden habe, soll ich den in eine variable speichern dann formatieren und wieder einfügen ohne die tags?

Bitte um hilfe

mfg headi
Pascal
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 00:40
Nabend,

soll er dabei die Tags gleich entfernen oder soll er einfach nur das zwischen den Tags fett machen?
Mit Pos kriegst du ja raus wo er anfängt und ebenfalls auch wo er aufhört (dort halt +3).
Danach setzt du die selection (glaub jedenfalls das beim RichEdit die Position gleichbedeutend ist mit der Menge der Zeichen) und machst sie mit SelAttributes fett.
Wenn du die Tags weg haben willst, musst du ja die nur entfernen und die Positionen umsetzen.

Ist nur kurz hingekritzelt und ungetestet:
Delphi-Quellcode:
while Pos(RichEdit.Text,'[a]')>0 do
begin
  StartPos:=Pos(RichEdit.Text,'[a]');
  EndPos:=Pos(RichEdit.Text,'[/a]');
  if (StartPos>0) and (EndPos>0) then
  begin
    RichEdit.SelStart:=StartPos+3;
    RichEdit.SelLength:=(EndPos-StartPos)-3;
    //Hier Code zum entfernen der 2 Tags einfügen
  end;
end;
greetz
Steffen
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 06:07
Wenn du irgendwann die Lust an RichEdit verloren hast, dann schau dir doch mal SynEdit an.

MfG
Thorsten
  Mit Zitat antworten Zitat
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 15:36
Zitat von MasterEvil:
Nabend,

soll er dabei die Tags gleich entfernen oder soll er einfach nur das zwischen den Tags fett machen?
Mit Pos kriegst du ja raus wo er anfängt und ebenfalls auch wo er aufhört (dort halt +3).
Danach setzt du die selection (glaub jedenfalls das beim RichEdit die Position gleichbedeutend ist mit der Menge der Zeichen) und machst sie mit SelAttributes fett.
Wenn du die Tags weg haben willst, musst du ja die nur entfernen und die Positionen umsetzen.

Ist nur kurz hingekritzelt und ungetestet:
Delphi-Quellcode:
while Pos(RichEdit.Text,'[a]')>0 do
begin
  StartPos:=Pos(RichEdit.Text,'[a]');
  EndPos:=Pos(RichEdit.Text,'[/a]');
  if (StartPos>0) and (EndPos>0) then
  begin
    RichEdit.SelStart:=StartPos+3;
    RichEdit.SelLength:=(EndPos-StartPos)-3;
    //Hier Code zum entfernen der 2 Tags einfügen
  end;
end;
greetz
Steffen
hmm... das geht irgendwie nicht also es passiert nichts.
was muss ich denn hinzufügen um die tags zu löschen?

Also ich komm da irgendwie nicht so mit den formaten zu recht,
was bekomme ich bei RichEdit.SelLength:=(EndPos-StartPos)-3;

Ich denke mal das ist die länge des Textes der Formatiert werden muss,
Nur wie kann ich den jetzt auch formatieren, oder erst markieren??


@Omata:

SynEdit habe ich mir schon angeschaut, aber versteh das nicht so ganz wie ich da ne eigene liste machen kann...
Hab mir auch schon den SynGen oder wie der heisst angeschauen aber krieg das irgendwie nicht hin.
Pascal
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

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

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 16:38
Hallo,

der Code färbt alles in der Art '[ B]irgendwas[ /B]' rot und entfernt die Tags.
Der Code ist nicht optimiert, aber man kann die Vorgehensweise gut erkennen.
Delphi-Quellcode:
with RichEdit1 do
  while FindText('[B]', 0, Length(RichEdit1.Text), [stMatchCase])<>-1 do
    begin
    //SelStart auf Anfang '[B]..' setzen
    SelStart := FindText('[B]', 0, Length(RichEdit1.Text), [stMatchCase]);

    //SelLength auf Ende(also +4) '...[/B]' setzen,
    //durch Abzug von Selstart ist genau der String incl. Tags selectiert.
    SelLength := FindText('[/B]', 0, Length(RichEdit1.Text), [stMatchCase])+4-Selstart;

    //selectierten Bereich einfärben
    SelAttributes.Color := clred;

    //selectierten Bereich durch String ohne Tags ersetzen
    SelText := Copy(RichEdit1.Text,SelStart+4,SelLength-7);
    end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

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

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 16:52
Hallo Headi,

vielleicht bringt dich dieses kurze Code-Beispiel auf fruchtbare Gedanken: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 16:55
Zitat von Lannes:
Hallo,

der Code färbt alles in der Art '[ B]irgendwas[ /B]' rot und entfernt die Tags.
Der Code ist nicht optimiert, aber man kann die Vorgehensweise gut erkennen.
Delphi-Quellcode:
with RichEdit1 do
  while FindText('[B]', 0, Length(RichEdit1.Text), [stMatchCase])<>-1 do
    begin
    //SelStart auf Anfang '[B]..' setzen
    SelStart := FindText('[B]', 0, Length(RichEdit1.Text), [stMatchCase]);

    //SelLength auf Ende(also +4) '...[/B]' setzen,
    //durch Abzug von Selstart ist genau der String incl. Tags selectiert.
    SelLength := FindText('[/B]', 0, Length(RichEdit1.Text), [stMatchCase])+4-Selstart;

    //selectierten Bereich einfärben
    SelAttributes.Color := clred;

    //selectierten Bereich durch String ohne Tags ersetzen
    SelText := Copy(RichEdit1.Text,SelStart+4,SelLength-7);
    end;
vielen dank funktioniert super, nur ein problem bleibt da noch nähmlich wenn der benutzer [b] eingiebt
also b klein dann funktioniert das ganze natürlich nicht.

Warum funktioniert dies eigentlich nicht? :

while FindText('[B]'or'[b]', 0, Length(RichEdit1.Text), [stMatchCase])<>-1 do Rein theoretisch müsste das doch gehen ? also kann ich nicht einfach

[edit]
achso ich habe jetzt gerade gesehen dass man bei findtext das ja einstellen kann...
muss ich nur noch rausfinden wie.
[/edit]



if a or b =

ich möchte ja nicht immer

if a =
if b =


vielen dank
greez headi
Pascal
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 16:59
So hier ist ein Beispiel für SynEdit.

Vielleicht gefällt es dir ja.

MfG
Thorsten
Angehängte Dateien
Dateityp: zip syneditbbcodes_121.zip (3,4 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

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

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 17:06
Hallo,

nimm stMatchCase raus, dann wird nicht mehr nach Groß- Kleinschreibung unterschieden:
FindText('[B]', 0, Length(RichEdit1.Text), []); Du musst aber noch abfangen ob die Tags auch wieder geschlossen wurden!
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Headi

Registriert seit: 17. Nov 2005
Ort: Weinfelden
101 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Code tags umwandeln?

  Alt 18. Dez 2005, 17:26
Zitat von Lannes:
Hallo,

nimm stMatchCase raus, dann wird nicht mehr nach Groß- kleinschreibung unterschieden:
FindText('[B]', 0, Length(RichEdit1.Text), []); Du musst aber noch abfangen ob die Tags auch wieder geschloissen wurden!
vielen dank das funktioniert jetzt super

@Omata:

ja ich seh jetzt dass es so ansatzweise funktioniert,
nur sind da ja noch viele probleme, ich kann immer nur etwas benutzen also fetter kommentar geht bei deinem
beispiel nicht, bei [b ] fett [/b ] werden nur die beiden tags fett und nicht der text, abgesehen davon müssen die tags ja auch noch gelöscht werden.

Könntest du mir vielleicht noch ein bisschen genäuer erklären wie man so eine formatierung definieren kann?

vielen dank euch beiden

greez headi
Pascal
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08: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