Delphi-PRAXiS
Seite 1 von 2  1 2      

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 [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen (https://www.delphipraxis.net/98341-%5Bjedi-vcl%5D-grafik-bild-einem-jvrichedit-erkennen.html)

Shrandon 25. Aug 2007 14:43


[Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Hallo DP-ler,

ich habe folgendes Problem, das ich trotz langer Suche in mehreren Foren und Onkel Google nicht lösen kann:

Ich nutze die Jedi-Komponente TJvRichEdit und speichere Bilder im RichEdit ab.
Die Bilder können im RichEdit manuell vom User skaliert werden.
Jedoch muss ich beim speichern des RichEdits unbedingt den Text von dem Bild trennen (ggf. HTML-Tag, Dateiname oder ähnliches "Erkennungsmerkmal" an die Stelle des Bildes im text setzen).
Der Text an sich ist RTF-Formatiert, ich kann also nicht einfach bei Eingabe eine simple "Kopie" des Textes in eine string-Variable machen (wäre ja naheliegend).

Habe ich irgendeine Möglichkeit die Grafik im RichEdit zu erkennen/finden/suchen?



Falls es euch etwas hilft... so wird das Bild ins RichEdit geladen:

Delphi-Quellcode:
//führt OpenDialog aus
procedure TForm1.openpicture(Sender: TObject);
begin
  OpenDialog1.Execute;
end;


//lädt Bild in RichEdit
procedure TForm1.addgraphic(Sender: TObject; var CanClose: Boolean);
var Picture:TPicture;
begin
    Picture := TPicture.Create;
    Picture.LoadFromFile(OpenDialog1.FileName);
    RichEdit1.InsertGraphic(Picture.Graphic,true);
end;

Gruß Sven

Shrandon 3. Sep 2007 15:48

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
hat wirklich niemand eine idee?

ich komm selbst auf keine lösung, aber vllt könnte mir ja ein denkanstoß gut tun.
schreibt bitte alles was euch einfällt.

gruß und dank
sven

marabu 3. Sep 2007 17:58

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Herzlich willkommen in der Delphi-PRAXiS, Sven.

du kannst die Bilder, die du mit InsertObject() eingefügt hast, über die Schnittstelle IRichEditOle zählen und lokalisieren. Löschen kannst du sie über die Schnittstelle IRichEditOleCallBack.

Wenn es nur um das entfernen der Bilder und sonstiger Objekte geht, dann kannst du das Dokument auch einfach über einen Stream in das VCL RichEdit umspeichern.

Freundliche Grüße

moperswings 4. Sep 2007 09:12

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Geh mal zu bsalsa.com und installiere Dir die EmbeddedWb-Komponente.
Könnte Dir ein wenig Arbeit ersparen!

Shrandon 5. Sep 2007 14:55

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
vielen dank für eure hilfe!

@moperswings: mit einem webbrowser hab ich auch schon herumgbastelt, aber ich denke eine browser-kompo ist für meine zwecke nicht geeignet.


@marabu: dein vorschlag hört sich gut an.. ich hab versucht mehr über die schnittstelle, sowie über die function zu erfahren. die dokumentation für jvrichedit ist leider ziemlich rar.

kannst du mir vllt ein paar weitere infos über die funktionsweise liefern?

ich verstehe zum bsp. nicht welche parameter ich der insertobject() überliefern muss:

Delphi-Quellcode:
insertobject(const OleClassName:String ; Iconic:Boolean);
muss ich da mein TPicture in eine OleClass umwandeln?? wie mache ich sowas?
ich habs über den OleContainer versucht, bin aber nicht gerade schlau daraus geworden :/
Ebenso wollte mein Delphi TOleGraphic nicht kennen (darauf bin ich in der Hilfe gestoßen).


ich bemüh mich seit einigen stunden auf den richtigen weg zu kommen, steh aber anscheinend auf dem schlauch :)
ich wäre euch richtig dankbar, wenn ich mit eurer hilfe endlich dieses problem lösen könnte

gruß sven

Shrandon 5. Sep 2007 18:30

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Ich komme nicht voran :(

Ich habs jetzt mal mit InsertObjectFromFile() versucht.
Funkitioniert zwar, aber ich hab nicht mehr als eine Verknüpfung im RichEdit!

Größere Bilder (alles was etwas über .ico geht^^) werden gar nicht mehr angezeigt.

Kann ich mit dieser IRichEditOle-Schnittstelle nicht auf Grafiken zugreifen, die ich über TJvRichEdit.AddGraphic() hinzugefügt habe?

Und wie setze ich diese Schnittstelle überhaupt an? Ich hab bisher nur eine Möglichkeit über die TEditOle-Komponente gefunden, aber das nützt mir leider gar nichts :(

marabu 6. Sep 2007 20:15

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Hallo Sven,

InsertObject() ist eine Methode der Schnittstelle IRichEditOle. Du musst sie nicht selbst aufrufen, wenn du JvRichEdit.InsertGraphic() verwendest, wie du es ja bereits getan hast:

Delphi-Quellcode:
procedure TDemoForm.InsertButtonClick(Sender: TObject);
begin
  with JvRichEdit do
  begin
    Lines.Add('first line');
    Lines.Add('second line');
    Lines.Add('');
    SelStart := MaxInt;
    InsertGraphic(Image.Picture.Graphic, False);
    Lines.Add('');
    Lines.Add('last line');
  end;
end;
Über SelStart kannst du die Graphic an jeder beliebigen Stelle einfügen. Anschließend kannst du die Grafiken (und jedes andere OLE-Object) so finden und ersetzen:

Delphi-Quellcode:
procedure TDemoForm.ReplaceButtonClick(Sender: TObject);
var
  u: IUnknown;
  reole: IRichEditOle;
  i, n: Integer;
  obj: TREObject;
begin
  FillChar(obj, SizeOf(obj), 0);
  obj.cbStruct := SizeOf(obj);
  with JvRichEdit do
  begin
    Perform(EM_GETOLEINTERFACE, 0, Integer(@u));
    if Succeeded(u.QueryInterface(IID_IRICHEDITOLE, reole)) then
    begin
      n := reole.GetObjectCount;
      ShowMessage(Format('%d objects found', [n]));
      for i := 0 to Pred(n) do
      begin
        if Succeeded(reole.GetObject(i, obj, REO_GETOBJ_NO_INTERFACES)) then
        begin
          SelStart := obj.cp;
          SelLength := 1;
          SelText := Format('<object %d>', [Succ(i)]);
        end else ShowMessage('yikes');
      end;
    end;
  end;
end;
Vergiss meinen Hinweis auf die Schnittstelle IRichEditOleCallBack, deren Methode DeleteObject() dient nicht zum Löschen, sondern ist ein Event Handler, den du implementieren kannst.

Getippt und nicht getestet.

Gute Nacht

Shrandon 7. Sep 2007 16:34

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Boah!! Perfekt! Es funktioniert!

Irgendwo im Quelltext ist noch ein Fehler, weil er immer nur ein Objekt erkennt und umwandelt.
Beim 2. Objekt kommt immer die Fehlermeldung ('yikes').


Aber davon abgesehen hab ich noch ein einziges Problem.
Wie komm ich wieder zu dem Bild??
Also im o.g. Quelltext wird ja das Object durch '<object X>' ersetzt, aber ich will vorher die Grafik aus "SelText" wieder einer Variablen zuordnen,sodass ich das Bild weiter verwenden kann (speichern, uploaden, bearbeiten etc.).

Kann ich den String von 'SelText' wieder irgendwie einem TPicture o.Ä. zuordnen?

Vielen Dank für eure Hilfe
Gruß Sven

gabneo 24. Jun 2008 11:21

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
Hallo DP-Community!

Was muss ich denn in die uses aufnehmen damit "IRichEditOle;" erkannt wird?
RichOle soll es zwar als unit geben die kennt er aber bei mir nicht.

Delphi 2007 -> Version 11.0.2627.5503

Vielen Dank schonmal und greez
gabneo


:dp:

gabneo 25. Jun 2008 14:48

Re: [Jedi VCL] Grafik/Bild in einem JvRichEdit erkennen
 
hoffnungsvoller *push*

:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.
Seite 1 von 2  1 2      

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