Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   RxRichEdit und InserControl (https://www.delphipraxis.net/172568-rxrichedit-und-insercontrol.html)

runningsoft 11. Jan 2013 12:34

Delphi-Version: 2010

RxRichEdit und InserControl
 
Hallo zusammen,

ich füge mit folgendem Code ein Bild in ein RxRichEdit ein:

Delphi-Quellcode:
//die Grafik als Control einfügen
   HIMG := TImage.Create(nil);
   with HIMG do
      begin
      Stretch := False;
      Proportional := True;
      width := 113;
      Height := 113;
      Left := RxRichEdit1.Left;
      Top := RXRichEdit1.Top;
      Picture.LoadFromFile(InstPath + 'anlagelogo.bmp');
      end;
   RXRichEdit1.InsertControl(HIMG);
Leider "verschwindet" dadurch jeglicher Text im RichEdit. Ich sehe nur noch den Cursor, aber keine Zeichen mehr. Lasse ich die Prozedur weg, ist alles bestens.

Weiß jemand Rat?

Steffen

p80286 11. Jan 2013 12:51

AW: RxRichEdit und InserControl
 
Hatest Du diesen Hinweis schon gelesen?

Gruß
K-H

runningsoft 11. Jan 2013 13:08

AW: RxRichEdit und InserControl
 
Diesen Code kannte ich schon, aber er bringt mich bei meinem speziellen Problem nicht weiter. Das Einfügen einer Grafik in das RichEdit ist an sich nicht das Problem.

Ich möchte für eine Kopfzeile eines Serienbriefes folgendes erreichen:

Links ein Logo, ca. 3x3 cm groß
rechts vom Logo einen dreizeiligen Text mit Name und Anschrift des Vereins

Das Problem im RXRichEdit sind die drei Zeilen rechts neben dem Logo. Das RichEdit arbeitet offenbar ausschließlich zeilenbasiert und lässt einen mehrzeiligen Text neben einer Grafik (so wie in Word bei entsprechender Formatierng der Grafik) nicht zu.

Für die Darstellung des geplanten WYSIWYG-Editors bin ich dann auf die Idee gekommen, drei Zeilen Text mit der benötigten Einrückung zu schreiben und dann in die entstandene Lücke per InsertControl das Logo einzufügen.

Ohne InsertControl ist alles bestens, aber sobald ich ein Control einfüge (hab ich auch testweise mal mit einem Button probiert), verschwindet die Schrift, die ich schon vorher geschrieben hatte. Allerdings ist sie nur optisch im RichEdit verschwunden, alle Formatierungsinformationen der nicht mehr sichtbaren Schrift sind noch da.

Steffen

Klaus01 11. Jan 2013 13:21

AW: RxRichEdit und InserControl
 
.. wenn Du ein rtf mit z.B. word erstellst (mit Image und Text).
Kannst dieses dann in das TRichEdit laden und ist dann alles sichtbar (Image und Text)?

Edit: vielleicht hilft Dir das von Torry

Grüße
Klaus

runningsoft 11. Jan 2013 13:39

AW: RxRichEdit und InserControl
 
Das gewünschte Dokument mit Word erstellt --> als RTF-abgespeichert --> wieder in Word geöffnet = alles super

Das gleiche Dokument im RXRichEdit geöffnet --> die Grafik ist weg, Textformatierung ist erhalten geblieben.

Wie schon gesagt, das Problem ist nicht das Einfügen einer Grafik im RichEdit, das geht. Aber diese Grafik über mehrere Textzeilen hinweg einzufügen, das geht wohl leider nicht.

Und dann bleibt immer noch die Frage, wieso ein InsertControl im RXRichEdit (egal was für ein Control), den Text unsichtbar werden lässt.

Steffen

Klaus01 11. Jan 2013 13:43

AW: RxRichEdit und InserControl
 
es mag sein, dass die Wrapperklasse das nicht so richtig unterstützt.

In diesem Thread wird auf die Verwendung der RichEditkomponente von JVCL hingewiesen.

Grüße
Klaus

runningsoft 11. Jan 2013 13:55

AW: RxRichEdit und InserControl
 
Kann diese Komponente das?

Klaus01 11. Jan 2013 14:04

AW: RxRichEdit und InserControl
 
Zitat:

Zitat von runningsoft (Beitrag 1198655)
Kann diese Komponente das?

weiß ich nicht, aber Du kannst es einfach ausprobieren.
In der Demo ist ein RichEdit vorhanden, dort kannst Du Dein rtf File laden.
Wenn es funktionert - gut, wenn nicht - dann weiß ich auch nicht weiter.

Grüße
Klaus

sx2008 11. Jan 2013 14:06

AW: RxRichEdit und InserControl
 
InsertControl fügt das Control nicht in die RTF-Daten ein sondern macht etwas völlig anderes.
Nimmt man z.B. eine Groupbox, dann kann man darauf weitere Controls wie TLabel, TEdit,... platzieren.
Entweder man nimmt dazu den Formulardesigner oder man verwendet die Funktion InsertControl oder man setzt das Parent-Property.
Statt
Delphi-Quellcode:
RXRichEdit1.InsertControl(HIMG)
hätte man auch
Delphi-Quellcode:
HIMG.Parent := RXRichEdit1
schreiben können; der Effekt ist der Gleiche.

runningsoft 11. Jan 2013 14:15

AW: RxRichEdit und InserControl
 
@Klaus01
Ja, hab mir die Demo gerade schon heruntergeladen. Sieht aber nicht so aus. Bezüglich der Bilder kann ich keine Veränderung gegenüber dem bisher von mir verwendeten RXRichEdit feststellen.


@sx2008
Stimmt, der Effekt ist der gleiche.
Delphi-Quellcode:
HIMG.Parent := RXRichEdit1
hatte ich auch schon. Aber warum verschwindet der Text? Es kann doch nicht gewollt sein, dass es die Möglichkeit gibt, Kontrolls einzufügen mit dem Resultat, dass man den text nicht mehr sieht.

Das der Bildinhalt des Kontrolls nicht in der RTF-Datei mitgespeichert wird, war mir klar. Mir geht es erst einmal nur um die gewünschte Bildschirmanzeige im Editorfenster.
Das Abspeichern der Bildinformation sowie das Drucken an der richtigen Stelle würde ich dann gesondert behandeln.


Steffen

Klaus01 11. Jan 2013 14:34

AW: RxRichEdit und InserControl
 
.. ich denke es wird nicht funktionieren.
In word mit entprechender Bildformatierung ist es möglich Text neben dem Bild darzustellen.
Wird das Dokument als RTF gespeichert und von Word wieder geöffnet ist alles o.k.
Wird es jedoch mit Wordpad geöffnet sind die TextZeilen unter dem Bild zu finden.

Vermutung:
MS Word bringt eine eigene RichEdit Engine mit.
Wordpad nutzt die vom Betriebssystem.

Grüße
Klaus

sx2008 11. Jan 2013 17:22

AW: RxRichEdit und InserControl
 
Zitat:

Zitat von runningsoft (Beitrag 1198666)
Aber warum verschwindet der Text? Es kann doch nicht gewollt sein, dass es die Möglichkeit gibt, Kontrolls einzufügen mit dem Resultat, dass man den text nicht mehr sieht

TRichText war nie als Kontainer für andere Controls geplant/konzipiert.
Normalerweise sind nur TForm, TFrame, TPanel, TGroupbox, TScrollbox (hab ich was vergessen?) als Kontainer vorgesehen.
Bei diesen Klassen ist
Delphi-Quellcode:
csAcceptsControls in ControlStyle = True
.

Es sieht so aus, als ob dein Image den Text komplett verdeckt.
Mit folgendem Code wird das Image in die linke obere Ecke geschoben.
Delphi-Quellcode:
HIMG.AutoSize := false;
HIMG.SetBounds(0,0,32,32);
Da das Image viel kleiner als das RichText ist, müsste der Text zumindest teilweise zu sehen sein.

p80286 11. Jan 2013 17:51

AW: RxRichEdit und InserControl
 
Zitat:

Zitat von Klaus01 (Beitrag 1198669)
Vermutung:
MS Word bringt eine eigene RichEdit Engine mit.
Wordpad nutzt die vom Betriebssystem.

damit liegst Du nicht ganz falsch.
Such mal nach Riched*.dll bzw nach msftedit.dll
und dann schau mal hier nach

Gruß
K-H

runningsoft 11. Jan 2013 17:58

AW: RxRichEdit und InserControl
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein, das ist es leider auch nicht. Das Image, dass ich einfügen will ist im Beispiel nur gut 100x100 Pixel groß.
Und man sieht dann, wenn man mit dem Cursor neben oder unter dem Image ist, auch den Cursor blinken, aber eben nicht mehr den eingegebenen Text. Statt Buchstaben erscheint immer nur der senkrechte Strich des Cursors (siehe angehängter Screenshot)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz