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?
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.
"...wyciagasz slowo na ktorym sie ten kursor znajduje i juz."
Nie wiem o co ci w tym chodzi.
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;
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;
a zerknij na moj pierwszy kod. ten "bledny".
//zaraz.... a po co dales handled:=false; ?
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?
hideSelection:=false;
Wielkie dzięki za pomoc. :)
Bo mi się menu kontekstowe później nie otwiera.