AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nochmal onMouseMove ???

Ein Thema von schniede · begonnen am 21. Okt 2003 · letzter Beitrag vom 23. Okt 2003
Antwort Antwort
schniede

Registriert seit: 20. Sep 2003
Ort: Woltersdorf
104 Beiträge
 
Delphi 7 Professional
 
#1

Nochmal onMouseMove ???

  Alt 21. Okt 2003, 21:57
Hab jetzt ein anderes problem wenn ich die Maus zu schnell
bewege ändert sich die farbe garnicht .
mit (aRect.Left -1) kann ich die empfindlichkeit steuern nur um so größer -1,-2,-3 u.s.w
umso wahrscheinlicher das mehr buttons gleichzeitig leuchten

(habe 5 Kleine Buttons mit high :=20 u. width:=130 dicht zusammen)


Code:
procedure TForm1.GroupBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
VAR
   aRect ,brect ,crect,drect,erect   : TRect;
BEGIN
   aRect :=bestell_btn.BoundsRect;                

   IF (x >= (aRect.Left -1)) AND
      (x <= (aRect.Right +1)) AND
      (y >= (aRect.Top -1)) AND
      (y <= (aRect.Bottom +1)) THEN

      bestell_btn.Font.color := clnavy
      ELSE
   bestell_btn.Font.color :=clblack ;

       bRect :=verkaufen_btn.BoundsRect;              
   IF (x >= (bRect.Left -1)) AND
      (x <= (bRect.Right +1)) AND
      (y >= (bRect.Top -1)) AND
      (y <= (bRect.Bottom +1)) THEN

     verkaufen_btn.Font.color := clnavy
      ELSE
   verkaufen_btn.Font.color :=clblack ;

       cRect :=termin_btn.BoundsRect;            
   IF (x >= (cRect.Left -1)) AND
      (x <= (cRect.Right +1)) AND
      (y >= (cRect.Top -1)) AND
      (y <= (cRect.Bottom +1)) THEN

     termin_btn.Font.color := clnavy
      ELSE
    termin_btn.Font.color :=clblack ;

       dRect :=notizbtn.BoundsRect;                
   IF (x >= (dRect.Left -1)) AND
      (x <= (dRect.Right +1)) AND
      (y >= (dRect.Top -1)) AND
      (y <= (dRect.Bottom +1)) THEN

     notizbtn.Font.color := clnavy
      ELSE
     notizbtn.Font.color :=clblack ;

       eRect :=bitbtn7.BoundsRect;                
   IF (x >= (eRect.Left -1)) AND
      (x <= (eRect.Right +1)) AND
      (y >= (eRect.Top -1)) AND
      (y <= (eRect.Bottom +1)) THEN

    bitbtn7.Font.color := clnavy
      ELSE
     bitbtn7.Font.color :=clblack ;

end;

vieleicht hat ja jemand ne bessere bzw. taugliche Idee.

mfg schniede
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Nochmal onMouseMove ???

  Alt 22. Okt 2003, 07:26
Hai schniede,

hab das jetzt zum test mal so gelösste:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
  private
    { Private-Deklarationen }
  procedure CMMouseEnter(Var Message : TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(Var Message : TMessage); message CM_MOUSELEAVE;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if (WindowFromPoint(ptWork) = BitBtn1.Handle) then BitBtn1.Font.Color := clred;
  if (WindowFromPoint(ptWork) = BitBtn2.Handle) then BitBtn2.Font.Color := clred;
  if (WindowFromPoint(ptWork) = BitBtn3.Handle) then BitBtn3.Font.Color := clred;
  Application.ProcessMessages;
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if (WindowFromPoint(ptWork) <> BitBtn1.Handle) then BitBtn1.Font.Color := clblack;
  if (WindowFromPoint(ptWork) <> BitBtn2.Handle) then BitBtn2.Font.Color := clblack;
  if (WindowFromPoint(ptWork) <> BitBtn3.Handle) then BitBtn3.Font.Color := clblack;
  Application.ProcessMessages;
end;
Wenn Du das ganze öfters brauchst wäre es sicher am besten sich eine eigene Classe von TBitBtn abzuleiten, die Eigenschaften dort reinpacken und das ganze in eine Komponente zu packen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
schniede

Registriert seit: 20. Sep 2003
Ort: Woltersdorf
104 Beiträge
 
Delphi 7 Professional
 
#3

Re: Nochmal onMouseMove ???

  Alt 22. Okt 2003, 16:18
Danke sharky !

Werde das ganze mal testen und gebe bescheid.

Das dumme ist nur den code von mir (zum Teil) versteh ich ja, nur deinen ,na da hapert es doch ganz schön.

Bin halt ´n laie der versucht alles allein zu lernen ,aber hier wird einen immer super geholfen
und mann kann ne Menge lernen.

bis später tschau
  Mit Zitat antworten Zitat
schniede

Registriert seit: 20. Sep 2003
Ort: Woltersdorf
104 Beiträge
 
Delphi 7 Professional
 
#4

Re: Nochmal onMouseMove ???

  Alt 22. Okt 2003, 16:30
Hai Sharky !

Muß sagen das klappt hervorragend.

Nun muste mir nur noch verraten ob du das aus dem Ärmel geschüttelt hast oder ob das nicht alles auf dein mist gewachsen ist.

Wie gesagt hast mir ja schon öfter geholfen, find ich echt Klasse HUT AB.

Was meinst du den eigentlich was man so an Lektüre verzehren sollte? Aus der Hilfe werd ich immer nicht ganz so schlau wenn ich ein fertigen code seh, dann versteh ich das schon besser.

Gruß schniede!!!!!!!!!


P:S: Hatte ganz vergessen ,weißt du warum das andere nicht so gut läuft,ist die Rechenzeit zu hoch,
die maus zu schnell, oder OnMouseMove eh ungeeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Nochmal onMouseMove ???

  Alt 23. Okt 2003, 08:58
Zitat von schniede:
....Nun muste mir nur noch verraten ob du das aus dem Ärmel geschüttelt hast oder ob das nicht alles auf dein mist gewachsen ist.
Ehre wem Ehre gebürt! Ich habe das auf Grundlage von Christans Code aus diesem Thread gemacht.

Zitat:
Wie gesagt hast mir ja schon öfter geholfen, find ich echt Klasse HUT AB.
Dafür ist das Forum doch da. Damit jeder jedem hilft.

Zitat:
Was meinst du den eigentlich was man so an Lektüre verzehren sollte? Aus der Hilfe werd ich immer nicht ganz so schlau wenn ich ein fertigen code seh, dann versteh ich das schon besser.
Ich muss gestehen ich habe noch kein eiziges Buch über Delphi gelesen. Alles was ich weiss habe ich:

a) Aus der OnlineHilfe
b) Aus diesem Forum
c) Durch ausprobieren

