Delphi-PRAXiS

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 Probleme mit TJvRichEdit Control einfügen.. (https://www.delphipraxis.net/74239-probleme-mit-tjvrichedit-control-einfuegen.html)

Angel4585 31. Jul 2006 09:55


Probleme mit TJvRichEdit Control einfügen..
 
Hallo,

ich habe folgendes Problem:

hiermit füge ich ein TJvGIFAnimator in ein TJvRichEdit ein:

Delphi-Quellcode:
procedure TForm1.RichEditChange(Sender: TObject);

  function GetGifAnimator : TJvGifAnimator;
  var i : integer;
  begin
  Result:=TJvGIFAnimator.Create(RichEdit);
  Result.Image:=JvGIFAnimator1.Image;
  i:=0;
  while RichEdit.FindComponent('ga'+IntToStr(i))<> nil do
    Inc(i);
  Result.Animate:=True;
  Result.Name:='ga'+IntToStr(i);
  end;

begin
LockWindowUpdate(Handle);
try
  if RichEdit.FindText(':D',0,Length(RichEdit.Text),[stSetSelection]) >= 0 then
    begin
    RichEdit.SelText:='';
    RichEdit.InsertControl(GetGifAnimator);
    end;
finally
  LockWindowUpdate(0);
  end;
end;
das funktioniert auch soweit, allerdings hab ich folgende zwei Probleme:

1. Das Control wird auf Pos(0,0) gesetzt, was ich allerdings ja durch left und Top bearbeiten kann, d.h. ich bräuchte die Pixel-koordinaten der Position wo das hin soll.

2. Scrollt das Control nicht mit, sondern bleibt immer gleich.

Kann mir da jemand helfen?

MfG :angel:

DGL-luke 31. Jul 2006 14:17

Re: Probleme mit TJvRichEdit Control einfügen..
 
Du weist ja gar nirgends das Parent zu :shock: ?!

Also wenn ich das vergesse, seh ich meistens gar nix... naja, evtl. macht das das richedit selber, mit dem insertcontrol. aber ansonsten weiss ih auch nicht, was noch sein könnte...

Angel4585 31. Jul 2006 14:41

Re: Probleme mit TJvRichEdit Control einfügen..
 
es wird ja angezeigt.. auf von der position richtig(also die werte von left un top) nur weis ich eben nich wie ich das mitscrollen lassen kann, bzw. an die richtige Position von dem zu ersetzenden Text setze.

Flocke 31. Jul 2006 17:06

Re: Probleme mit TJvRichEdit Control einfügen..
 
Du fügst mit InsertControl das Ding ja auch nicht in den Text ein sondern erzeugst nur ein Unterfenster zu dem RichEdit, ähnlich wie wenn du ein Element auf einem Panel ablegst. Das RichEdit weiß ja nichts von dem Control bzw. hat keinen Code, das zu behandeln.

Willst du es wirklich so machen wie du schreibst, dann versuche es so:

1. Die Zeichenposition, die du nach FindText mit SelStart auslesen kannst, solltest du dir merken (z.B. in TJvGifAnimator.Tag). Dann kannst du so den TJvGifAnimator an die richtige Position schieben.
Delphi-Quellcode:
with RichEdit.GetCharPos(Animator.Tag) do
begin
  Animator.x := x;
  Animator.y := y;
end;
2. Die Position solltest du bei den beiden Ereignissen OnHorizontalScroll und OnVerticalScroll des RichEdit neu setzen - für alle erzeugten Elemente (RichEdit.Controls).

Das hilft dir aber nicht viel wenn der Text oberhalb der Stelle bearbeitet wird, also wenn z.B. jemand dort eine neue Zeile einfügt - dann stimmt nämlich die gemerkte Position nicht mehr.

Angel4585 1. Aug 2006 07:15

Re: Probleme mit TJvRichEdit Control einfügen..
 
Zitat:

Zitat von Flocke
Das hilft dir aber nicht viel wenn der Text oberhalb der Stelle bearbeitet wird, also wenn z.B. jemand dort eine neue Zeile einfügt - dann stimmt nämlich die gemerkte Position nicht mehr.

Und ich denke wenn jemand das Fenster verkleinert/vergrößert und sich das RichEdit anpasst wird es dann auch Probleme geben oder? :?

Also im Prinzip muss ich den Animator irgendwie in den Text einfügen.. nur wie? :gruebel:

Flocke 1. Aug 2006 08:34

Re: Probleme mit TJvRichEdit Control einfügen..
 
Zitat:

Zitat von Angel4585
Und ich denke wenn jemand das Fenster verkleinert/vergrößert und sich das RichEdit anpasst wird es dann auch Probleme geben oder? :?

Dann musst du die obige Routine eben auch in OnResize aufrufen.

Zitat:

Zitat von Angel4585
Also im Prinzip muss ich den Animator irgendwie in den Text einfügen.. nur wie? :gruebel:

Du könntest höchstens das Bild einfügen (dafür gibt's 'ne Methode in TJvRichEdit), aber das ist dann nicht animiert.

Die "große" Lösung: Du kannst OLE-Objekte in ein RichEdit einfügen. Diese sind zwar nicht animiert, könnten aber jeweils ein TJvGifAnimator-Control verwalten (also beim Neuzeichnen des OLE-Objekts das Control neu platzieren). Also musst du "nur" so ein OLE-Control schreiben 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 Uhr.

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