Sprawdzanie kliknięcia w zaznaczony tekst

0

Możecie mnie wspomóc w jednej sprawie? Chodzi mi o to jak sprawdzić, czy kliknięcie PPM nastąpiło w zaznaczony tekst czy nie w komponencie memo?

0

mozesz tak...:

procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
  Handled:=true;
  memo1.Perform(WM_LBUTTONDOWN, MK_LBUTTON, makelong(MousePos.x,MousePos.y));
  memo1.Perform(WM_LBUTTONUP  , MK_LBUTTON, makelong(MousePos.x,MousePos.y));

  //Memo1.SelStart;

end;

teraz w "SelStart" masz pozycje tego migajacego kursora na tekscie. wyciagasz slowo na ktorym sie ten kursor znajduje i juz.

0

"...wyciagasz slowo na ktorym sie ten kursor znajduje i juz."

Nie wiem o co ci w tym chodzi.

0

no prosze, wystarczylo wpisac w google "delphi memo word under cursor", potem troche pomyslec i voila:

procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var poz: DWORD;
begin
  Handled:=true;
  poz := SendMessage(Memo1.Handle, EM_CHARFROMPOS, 0, MakeLong(MousePos.x, Mousepos.y));
  poz:=loWord(poz);

  if (poz>=memo1.SelStart) and (poz<=memo1.SelStart+memo1.SelLength)
    then ShowMessage('Na zaznaczeniu!');
end;
0

Wszystko działa, może teraz jeszcze głupie pytanie, ale jednak. Kontynuując tamten kod chciałem zrobić tek, że jak nie kliknę w zaznaczony tekst, tylko gdzieś indziej, to kursor przechodzi w to miejsce i tekst się odznacza, czyli coś na miarę symulacji kliknięcia lewego przycisku myszy. Jednak podany niżej kod nie działa...

procedure TMain.Memo1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
var
  poz: DWORD;
begin
  Handled := true;
  poz := SendMessage(Main.Memo1.Handle, EM_CHARFROMPOS, 0, MakeLong(MousePos.X, Mousepos.Y));
  poz := loWord(poz);
  Handled := False;

  if (poz >= Main.Memo1.SelStart) and (poz <= Main.Memo1.SelStart + Main.Memo1.SelLength) then
    begin
      ShowMessage('Na zaznaczeniu!');
    end
  else
    begin
      Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
      Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    end; 
end;
0

a zerknij na moj pierwszy kod. ten "bledny".

//zaraz.... a po co dales handled:=false; ?

0

Wszystko pięknie działa. Niektóre rzeczy są tak banalne, a tak ciężko na nie wpaść. :D

Jeszcze tak na marginesie, jak zaznaczę tekst w TEdit i wywołam inną formatkę lub coś innego zadziałam, to zaznaczenie mi znika, ale tylko graficznie. Np. Mam TEdit z tekstem i zaznaczam, potem wywołuję przyciskiem inną formatkę, na której jest przycisk dajmy na to usuwania zaznaczonego tekstu, to zaznaczenie znika, ale po naciśnięciu przycisku dokładnie wcześniej zaznaczony tekst się usuwa. Jakaś radę miałby ktoś jeszcze na to?

0

hideSelection:=false;

0

Wielkie dzięki za pomoc. :)

0

Bo mi się menu kontekstowe później nie otwiera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1