Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   agregar un link ligado a un procedimiento a un RichText (https://www.clubdelphi.com/foros/showthread.php?t=60354)

robertosc 29-09-2008 19:14:51

agregar un link ligado a un procedimiento a un RichText
 
hola a todos!

mi duda es como puedo agregar ya sea un link o una imagen dentro de un richtext y al momento de dar click ya sea en el link o en la imagen llamar un procedimiento en delphi, como un tipo boton...:)

ya se como agregar el link o la imagen al richtext, pero no más... :p

el richtext va tener la propiedad de readonly=true, digamos que nomas lo uso como consulta o lectura, pero necesito usarlo por que el texto tiene formato...

gracias de antemano!

lKinGl 30-09-2008 00:13:36

podrias ser mas explicito?

egostar 30-09-2008 00:50:55

Hola

http://delphi.about.com/od/vclwritee.../aa051804a.htm

Salud OS

robertosc 30-09-2008 14:56:05

hola lKinGl gracias por responder, mira tengo un richtext asi:



y quiero programar que cuando le den clic a la imagen sea como un tipo boton donde yo pueda programar por medio de codigo delphi una acción. :rolleyes: llamar un procedimiento donde yo pueda abrir otra forma por ejemplo.

robertosc 01-10-2008 15:51:40

o algun otro componente que pueda utilizar para lograr mi proposito :confused: :(

cHackAll 01-10-2008 23:59:49

Código Delphi [-]
//...

uses ActiveX, ComObj, RichEdit;

//...

type
 IRichEditOle = interface(IUnknown)
  ['{00020d00-0000-0000-c000-000000000046}']
  function GetClientSite(out clientSite: IOleClientSite): HRESULT; stdcall;
  function GetObjectCount: HRESULT; stdcall;
  function GetLinkCount: HRESULT; stdcall;
  function GetObject(iob: Integer; out ReObject; dwFlags: Cardinal): HRESULT; stdcall;
 end; // changed !!!

procedure TForm1.JvRichEdit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var
 RichEdit: TCustomMemo;
 Point: TPoint;
 Value, Index: Integer;
 RichEditOle: IRichEditOle;
 ReObject: record
  cbStruct, cp: Cardinal;
  clsid: TCLSID;
  poleobj: IOleObject;
  pstg: IStorage;
  polesite: IOleClientSite;
  sizel: TSize;
  dvAspect: Integer;
  dwFlags, dwUser: Cardinal;
 end;

begin
 if (Button = mbLeft) and (Sender is TCustomMemo) then
  begin
   RichEdit := Sender as TCustomMemo;
   if RichEdit.SelLength = 1 then
    begin
     Windows.GetCaretPos(Point);
     Value := RichEdit.Perform(EM_CHARFROMPOS, 0, Integer(@Point)) - 1;
     if Value >= 0 then
      begin
       SendMessage(RichEdit.Handle, EM_GETOLEINTERFACE, 0, Integer(@RichEditOle));
       ReObject.cbStruct := SizeOf(ReObject);
       for Index := 0 to RichEditOle.GetObjectCount - 1 do
        begin
         RichEditOle.GetObject(Index, ReObject, 0{REO_GETOBJ_NO_INTERFACES});
         if Integer(ReObject.cp) = Value then // 0j0: funciona con cualquier objeto!
          begin
           ShowMessage('Object ID: ' + IntToStr(Index)); // aquí haces lo que debes hacer...
           RichEdit.SelLength := 0;
           Break;
          end;
        end;
      end;
    end;
  end;
end;

Nota; considerar que en las pruebas se utilizó un componente JEDI, sin embargo debiese funcionar con cualquier componente que utilice interfaces OLE estándares :cool:.

Saludos

robertosc 02-10-2008 15:19:58

hola [cHackAll], muchas gracias :D

ya prove tu código y funciono perfecto, justo lo que necesitaba!!!! :D


La franja horaria es GMT +2. Ahora son las 07:47:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi