AGB  ·  Datenschutz  ·  Impressum  







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

OnMouseLeave wird von OnMouseEnter aufgerufen

Ein Thema von Nico93 · begonnen am 23. Dez 2012 · letzter Beitrag vom 23. Dez 2012
Antwort Antwort
Benutzerbild von Nico93
Nico93

Registriert seit: 6. Sep 2011
Ort: Grafschaft
48 Beiträge
 
Delphi 2007 Architect
 
#1

OnMouseLeave wird von OnMouseEnter aufgerufen

  Alt 23. Dez 2012, 12:00
Hallo zusammen,

ich habe mal wieder ein kleines Problem.
Ich wollte eine eigene Komponente entwerfen, die von einem TEdit erbt.
In diesem TEdit soll rechts am Rand eine kleine Lupe erscheinen, die wie ein Button benutzt werden kann.

Da man die Eigenschaft "Glyph" eines Buttons jedoch nich skalieren kann, habe ich einfach ein TImage benutzt, welches ein onclick event bekommt.
Zusätzlich wollte ich diesem TImage einen MouseOver Effekt beifügen, wie ihn die TButtons auch besitzen.

Damit man dem Image einen Border verpassen kann, habe ich dieses einfach auf einem Panel plaziert.
FSearchIcon = TImage mit der Lupe
FIconPanel = das Panel auf dem das Image sitzt

Die Methoden für den MouseOver Effekt sehen wie folgt aus:
Delphi-Quellcode:
procedure TSearchEdit.OnSearchButtonMouseEnter(Sender: TObject);
begin
  FSearchIcon.OnMouseLeave := nil;
  try
    FIconPanel.BorderStyle := bsSingle;
  finally
    FSearchIcon.OnMouseLeave := OnSearchButtonMouseLeave;
  end;
end;

procedure TSearchEdit.OnSearchButtonMouseLeave(Sender: TObject);
begin
  FIconPanel.BorderStyle := bsNone;
end;
Mein Problem ist nur, dass die Methode "OnSearchButtonMouseLeave" von der Methode "OnSearchButtonMouseEnter" direkt aufgerufen wird, sodass der Effekt eigentlich nichts bringt.
Dieses Verhalten habe ich auch schon festgestellt, wenn ich ein TImage auf ein normales Form setze und dann zwei Haltepunkte bei den beiden Methoden mache.

Hat hierzu jemand eine Idee?

Danke für die Hilfe
Nico
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: OnMouseLeave wird von OnMouseEnter aufgerufen

  Alt 23. Dez 2012, 13:34
Liegt eventuell daran, dass du die Events jedes Mal neu zuweist. Mach dir stattdessen besser eine boolsche Variable, die sich merkt, ob sich die Maus grade innerhalb der Komponente befindet. Dann kannst du anhand dieses Wertes entsprechend im OnMouseLeave Event reagieren.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#3

AW: OnMouseLeave wird von OnMouseEnter aufgerufen

  Alt 23. Dez 2012, 13:40
Zitat:
Mein Problem ist nur, dass die Methode "OnSearchButtonMouseLeave" von der Methode "OnSearchButtonMouseEnter" direkt aufgerufen wird
Ich denke Du hast das Problem doch eigenlich schon erkannt. Lass jeden Event-Handler sein Ding tun.
Delphi-Quellcode:
procedure TSearchEdit.OnSearchButtonMouseEnter(Sender: TObject);
begin
  FIconPanel.BorderStyle := bsSingle
end;

procedure TSearchEdit.OnSearchButtonMouseLeave(Sender: TObject);
begin
  FIconPanel.BorderStyle := bsNone
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Nico93
Nico93

Registriert seit: 6. Sep 2011
Ort: Grafschaft
48 Beiträge
 
Delphi 2007 Architect
 
#4

AW: OnMouseLeave wird von OnMouseEnter aufgerufen

  Alt 23. Dez 2012, 14:21
ok hat sich irgendwie erledgt.
Anscheinend funktioniert der MouseOver Effekt nur wenn das Bild auf dem Panel Align=alClient ist.

Trotzdem vielen Dank für die Hilfe
Nico
  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 15:46 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