[BCB6] Blokada najazdu kursora

0

Witam,

mam sobie formę i chcę, żeby nie można było wjechać na nią nawet kawałkiem kursora. Po ustawieniu:

Cursor = crNone;

forma kursora nie ma, ale jak jest on przy formie to jego kawałek może wjechać na nią. Czy da radę całkowicie zablokować jego wjazd? Pewnie ustawić w Z-Order formę ponad kursora się nie da.

Sprawdzanie położenia w timerach jest nie bardzo.

0

jest chyba takie zdarzenie jak OnMouseMove =]

i jest chyba także GetCursorPos oraz SetCursorPos

pobawiłem się trochę i mam takie coś:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Pos:TPoint;
begin

  if X<(Form1.Width div 2) then
    Pos.X:=-2
  else
    Pos.X:=Form1.Width+2;

  if Y<(Form1.Height div 2) then
    Pos.Y:=-2
  else
    Pos.Y:=Form1.Height+2;

  SetCursorPos(Form1.Left+Pos.X,Form1.Top+Pos.Y);

end;

idealne nie jest =]
i po prostu "wypychaj" szczura z nory =D

0

No ja wieeem, ale kursor w ogóle nie wjeżdża na formę. Jego HOTSPOT jest np. pixel od niej, ale reszta kursora wjeżdża na formę. I tego wjeżdżania chcę uniknąć. Sprawdzania położenia co chwilę chcę uniknąć.

0

Nie wchodzi w rachubę - wynika z założenia działania programu.

0

zabierasz standardowe obramowanie a to co tam rysujesz na formię ( bo podejrzewam że rysujesz ) rysuj z na środku tak by brzeg był pusty i wtedy wypchać szczura ?

albo w Timer'ku dać SetCursorPos(0,0); =]

0

Forma nie ma obramowania, nie ma bordera. Rysuję na całej powierzchni. Począwszy od x = 0, y = 0. Nic nie może przykrywać formy.
Potrzebuję innego rozwiązania niż Timer. Jeśli istnieje.

0

-=mAkAbrAs=- masz tylko 2 możliwości:

  1. Hotspot nie wjeżdża na okno twojego programu - na bieżąco sprawdzasz jego pozycję (hook na mysz, albo timer)
  2. Hotspot wjeżdża na okno twojego programu, ale wygląda jakby nie wjeżdżał na formę - dodajesz drugą, przezroczystą formę leżącą pod formą główną i trochę większą niż forma główna.
0

W sumie te drugie rozwiązanie jest takie jakbym powiększył formę i rysował z offsetem. Tyle, że ta forma, umieszczona jest na drugim monitorze. I na tym drugim monitorze musi byc malowanie od 0,0. Powiększę formę i na pierwszym będzie mi wystawać :).
Chyba, że da radę wyłączyć pokazywanie kursora na drugim monitorze.

0

Na pewno chcesz, aby kursor zbliżony do prawej krawędzi pierwszego monitora znikał ? To już lepiej jak będzie go widać na drugim monitorze. Części kursora raczej nie da się ukrywać w czasie rzeczywistym.

Jeśli jednak chcesz aby kursor znikał to połóż przezroczystą formę na pierwszym monitorze przy prawej krawędzi.

A tak w ogól nie da się uruchomić drugiego pulpitu na drugim monitorze ?

0

Wybrana jest opcja rozszerzenia pulpitu o rozmiar drugiego monitora. I tak musi zostać.

Przezroczysta, dodatkowa forma odpada, bo musiałaby być na wierzchu - sprawdzana co jakiś czas.. I przykrywałaby ewentualne przyciski "Zamknij (X)" innych okien.

No nic.. :)

0

Ale co z tego, że przezroczysta forma cokolwiek przykryje nie dając możliwości kliknięcia (np. w 'X') skoro i tak wtedy ma nie być widać kursora (bo jego część wyjeżdża na drugi monitor) ?

A jak chcesz aby dało się klikać niewidocznym kursorem to można przekierować zdarzenia myszy z przezroczystej formy na okno pod spodem.

0

może wyłączyć mysz przez WinAPI ?

0

adf88:
Na pierwszym monitorze kursor ma być widać :)

Potwoor_:
Jeśli chodzi o wyłączenie działania myszki, to nie, musi działać, aby np: konfigurować program na pierwszym monitorze. Chyba, że na drugim monitorze da radę wyłączyć.

0

A co jak kursor jest na OBYDWU monitorach ? Ma być go w końcu widać, czy nie ?

0

Na drugim może go w ogóle nie być. Musi być na pierwszym.

0

No to ci pisałem przecież, że nie da się ukryć tylko części kursora. A jak to ma być jeden ciągły pulpit to trzeba by tak zrobić, ale się nie da. Ukrywanie kursora nie wystarczy.

Hmm, a da się rozciągnąć pulpit na 3 monitory ? Jeśli tak to możesz zrobić wirtualny monitor na wirtualnej karcie graficznej i użyć go jako środkowy. Wtedy kursor przy prawej krawędzi pierwszego monitora wyjeżdżałby ogonkiem na ten wirtualny. Ale to już więcej zachodu niż to jest warte.

Szczerze radzę olej sprawę.

Zresztą w ogóle coś nie tak kombinujesz. Chcesz pokazać coś na drugim monitorze, zapewne przykrywając go na całej powierzchni jakimś oknem, i nie chcesz aby na tym oknie latał żaden kursor i ma to być wszystko jeden ciągły pulpit. Przecież jak user sobie zmaksymalizuje okno to rozszerzy się ono na obydwa monitory.

0

Nie, nie wyskakuje okno na drugi monitor po maksymalizacji :)

I według rady, olewam sprawę ;)

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