Einzelnen Beitrag anzeigen

Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#1

Bild in JvRichedit einfügen ohne Focus?

  Alt 4. Sep 2007, 09:40
Hallo,

ich habe mehrere Forms mit JvRichEdits in die manchmal Bilder eingefügt werden (Smilies in einem Chat). Mit der Prozedur InsertGraphic(AGraphic: TGraphic; Sizeable: boolean) wird ein Bild bei der aktuellen Auswahl eingefügt und dazu braucht das JvRichedit den Focus damit man die passende Stelle auswählen kann. Das ist ein Problem, denn wenn man gerade in einer anderen Form was macht (Nachricht schreiben) und zwischendurch ein Smilie in ein Richedit einer anderen Form eingefügt wird, wird man beim Schreiben unterbrochen weil die andere Form den Focus bekommt. Kann man irgendwie Bilder in ein JvRichedit einfügen ohne das es den Focus braucht? Zur Zeit füge ich die Smilies so ein:
Delphi-Quellcode:
// Smilies einfügen
procedure TMainForm.BildEinfuegen(Bilder: TPNGImageCollection; ImageIndex: integer; RE: TJvRichEdit);
var
  BMP: TBitmap;
begin
  BMP := TBitmap.Create;
  try
    //Das JvRichedit zeigt PNGs nicht an, daher erst in BMPs umwandeln
    BMP.Width := Bilder.Items[ImageIndex].PngImage.Width;
    BMP.Height := Bilder.Items[ImageIndex].PngImage.Height;
    Bilder.Items[ImageIndex].PngImage.Draw(BMP.Canvas,Rect(0,0,BMP.Width,BMP.Height));
    RE.InsertGraphic(BMP,false);
    with RE.GetSelection do RE.SetSelection(cpMin + 1, cpMin + 1, False);
  finally
    BMP.Free;
  end;
end;

// Smilies suchen

procedure TMainForm.SucheSmilie(Smilie: string; ImageIndex: integer; Liste: TPNGImageCollection; RE: TJVRichEdit);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RE do
  begin
    if SelLength <> 0 then StartPos := SelStart + SelLength
    else StartPos := 0;
    ToEnd := Length(Text) - StartPos;
    FoundAt := FindText(Smilie, StartPos, ToEnd, []);
    while FoundAt <> -1 do
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(Smilie);
      BildEinfuegen(Liste, ImageIndex,RE);
      FoundAt := FindText(Smilie, StartPos, ToEnd, []);
    end;
  end;
end;
Kennt jemand eine Lösung für dieses Problem?
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat