Poło?żenie myszki

0

Jak myszka jest nad jakimś komponentem to wystarcza <font color="red">OnMouseMove </span> .

A jak wykryć gdy jest poza tym komponentem ?????? [???]

0

GetCursorPos + F1

0

Przejrzałem tą funkcje i dalej mam problemy.
posłuże sie przykladem.
Mam form1 na nim button1.
Gdy schodze mychą z butona to chce zeby było:
button1.caption:='zeszlem z buttona';

No i wymyslilem taką procedurę :

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Pozycja:TPoint;
begin
if GetCursorPos(Pozycja) <font color="red">//co tu wpisać?????</span>
then button1.caption:='zeszlem z buttona';
end;

0

[code]procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
pozycja: TPoint;

begin
GetCursorPos(pozycja);
x:=pozycja.X;
y:=pozycja.Y;
if ((x 319)) or ((y 125)) then Button1.Caption:='Jestem na buttonie';

end;[/code]

Spróbuj z tym powyżej, nie działa to do końca, ale już bliżej, lepsi ode mnie to poprawią ;). Te liczby to położenie mojego buttona, ja ustawiłem dla badań :) "na sztywno".

0

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Pozycja:TPoint;
begin
if GetCursorPos(Pozycja) //co tu wpisać?????
then button1.caption:='zeszlem z buttona';
end;

To raczej nie bedzie dzialac...
Gdy myszka znajdzie sie nad Buttonem to zdarzenie FormMouseMove nie zadziala poniewaz ono dziala tylko jesli myszka jest nad forma (a nie nad buttonem). Mozna to zrobic tak (tak mi sie wydaje):

Zadeklarowac zmienna globalna:
Na_buttonie: boolean;

w MouseMove buttona:
begin
if not Na_buttonie then
begin
Button.Caption := 'wjechales na button';
Na_buttonie := True;
end;
end;

w MouseMove formy:
begin
if Na_buttonie then
begin
Button.caption := 'zjechales z buttona';
Na_buttonie := False;
end;
end;

U mnie dziala i to calkiem niezle... gorzej jak bedziesz chcial zrobic tak samo z wieloma buttonami. Jesli wszystkie komponenty beda tego samego typu to nie bedzie jeszcze tak trudno... nawet juz mam szczatki pomyslu... no ale na razie tyle. Mam nadzieje, ze pomoglem :)

0

Wydaje mi sie ze najlepszym wyjsciem było by zrobienie sobie nowego komponenciku :-) pochodnego z klasy TButton
A zrobisz to tak:
W delphi w menu kliknij na "component"
w polu Ancestor Type Wpisz "TButton [StdCtrls]"
w polu Class name wpisz "TPrzycisk"
w polu "Palette Page" wybierz np "Standard"
następnie kliknij OK

otworzy sie okienko i...
w sekcji private wpisz:
mOn : TNotifyEvent;
mOut : TNotifyEvent;

w sekcji protected wpisz:
procedure CMMouseEnter(var Msg : TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg : TMessage); message CM_MOUSELEAVE;

w sekcji published wpisz
property OnMouseEnter: TNotifyEvent read mOn write mOn;
property OnMouseLeave: TNotifyEvent read mOut write mOut;

procedury z sekcji protected uzupełnij następijąco:

procedure TPrzycisk.CMMouseEnter(var Msg: TMessage);
begin
if Assigned(mOn) then OnMouseEnter(Self);
Msg.Result:=1;
end;

procedure TLata.CMMouseLeave(var Msg: TMessage);
begin
if Assigned(mOut) then OnMouseLeave(Self);
Msg.Result:=1;
end;

zapisz i
w menu "component" wybierz "Install Component..." kliknij ok
jak wszystko dobrze zrobiłeś to powinno wyświetlić się takie okienko potwierdzające :d
i na palecie komponentów na końcu powinien pojawić sie nowy Komponent;

to co chcesz aby program zrobił po wyjściu kursora za przycisk wstaw do onMouseLave w zakładce ewents
troche sie napisałem nara [cya]

0

Jaco wyskoczyła lista błędów , w tym jako pierwszy (chyba najważniejszy):

<font color="red"> [Error] Przycisk.pas(18): Undeclared identifier: 'TMessage' </span>

Może należy dodać coś do uses , u mnie jest:
uses
SysUtils, Classes, Controls, StdCtrls;

Pozosatałe błędy pochodzą chyba od tego pierwszego jak np :
<font color="green">
[Error] Przycisk.pas(33): ';' expected but '.' found
[Error] Przycisk.pas(33): ';' expected but ')' found
</span>

Ma ktoś pomysł w czym tkwi feler [???]

Wielkie dzieki (jaco,MatroX,Kshysheek,Szymek) za powyższe wskazówki !! !!

0

spróbuj dodać do uses: Messages [hurra]

0

Instalacja poszła troche dalej i staneła na ostatniej procedurze:
<font color="green"> procedure TLata.CMMouseLeave(var Msg: TMessage);
begin
if Assigned(mOut) then OnMouseLeave(Self);
Msg.Result:=1;
end; </span>

Wg mnie nie jest w ogóle rozpoznawalny TLata. Jak to rozwiązać ???
[???]
<font color="red"> Co to za klasa??? </span>

0

Wg mnie nie jest w ogóle rozpoznawalny TLata. Jak to rozwiązać ???

Załamałeś mnie...
Zmień TLata na TPrzycisk i będzie ok.

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