![]() |
Nochmal onMouseMove ???
Hab jetzt ein anderes problem wenn ich die Maus zu schnell
bewege ändert sich die farbe garnicht . mit
Delphi-Quellcode:
kann ich die empfindlichkeit steuern nur um so größer -1,-2,-3 u.s.w
(aRect.Left -1)
umso wahrscheinlicher das mehr buttons gleichzeitig leuchten :roll: (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 |
Re: Nochmal onMouseMove ???
Hai schniede,
hab das jetzt zum test mal so gelösste:
Delphi-Quellcode:
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.
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; |
Re: Nochmal onMouseMove ???
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 |
Re: Nochmal onMouseMove ???
Hai Sharky !
Muß sagen das klappt hervorragend. :dancer: 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. :thuimb: 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. |
Re: Nochmal onMouseMove ???
Zitat:
![]() Zitat:
Zitat:
a) Aus der OnlineHilfe b) Aus diesem Forum c) Durch ausprobieren Zitat:
Der Code ist eigentlich ganz einfach zu verstehen.
Delphi-Quellcode:
Sobald der Cursor über einem Objekt ist wird diese Procedure aufgerufen.
procedure TForm1.CMMouseEnter(var Message: TMessage);
var ptWork : TPoint; begin GetCursorPos(ptWork); if (WindowFromPoint(ptWork) = BitBtn1.Handle) then BitBtn1.Font.Color := clred; end; 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. |
Re: Nochmal onMouseMove ???
Moin Sharky,
ich würd' nur noch an der Begrifflichkeit etwas ändern ;-) Zitat:
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. |
Re: Nochmal onMouseMove ???
Hai Christian,
Zitat:
Zitat:
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). |
Re: Nochmal onMouseMove ???
Moin Sharky,
Zitat:
Zitat:
Ich hätt' sonst schon was gesagt ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz