Delphi-PRAXiS
Seite 2 von 3     12 3      

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 21. Jun 2005 13:27

Re: Smilies im Richedit
 
PosEx()?

und das is doch in der schleife, oder net?

jfheins 21. Jun 2005 13:28

Re: Smilies im Richedit
 
Ja, vergiss den Teil in Klammern ;)

PosEx ist in der Unit StrUtils dehklariert, näheres in der OH ...

freak1985 21. Jun 2005 13:36

Re: Smilies im Richedit
 
also PosEx gibts in meiner delphi hilfe und in dieser unit net :(

jfheins 21. Jun 2005 13:41

Re: Smilies im Richedit
 
Zitat:

PosEx (Funktion)

Die Funktion gibt den Indexwert eines Teilstrings zurück.

Unit
StrUtils

Kategorie
String-Verarbeitung

Delphi-Syntax:
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;


Beschreibung

PosEx gibt den Index von SubStr in S zurück, wobei die Suche bei Offset begonnen wird. Wenn Offset 1 ist (Vorgabe), entspricht PosEx Pos.

PosEx gibt 0 zurück, wenn SubStr nicht gefunden wird, Offset größer als die Länge von S ist oder Offset kleiner als 1 ist.
Das sagt meine OH (D7) ... welche Delphiversion hast du denn ?

Khabarakh 21. Jun 2005 13:42

Re: Smilies im Richedit
 
Gibt es erst genau ab D7.
Aber eigentlich sollte doch der Text entfernt werden und so auch Pos reichen :gruebel: .

Neutral General 21. Jun 2005 13:42

Re: Smilies im Richedit
 
also ich habe sowas ähnliches schonmal programmiert und hab es etwas angepasst :

Delphi-Quellcode:
procedure ReplaceSmilie(Smile : String; Source : TRichedit);
var Posi : Integer;
    text : String;
begin
 text := Source.Text;
 while pos(Smile,Text) <> 0 do begin
  if pos(Smile,Text) > 0 then begin
   Posi := pos(Smile,Text);
   delete(Text,pos(Smile,Text),Length(Smile)); // ':)' wird gelöscht
   insert('hehe',Text,posi); // und an dessen stelle 'hehe' eingefügt. Bei dir eben das bild
  end;
  Source.Text := Text;
 end;
end;
Ich hoffe das dir das hilft und ich nicht irgendwie an dir vorbeirede ^^
Bei der Zeile mit

Delphi-Quellcode:
insert('hehe',Text,posi);
musst du halt dein Smilie einfügen aber ich denke das das funktioniert.

freak1985 21. Jun 2005 13:45

Re: Smilies im Richedit
 
@Khabarakh

das isses ja auch. Das funzt ja auch ne weile, aber irgendwann will er net mehr. ich bau mal ein test prg zusammen und poste es hier. vllt findet ihr den (wahrscheinlich kleinen, dummen) fehler ;)

freak1985 21. Jun 2005 13:56

Re: Smilies im Richedit
 
Liste der Anhänge anzeigen (Anzahl: 1)
hm,

ich probier deinen code mal aus. aber hier erstmal mein aktuelles prog.
is ein jvRichedit, das das TRichedit das ja net so kann mit den bildern.

Flocke 21. Jun 2005 13:58

Re: Smilies im Richedit
 
Wenn du sowieso ein JvRichEdit benutzt, warum nimmst du nicht die Funktion FindText? Wenn du stSetSelection angibst, dann markiert die dir sogar schon die Fundstelle.

freak1985 21. Jun 2005 14:10

Re: Smilies im Richedit
 
@ Flocke.

danke für den tipp. hab ich übersehen.

hab das nun auch so gemacht, und daraus entsteht folgender code, der auch funzt :)


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  Smilie: array[1..13] of string;

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

begin
  Smilie[1] := '(cool)';
  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
    if Pos(Smilie[i], ChatBox.Text) > 0 then
    begin
      ChatBox.FindText(Smilie[i], 0, Length(Chatbox.Text), [stSetSelection]);
      ChatBox.SelLength := Length(Smilie[i]);
      ChatBox.SelText := '';
      AddImageToRichEdit(GetImageIndex(Smilie[i]));
    end;

end;
es ist ja nun so, dass er zunächst einmal immer nur das ERSTE smilie von einer sorte ersetzt. ich brauch nun noch ne repeat oder while schleife für außenherum, sodass er auch alle vorkommenden ersetzt. nur fällt mir keine bedingung für die schleife ein!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Seite 2 von 3     12 3      

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