procedure TCmdForm.ClickPageMemo(Sender: TObject);
var CharCnt: longint;
StartPos,StartLength,QryPos: longint;
QryChr: char;
QryStr: string;
ShiftOn: boolean;
begin (* UnicodeToUtf8 Utf8ToUnicode UTF8Encode UTF8Decode AnsiToUtf8 Utf8ToAnsi *)
ReportPosition;
if (CurrentLin=1) and (CurrentPos=1)
then PageMemo.GetTextAttributes(PageMemo.SelStart, SelFontFormat) // get in place
else PageMemo.GetTextAttributes(PageMemo.SelStart-1, SelFontFormat); // get by prior
//SHOWMESSAGE('Lin='+inttostr(CurrentLin)+' Pos='+inttostr(CurrentPos));
ShiftOn:= IsShiftKeyPressed;
if not ShiftOn then
begin
//activate keyboard language
if (SelFontFormat.name=DefEng) and (DefEng=DefGrk) then
begin
StartLength:= PageMemo.SelLength;
StartPos:= PageMemo.SelStart;
if StartPos=0 then QryPos:= 0
else QryPos:= StartPos-1;
SendMessage(PageMemo.Handle, EM_HIDESELECTION, 1, 0); // hide selection
PageMemo.SelStart:= QryPos;
PageMemo.SelLength:= 1;
QryStr:= PageMemo.SelText;
QryChr:= QryStr[1];
while (((QryChr=' ') or (QryChr= #9)) and (QryPos>0)) do
begin
QryPos:= QryPos-1;
PageMemo.SelStart:= QryPos;
PageMemo.SelLength:= 1;
QryStr:= PageMemo.SelText;
QryChr:= QryStr[1];
end;
PageMemo.SelStart:= StartPos;
PageMemo.SelLength:= StartLength;
SendMessage(PageMemo.Handle, EM_HIDESELECTION, 0, 0); // show selection
if (ord(QryChr)=206) or
(ord(QryChr)=207) or // ord(char)is decimal index of character...
(ord(QryChr)=225) // accented // 206, 207 or 225 for Noto Sans font
then SetGreek // 214 or 215 for Noto Sans Hebrew
else SetEnglish; // 220 or 221 for Noto Sans Syriac
end;
if (SelFontFormat.name=DefGrk) and not (DefEng=DefGrk) then SetGreek;
if (SelFontFormat.name=DefHeb) then SetHebrew;
if (SelFontFormat.name=DefSyr) then SetSyriac;
(* // for testing
PageMemo.SelStart:= PageMemo.SelStart-1;
PageMemo.SelLength:= 1;
QryStr:= PageMemo.SelText;
QryChr:= QryStr[1];
PageMemo.SelStart:= PageMemo.SelStart+1;
PageMemo.SelLength:= 0;
showmessage(inttostr(ord(QryChr)));
*)
end; // else showmessage('ShiftOn');
PrepareToolbar;
PageMemo.Repaint; // clears previous click and highlight shadow
end;