Page 1 of 1

ItemNo under cursor

Posted: Thu Nov 15, 2007 3:10 pm
by j&b
Hello,

I want to know if there is something under the cursor (#9 (tAB), #13 (return - nothing), #32 (blank) or >#32 (alpha-numeric char) ... )

Cursor maybe in TDBrve (1.9.47) or rve-table.

I don't know how to get ItemNo (under the cursor), I don't know if I have to use GetItem or GetItemText or GetCurrentItemNo ...

I can't use memoMouseMove because I click a button after choosing the position in memo
(
if flagPt=false then pt:= memo.ClientToDocument(Point(X,Y)); //ohne flagPt kommt es durch die Rückkehr vom Image (pImage1) zu einem Fehler
if not memo.GetItemAt(pt.X, pt.Y, RVData, ItemNo, OffsInItem, True) then exit; // no item below the mouse cursor
)

Please help me.

Jürgen

Posted: Thu Nov 15, 2007 3:59 pm
by Sergey Tkachenko
CurItemNo property. It is an index of item in TopLevelEditor.
For example, text of the current item:

Code: Select all

if rve.TopLevelEditor.GetItemStyle(rve.TopLevelEditor.CurItemNo)>=0 then
  s := rve.TopLevelEditor.GetItemText(rve.TopLevelEditor.CurItemNo)
else
  s := ''; // non text

Posted: Thu Nov 15, 2007 5:03 pm
by j&b
Sergey Tkachenko wrote:CurItemNo property. It is an index of item in TopLevelEditor.
For example, text of the current item:

Code: Select all

if rve.TopLevelEditor.GetItemStyle(rve.TopLevelEditor.CurItemNo)>=0 then
  s := rve.TopLevelEditor.GetItemText(rve.TopLevelEditor.CurItemNo)
else
  s := ''; // non text
in the meantime I have solved my problem in this way:

memo.selectCurrentWord;
Memo.copyDef; s:= clipboard.astext;
memo.deselect;
if s='' then begin
...
end;

I think it's the same (?), but a workaround

How do you ask if s is underlined ?

My solution:

if btnUnderline.down=false then begin ...

procedure TForm1.btnUnderlineClick(Sender: TObject);
begin
if btnUnderline.down = True then Memo.ApplyStyleConversion(rv_MAKEUNDERLINE)
else Memo.ApplyStyleConversion(rv_CLEARUNDERLINE);
end;

I think there must be an easier solution.

OR


I want to get i in "if (fsUnderline in rvs.TextStyles.style)" without "for i := 0 to rvs.TextStyles.Count-1 do begin":


for i := 0 to rvs.TextStyles.Count-1 do begin
if (fsUnderline in rvs.TextStyles.style) and (rvs.TextStyles.Color = fa1) then
rvs.TextStyles.Color:= fa2; //blau wird grün
if (fsUnderline in rvs.TextStyles.style) and (rvs.TextStyles.Color = fa3) then
rvs.TextStyles.Color:= fa4; //von lime nach d_türkis
end;

Posted: Thu Nov 15, 2007 7:04 pm
by Sergey Tkachenko
Do you need a current word or text of the current item? Item may consist of several words.
If a current word, it's not necessary to use the Clipboard (actually, application should not use the Clipboard except for Copy and Cut commands).

Code: Select all

memo.SelectCurrentWord
s := memo.GetSelText;
if s<>'' then
  // word is selected, current text style is now style of the current item
  IsUnderlined := fsUnderline in memo.Style.TextStyles[memo.CurTextStyleNo].Style
else
  // no word at the caret position
  IsUnderlined := False;