We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Using THTML component

jpdupont
jpdupont asked
on
Medium Priority
196 Views
Last Modified: 2010-04-06
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 ?
Comment
Watch Question

Can you send me the THTML?

Author

Commented:
Yes
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.
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.
Of course MouseUp and MouseDown you must override too.

Author

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

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.

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.

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
Very fine Mirek !
All is OK
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.