Zitat:
P:S: Hatte ganz vergessen ,weißt du warum das andere nicht so gut läuft,ist die Rechenzeit zu hoch,
die maus zu schnell, oder OnMouseMove eh ungeeignet.
Naja, das OnMouseMove wird halt immer aufgerufen sobald Du die Maus bewegst.

Der Code ist eigentlich ganz einfach zu verstehen.

Delphi-Quellcode:
procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if (WindowFromPoint(ptWork) = BitBtn1.Handle) then BitBtn1.Font.Color := clred;
end;
Sobald der Cursor über einem Objekt ist wird diese Procedure aufgerufen.
Mit GetCursorPos wird die Position des Cursors ermittelt. Mit WindowFromPoint wir der Handel des Objektes unter dem Curser ermittelt und dann wird einfach geprüft ob dies der Handel eines der Buttons ist.

Bei OnMouseLeav wird einfach geprüft ob es nicht der Handel eines Buttons ist.

Ich hoffe die Erklärung ist halbwegs richtig und verständlich. Ansonsten kann Christian Seehase das sicher genaueres zu sagen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Nochmal onMouseMove ???

  Alt 23. Okt 2003, 11:57
Moin Sharky,

ich würd' nur noch an der Begrifflichkeit etwas ändern

Zitat von Sharky:
Mit WindowFromPoint wir der Handel des Objektes unter dem Curser
Das könnte missverständlich sein.
Es wird das Handle des Fensters unter dem Cursor zurückgegeben (in diesem Zusammenhang sind auch Button, Editfelder usw. als Fenster zu begreifen).

Es gibt übrigens einen Ersatz für GetCursorPos, den uns Borland spendiert hat:
Mouse.Cursorpos.x/Mouse.CursorPos.y, so dass man sich die Deklaration der Variablen sparen und direkt diese Werte verwenden kann.

Die Verwendung der API GetCursorPos dürfte allerdings ein klitzekleines Bisschen schneller sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Nochmal onMouseMove ???

  Alt 23. Okt 2003, 15:25
Hai Christian,

Zitat von Sharky:
Mit WindowFromPoint wir der Handel des Objektes unter dem Curser
Zitat:
Das könnte missverständlich sein.
Es wird das Handle des Fensters unter dem Cursor zurückgegeben (in diesem Zusammenhang sind auch Button, Editfelder usw. als Fenster zu begreifen).
Genau das meinte ich mit "Objekt". Dank euch habe ich "gelernt" das auch ein Button, Edit, usw., ein Fenster ist!.

Für genaue Informationen habe ich schniede eh an dich verwiesen!.
Frage: Habe ich es einigermassen richtig erklärt? (dann habe ich es nämlich auch verstanden).
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Nochmal onMouseMove ???

  Alt 23. Okt 2003, 15:48
Moin Sharky,

Zitat von Sharky:
Für genaue Informationen habe ich schniede eh an dich verwiesen!.
ist mir nicht entgangen

Zitat von Sharky:
Frage: Habe ich es einigermassen richtig erklärt? (dann habe ich es nämlich auch verstanden).
also mir, ausser dem schon beschriebenen, nichts aufgefallen.
Ich hätt' sonst schon was gesagt
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz