![]() |
Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Hallo
by speedbuttons und Bitbtn Buttons leuchten alle Buttons zusamen, wenn ich den Mousezeiger auf ein Button oder auf ein Control in Form bewege Onmouse Enter bekommt das Button ein neues Icon und auch beim OnMouseleave :
Delphi-Quellcode:
gibt es eine Lösung für das Problem
procedure TForm1.ButtonsCMMouseEnter(var Message: TMessage);
begin if WindowFromPoint(ptWork) = BitBtn2.Handle then ImageList1.GetBitmap(2, BitBtn2.Glyph); //... procedure TForm1.ButtonsCMMouseleave(var Message: TMessage); begin if WindowFromPoint(ptWork) <> BitBtn2.Handle then ImageList1.GetBitmap(3, BitBtn2.Glyph); Ich weiß nicht, warum alle Buttons glitzern, wenn der Mausezeiger auf ein Control in Form bewegt :( |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Ich versteh nicht ganz, möchtest du bei allen BitButtons diesen Effekt haben, oder nur bei einem?
Bei letzterem würde ich folgene Anweisung nicht verstehen
Delphi-Quellcode:
Und bei Ersterem nicht, warum du nicht ganz normal über die OnEnter Prozedur des Bitbtn zugreifst!?
if WindowFromPoint(ptWork) = BitBtn2.Handle then
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
>> warum du nicht ganz normal über die OnEnter Prozedur des Bitbtn zugreifst!? weil D7 den Event OnMouseLeave nicht hat sondern nur OnMouseMouve Das Problem kommt von dem Event OnMouseEnter, was ich programmiert habe, und möchte ich ändern >> Bei letzterem würde ich folgene Anweisung nicht verstehen
Delphi-Quellcode:
procedure TForm1.ButtonsCMMouseEnter(var Message: TMessage);
var ptWork : TPoint; begin GetCursorPos(ptWork); if WindowFromPoint(ptWork) = BitBtn2.Handle then // wenn der cursor drauf kommt |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Zitat:
geht das bei MouseEnter vllt. auch so:
Delphi-Quellcode:
procedure TForm1.BitBtn1MouseEnter(Sender: TObject);
begin TBitbtn(sender).Glyph:= {irgendwas} ; end; |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
OnMouseEnter und OnMouseNove beide funktionieren
Das Problem was macht man OnMouseLeave ? Das BitButton soll ein anderes Bild bekommen wenn der Cursor das Button verlässt |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Oder du lädst dir einfach die LMD Tools herunter:
![]() Da ist der TLMDButton unter der Rubrik LMDStd dabei, der besitzt OnMouseEnter + OnMouseExit, da umgehst du die ganze Sache Edit: Außerdem kann man in diesen Button natürlich auch ein Glyph laden ;-) |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
BitButton hat auch besitzt OnMouseEnter + OnMouseExit
Das geht um OnMouseLeave |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Unter Delphi 7 hat ein BitBtn kein Ereignis OnMouseEnter oder OnMouseExit.
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Versehen, das war OnEnte und OnExit aber kein OnMouseEnter
Kann man sie nicht programmieren ? |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Kann man. Kleines Beispiel (komplette Unit):
Delphi-Quellcode:
unit bla;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TBitBtn = class(Buttons.TBitBtn) private procedure CMMOUSEENTER(var Msg: TMessage); message CM_MOUSEENTER; procedure CMMOUSELEAVE(var Msg: TMessage); message CM_MOUSELEAVE; end; TForm1 = class(TForm) btn1: TBitBtn; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TBitBtn } procedure TBitBtn.CMMOUSEENTER(var Msg: TMessage); begin inherited; Font.Style := Font.Style + [fsBold]; end; procedure TBitBtn.CMMOUSELEAVE(var Msg: TMessage); begin inherited; Font.Style := Font.Style - [fsBold]; end; end. |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Es geht mit dem Vorschlag. Sollen aber alle BitBtns den selben Effekt haben ?
Wenn ich den Effekt für ein bestimtes Button zuweise, bekomme ich Fehler: Undeclared BitBtn1 !
Delphi-Quellcode:
Bitbtn1.Font.Style := Bitbtn1.Font.Style + [fsBold];
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Da muss man etwas weiter ausholen:
Delphi-Quellcode:
Hier werden die beiden definierten Events nur für btn2 zugewiesen.
unit bla;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TBitBtn = class(Buttons.TBitBtn) private FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; procedure CMMOUSEENTER(var Msg: TMessage); message CM_MOUSEENTER; procedure CMMOUSELEAVE(var Msg: TMessage); message CM_MOUSELEAVE; public constructor Create(aOwner: TComponent); override; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end; TForm1 = class(TForm) btn1: TBitBtn; btn2: TBitBtn; btn3: TBitBtn; procedure FormCreate(Sender: TObject); procedure DoOnEnter(Sender: TObject); procedure DoOnLeave(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TBitBtn } procedure TBitBtn.CMMOUSEENTER(var Msg: TMessage); begin inherited; if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure TBitBtn.CMMOUSELEAVE(var Msg: TMessage); begin inherited; if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; constructor TBitBtn.Create(aOwner: TComponent); begin inherited; FOnMouseEnter := nil; FOnMouseLeave := nil; end; procedure TForm1.DoOnEnter(Sender: TObject); begin (Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style + [fsBold]; end; procedure TForm1.DoOnLeave(Sender: TObject); begin (Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style - [fsBold]; end; procedure TForm1.FormCreate(Sender: TObject); begin btn2.OnMouseEnter := DoOnEnter; btn2.OnMouseLeave := DoOnLeave; end; end. |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Wie konnte ich für ein bestimmtes Btn ein bestimmtes Bild zuweisen ?
Delphi-Quellcode:
ImageList1.GetBitmap(2, Btn2.Glyph);
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Schau Dir in meinem Beispiel mal DoOnEnter und DoOnLeave an. Statt die Schriftart zu ändern, kannst Du dort auch andere Bilder zuweisen.
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
dort habe folgendes eingegeben
Delphi-Quellcode:
Aber die Bilder werden in alle Buttons angezeigt, wenn der Cursor auf ein Button kommt
procedure TForm1.DoOnEnter(Sender: TObject);
begin //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style + [fsBold]; ImageList1.GetBitmap(1, Btn1.Glyph); ImageList1.GetBitmap(2, Btn2.Glyph); end; Das Bild soll aber nur angezeigt, wenn der der Cursor auf sein Button kommt Wie kann ich das machen ? Vorteil mit diesem Code die Buttons glitzern nicht : ) |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Es kommt mir ein wenig so vor, als hättest Du das Prinzip nicht verstanden :gruebel:, oder wieso stehen da benannte Instanzen (Btn2 und Btn2)?
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Nicht ganz
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Also Praxist,
schau noch einmal in Beitrag #12 (hier nur ein Auszug mit Erläuterungen):
Delphi-Quellcode:
Ich hoffe das hilft, sieh es dir genau an.
...
procedure TForm1.DoOnEnter(Sender: TObject); begin //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style + [fsBold]; //das brauchst du nicht, vielmehr folgendes: ImageList1.GetBitmap(1, (Sender as TBitBtn).Glyph); end; procedure TForm1.DoOnLeave(Sender: TObject); begin //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style - [fsBold]; //hier genau dasselbe nur eben das andere Bildchen //ich weiß ja jetzt nicht welches, aber ungefähr so eben: ImageList1.GetBitmap(2, (Sender as TBitBtn).Glyph); end; procedure TForm1.FormCreate(Sender: TObject); begin //und hier ist es ganz wichtig, dass du für alle //Bitbtns Enter und Leave zuweist! //also nicht nur btn2.OnMouseEnter := DoOnEnter; btn2.OnMouseLeave := DoOnLeave; //sondern auch: btn1.OnMouseEnter := DoOnEnter; btn1.OnMouseLeave := DoOnLeave; //wenn das zu viele Komponenten sind dann //verwende eine Schleife die alle Komponenten durchläuft //und es den Bitbtns zuweist, //das gehört dann aber nicht in diesen Thread end; end. |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Du hast auch das Button nicht hingeschrieben !
Delphi-Quellcode:
//das brauchst du nicht, vielmehr folgendes:
ImageList1.GetBitmap(1, (Sender as TBitBtn).Glyph); // für welches Button ? |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Zitat:
hast du den Code mal so probiert? Vielleicht funktioniert es!? |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
>> hast du den Code mal so probiert?
Alle BitButtons bekommen das selbe Bilder OnMouseEnter, logisch Aber jedes Bild soll ein bestimmtes Bild haben |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Wende den Code halt auf Sender an
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Zitat:
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Dann müsste man eine Abfrage auf den Sender einbauen.
Delphi-Quellcode:
Evtl. gibt es auch eine elegantere Methode, aber die fällt mir gerade nicht ein.
if (Sender = btn1) then
ImageList1.GetBitmap(1, btn1.Glyph) else if (Sender = btn2) then ImageList1.GetBitmap(2, btn2.Glyph) ... |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Man könnte den Index als Tag im Button hinterlegen
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Stimmt, die Tag-Property vergesse ich immer wieder, dabei kann sie so nützlich sein :lol:
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
So sieht es aus :
Delphi-Quellcode:
Es funktioniert nicht schnell und das Button bekommt nicht sofort ein neues Bild
procedure TForm1.DoOnEnter(Sender: TObject);
begin if (Sender = btn1) then begin Btn1.Glyph := nil; ImageList1.GetBitmap(1, btn1.Glyph); end else if (Sender = btn2) then begin Btn2.Glyph := nil; ImageList1.GetBitmap(3, btn2.Glyph);end else if (Sender = btn3) then begin Btn3.Glyph := nil; ImageList1.GetBitmap(5, btn3.Glyph);end; end; procedure TForm1.DoOnLeave(Sender: TObject); begin //(Sender as TBitBtn).Font.Style := (Sender as TBitBtn).Font.Style - [fsBold]; if (Sender <> btn1) then begin Btn1.Glyph := nil; ImageList1.GetBitmap(0, btn1.Glyph);end else if (Sender <> btn2) then begin Btn2.Glyph := nil; ImageList1.GetBitmap(2, btn2.Glyph); end else if (Sender <> btn3) then begin Btn3.Glyph := nil; ImageList1.GetBitmap(4, btn3.Glyph);end; end; OnMouseLeave sondern nur nach hin und her den Cursor auf andere BitButtons bewegen ! Das ganze funktioniert mit einer Verzögerung Btn3 wechselt sein Bild überhaupt nicht ! |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Liest Du eigentlich, was wir hier schreiben? Markus' Idee mit dem Tag ist doch super, die musst Du nur umsetzen. Also: btn1 bekommt Tag 1, btn2 Tag 3 und btn3 Tag5 (im OI). Und nun müsste das so doch gehen:
Delphi-Quellcode:
procedure TForm1.DoOnEnter(Sender: TObject);
begin ImageList1.GetBitmap((Sender as TBitBtn).Tag, (Sender as TBitBtn).Glyph); end; procedure TForm1.DoOnLeave(Sender: TObject); begin ImageList1.GetBitmap(Pred((Sender as TBitBtn).Tag), (Sender as TBitBtn).Glyph); end; |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Mit dem Tag funktioniert OnMouseEnter wunderbar :
Delphi-Quellcode:
Mit OnMouseLeave kapiere ich immer noch nicht
procedure TForm1.DoOnEnter(Sender: TObject);
begin If (sender AS TBitBtn).Tag = 1 then begin ImageList1.GetBitmap(1, btn1.Glyph); end; If (sender AS TBitBtn).Tag = 2 then begin ImageList1.GetBitmap(3, btn2.Glyph); end; If (sender AS TBitBtn).Tag = 3 then begin ImageList1.GetBitmap(5, btn3.Glyph); end end;
Delphi-Quellcode:
procedure TForm1.DoOnLeave(Sender: TObject);
begin ImageList1.GetBitmap(Pred((Sender as TBitBtn).Tag), (Sender as TBitBtn).Glyph); end; |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Ich würde keine feste Referenzen verwenden sonder den Sender auswerten
Delphi-Quellcode:
ImageList1.GetBitmap((Sender as TButton).Tag, (Sender as TButton).Glyph);
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Und ich verstehe nicht, dass Du unsere Posts ignorierst oder nur halb liest.
Zitat:
Zitat:
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Ich habe nicht gewusst, dass den tag automatisch ausgelesen wird
Wie gesagt OnMouseEnter geht super In MouseLeave habe ich den selben Prinzip, wie Du geschrieben hast aber passiert nicht
Delphi-Quellcode:
Oder vielleicht muss man das Bild vorher löschen
procedure TForm1.DoOnLeave(Sender: TObject);
begin // ImageList1.GetBitmap(Pred((Sender as TBitBtn).Tag-1), (Sender as TBitBtn).Glyph); ImageList1.GetBitmap((Sender as TBitBtn).Tag-1, (Sender as TBitBtn).Glyph); end; |
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Funktioniert es denn, wenn Du als Index fest die 0 reinschreibst? Wird die Methode überhaupt aufgerufen?
|
Re: Problem mit Buttons OnMouseEnter. Alle Buttons gläntzern
Wie ich gedacht habe, man mus sowohl OnMouseEnter als auch OnMouseLeave vorher das BitBtn Graphic löschen :
Delphi-Quellcode:
Danke für die Hilfe und für Deine Geduld : )
procedure TForm1.DoOnLeave(Sender: TObject);
begin (Sender as TBitBtn).Glyph := nil; // dann kommt der code |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 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