Using THTML component

The fist version of my training software had got a simple hypertext system I had programming myself. In this hypertext, a right-click on a word was causing the apearance of a popup window with the translation of the word under the mouse cursor.
In the second version of the software, I've replaced my hypertext by Dave Baldwin's THTML which offers a lot of advantages and allows very good presentation on the screen. Yet, in HTML Viewer, I dont manage to offer the same  function "right-click=translation".
How can I allow it in THTML Viewer component ?
jpdupontAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

mirek071497Commented:
Can you send me the THTML?
0
jpdupontAuthor Commented:
Yes
0
mirek071497Commented:
I receive sorce but without INC and DLL but no problem because i saw so this is't free component.
I try help you but i now try understand how it works. When i finished then mayby i can give you answer.
Sorry for my english.
0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

mirek071497Commented:
Very fine component!

I probably don't understand you'r question.
What you mean when you write
"right-click=translation".

This component have virtual procedure URLAction;
I think so you must ovveride this proc.
0
mirek071497Commented:
Of course MouseUp and MouseDown you must override too.
0
jpdupontAuthor Commented:
Right-click=translation
means that when you click with the
right-button of the mouse you must get the word under the mouse cursor,
then find his translation in a lexicon
causing the apearance of a popup window with the translation of the word.

All word of the hypertext have to be translated (in a database). This is an educational software of languages (e.g. german with
all words translated in english or french).
Some word are also used as links to others pages or actions.
Dave Baldwin suggest to me that I should find a solution from his
"SelText".
If "SelText" allow to select a word with the mouse (and therefore to search it in the lexicon) is there any way, by programming - modifying the sources
- to automatically select the word under the cursor, rather than select it pixel by pixel dragging the mouse ?

Regards

Jean-Pol

0
mirek071497Commented:
Yes, but i spend some time with this. Wait to tomorrow. I mail to You new HtmlView.Pas but as i write later i can't test this fully so you will need remove some smal mistakes.

0
mirek071497Commented:
Here is the new THtmlViewer2 component.
I made this very simple but i think so you can improve this.
This component select word under cursor after right-click and you can read this at you'r code :

procedure TForm1.HTMLViewer1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
     if (Button = mbRight) then
       ShowMessage( HTMLViewer21.SelText );
end;


unit NewHTML;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Htmlview;

type
  THtmlViewer2 = class(THTMLViewer)
  private {}
  protected
    procedure HTMLMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
  public {}
  published {}
  end;

procedure Register;

implementation

Type
  MyPanel = class( TPaintPanel ) { this is only for acces to canvas at PaintPanel }
  end;

procedure Register;
begin
  RegisterComponents('Samples', [THtmlViewer2]);
end;

procedure THtmlViewer2.HTMLMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
var
  XR, CaretHt: integer;
  YR: LongInt;
  Cell1: TObject;
  WasFocused: boolean;
  Found : boolean;
  ReadBuff : array[0..40] of char;
  BegSel, i : longint;
begin
  WasFocused := Focused;
  SetFocus;
  if (Button = mbRight) and WasFocused then
  with SectionList do
  begin
    Sel1 := FindCursor( MyPanel(PaintPanel).Canvas, X, Y+YOff, XR, YR, CaretHt, Cell1);
    if Sel1 > -1 then
      begin
      SelB := Sel1-1;
      SelE := SelB+1;
      Found := false;
      while (SelB>=0) and (not Found) do
      begin
        GetSelTextBuf( ReadBuff, 2 );
        if ReadBuff[0] in ['A'..'Z', 'a'..'z' ] then
          begin
            Dec(SelB);
            SelE := SelB+1;
          end
        else
          found := true;
      end;
      BegSel := SelB;
      SelB := Sel1;
      SelE := SelB+30;
      i:=1;
      found := false;
      if GetSelTextBuf( ReadBuff, 30 )<>0 then;
      while (i<=30) and (not Found) do
      begin
        if ReadBuff[i] in ['A'..'Z', 'a'..'z' ] then
          inc(i)
        else
          found := true;
      end;
      SelB := BegSel;
      SelE := i+Sel1;
      if SelB <> SelE then
        InvalidateRect(PaintPanel.Handle, Nil, True);
      CaretPos := Sel1;
    end;
  end;
  inherited HTMLMouseDown(Sender,Button,Shift,X,Y);
end;

end.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jpdupontAuthor Commented:
Very fine Mirek !
All is OK
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.