Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Smilies im Richedit (https://www.delphipraxis.net/48110-smilies-im-richedit.html)

freak1985 20. Jun 2005 22:18


Smilies im Richedit
 
hallo.

ich möchte eine procedure, die es ermöglicht, alle text-smilies wie zB ":-)" durch ein grafisches zu ersetzen.

dazu habe ich mir überlegt, dass ich mit Pos() die Position von ":-)" suche und an dieser stelle dann das bild einfüge.

ich verwende das TJvRichedit (Jedi).

Dort gibt es eine Routine zum einfügen von bildern, die das bild immer an der aktuellen cursorposition einfügt.

So nun mein fragen:

1) wie kann ich zu dieser stelle "springen", sodass ich dann das bild einfügen kann.
2) wie kann ich das am besten verallgemeinern für mehrere Smilies. nicht nur das eine ":-)"



ich hoffe, dass ihr versteht was ich meine...

Schonmal Danke für eure Antworten.

MfG

Luckie 20. Jun 2005 22:21

Re: Smilies im Richedit
 
Wie wäre es mit SelStart den Cursor an die entsprechende Stelle zu setzen?

freak1985 20. Jun 2005 22:24

Re: Smilies im Richedit
 
hm, ok.

werde es sofort ausprobieren.

aber nebenbei nochmal eine frage:

ich füge am ENDE vom richedit immer wieder text dazu. wie kann ich es ermöglichen, dass das richedit IMMER nach unten scrollt, also immer ganz unten ist?

Luckie 20. Jun 2005 22:26

Re: Smilies im Richedit
 
Für eine neue Frage erstell bitte auch einen neuen Thread.

freak1985 20. Jun 2005 22:42

Re: Smilies im Richedit
 
hab nun folgendes probiert um das bild einzufügen. es klappt auch wunderbar. aber nur wenn die schleife nicht da ist.
dadurch wird leider immer nur das ERSTE smilie durch ein bild ersetzt. wie kann ich nun am besten lösen, dass alle ersetzt werden?

wenn ich das so wie unten steht MIT der schleife verwende, is das ne endloschleife die ganz viele bilder hintereinander zeichnet.
wahrscheilich wird das graf. smilie auch wieder als ": - )" erkannt.

kann jmd helfen?


Delphi-Quellcode:
    repeat
    { Text-Smilie finden }
    ChatBox.SelStart := Pos(':-)', ChatBox.Text) - 1;

    if ChatBox.SelStart >= 0 then
    begin
      { Smilie lsöchen }
      ChatBox.SelLength := 3;
      ChatBox.SelText := '';

      { Bild einfügen }
      AddImageToRichEdit(0);
    end;

  until Chatbox.SelStart < 0;

malo 20. Jun 2005 22:47

Re: Smilies im Richedit
 
Der Fehler liegt wohl in der letzten Zeile:

Delphi-Quellcode:
until Selstart < 0
Bis der Selstart UNTER 0 ist. Dabei kann er gar nicht niedriger als 0 sein ;)

Richtig sollte es heißen:

Delphi-Quellcode:
until SelStart >= Length(ChatBox.Text)
Dieser Code würde solange ausgeführt werden, bis ganz unten am Text angekommen würde ;)

//edit: Es wird außerdem nirgendwo SelStart verändert. Wie kann das auch zu einem Ende kommen?

freak1985 20. Jun 2005 22:50

Re: Smilies im Richedit
 
- bitte löschen -

freak1985 20. Jun 2005 23:22

Re: Smilies im Richedit
 
so leider funzt es doch nicht :(

es funzt grade wie es will.. manchmal aber hängt er sich einfach auf. ich weiß nicht an was es liegen könnte :( kann jemand helfen?

hier mal der code:

Delphi-Quellcode:
var
  i: integer;
  Smilie: array[1..13] of string;

  function GetImageIndex(Image: String): Integer;
  begin
    if image = '(cool)' then Result := 0;
    if image = ':-\' then Result := 1;
    if (image = ':-(') or (image = ':(') then Result := 2;
    if (image = ':-)') or (image = ':)') then Result := 3;
    if (image = ';-)') or (image = ';)') then Result := 4;
    if (image = ':-D') or (image = ':D') then Result := 5;
    if (image = ':P') or (image = ':p') or (image = ':-P') then Result := 6;
  end;
begin

(*
  RichEdit1.Perform(EM_SCROLLCARET, 0, 0);
  RichEdit1.SelStart:=length(RichEdit1.text);

*)
  Smilie[1] := ':-)';
  Smilie[2] := ':-\';
  Smilie[3] := ':-(';
  Smilie[4] := ':(';
  Smilie[5] := ':-)';
  Smilie[6] := ':)';
  Smilie[7] := ';-)';
  Smilie[8] := ';)';
  Smilie[9] := ':-D';
  Smilie[10] := ':D';
  Smilie[11] := ':P';
  Smilie[12] := ':-P';
  Smilie[13] := ':p';


  for i := 1 to High(Smilie) do

    repeat
      { Text-Smilie finden }
      ChatBox.SelStart := Pos(Smilie[i], ChatBox.Text) - 1;

      if Pos(Smilie[i], chatbox.text) > 0 then
      begin
        { Smilie lsöchen }
        ChatBox.SelLength := Length(Smilie[i]);
        ChatBox.SelText := '';

        { Bild einfügen }
        AddImageToRichEdit(GetImageIndex(Smilie[i]));
      end;

    until ChatBox.SelStart >= Length(ChatBox.Text);

end;

freak1985 21. Jun 2005 13:24

Re: Smilies im Richedit
 
hat denn keiner eine Idee woran das liegen könnte?

jfheins 21. Jun 2005 13:25

Re: Smilies im Richedit
 
Du musst mit Posex suchen, damit du deine vorige Fundstelle nicht nocheinmal findest !

(Und natürlich SelStart in der Schleife setzen ;) )


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 Uhr.
Seite 1 von 3  1 23      

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