AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läuft

kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läuft

Ein Thema von himitsu · begonnen am 29. Mär 2007 · letzter Beitrag vom 3. Apr 2007
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#1

kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läuft

  Alt 29. Mär 2007, 16:54
Tachchen ^^


So, wärend meine ButtonClickProzedur arbeitet und obwohl mehrmals die Sekunde Application.ProcessMessages aufgerufen wird,
werden dennoch keine OnMouseEnter-/OnMouseLeave-Ereignisprozeduren ausgeführt.

Alles Andere, wie z.B. OnMouseMove funktioniert aber.


Is jetzt zwar nichts Weltbewegendes, da ich dort nichts wirklich wichtiges drin mache, aber dennoch störts mich halt etwas.


Falls da wer 'ne nicht all zu aufwändige Lösung kennt ... wäre echt nett.


In SearchSameFiles werden die Links unter [?] > Contact ja unterstrichen, wärend die Maus drüber ist.
Tja, aber halt nicht, wärend z.B. grad die Dateisuche läuft.


> http://www.delphipraxis.net/internal...=701631#701631

In der Titelleiste des Programms tauchen beim Aufrufen der Ereignisprozeduren Buchstaben auf:
L = OnMouseLeave wurde aufgerufen
E = OnMouseEnter wurde aufgerufen
Was bei mir halt nicht passiert, wärend die Suche läuft.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 29. Mär 2007, 19:21
Dumme Frage zwar aber naja, ist das ein Label oder was ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#3

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 30. Mär 2007, 11:36
Jupp, ein ganz normales TLabel aus Delphis VCL.

Delphi-Quellcode:
  Type TForm1 = Class(TForm)
      Label12: TLabel;
      Procedure Label12MouseEnter(Sender: TObject);
      Procedure Label12MouseLeave(Sender: TObject);
    End;

Implementation
  Procedure TForm1.Label12MouseEnter(Sender: TObject);
    Begin
      TLabel(Sender).Font.Style := TLabel(Sender).Font.Style + [fsUnderline];
      Caption := 'E' + Caption;
     End;

  Procedure TForm1.Label12MouseLeave(Sender: TObject);
    Begin
      TLabel(Sender).Font.Style := TLabel(Sender).Font.Style - [fsUnderline];
      Caption := 'L' + Caption;
    End;
Und wärend ich im Grunde ja nur soeine Schleife laufen hab, werden die beiden Ereignisse nicht mehr ausgeführt.
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Begin
    ...
    Repeat
      ...
      Application.ProcessMessages;
    Until ...;
    ...
  End;
[edit]
dieses Caption := '*' + Caption; is nur drin, damit ich leicht erkenne, ob die Ereignisprozeduren aufgerufen wurden.
(hätt ja sein können, dat nur der StyleChange ignoriert wird)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#4

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 31. Mär 2007, 15:14
So, hier mal in 'nem einzelnem Programm.

@turboPASCAL: du wirst sehn, mit der Zeit hat es nichts zu tun.


Wärend eine der beiden OnClick(Button)-Prozeduren läuft, wird da nichts mehr unterstrichen.

Beim Timer geht es jedoch, auch wenn dort das OnMouseMove etwas langsamer reagiert (dort kommt immer nur die letzte Nachricht an).
Angehängte Dateien
Dateityp: zip project1_639.zip (2,3 KB, 3x aufgerufen)
Dateityp: exe project1_582.exe (156,0 KB, 3x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 31. Mär 2007, 17:48
Also, Windows-Messages (WM_MOUSEMOVE) werden verarbeitet, CM_MOUSEENTER ist keine Windows-Message
sondern ein Delphieigenes Ding. Müsste man mal in die Controls.pas gucken.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#6

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 2. Apr 2007, 11:19
CM_MOUSEENTER wird doch aber auch als Message an das Label geschickt.

OK, kann ja mal versuchen rauszufinden wo dieses verschickt wird ... vielleich läuft der Teil einfach nur nicht, wärend eine Ereignisprozedur der VCL ausgeführt wird
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 2. Apr 2007, 19:27
Tja, die Unit Controls und die entstrechenden Units als Source hab ich leider nicht,
kann also nicht reinschauen.

Aus den Kopf weis ich nur das zB. CM_MOUSEENTER irgendwas mit CM_BASE + 19 ( ) ist.

Warum machst du denn das Suchen nicht in einen Thread, Repeat-Until würde ich eh nicht für
so "lange" Suchfunktionen nutztn....
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#8

Re: kein OnMouseEnter/-Leave wärend VCL-Ereignisprozedur läu

  Alt 3. Apr 2007, 01:04
Das Suchen läuft ja in 'nem Thread ab ... in der Schleife wird ja "nur" auf das Ende des Suchthreads gewartet.


So, hab nun mal tief gesucht und so... *schweißabwisch*


CM_MOUSEENTER (CM_BASE + 19) und CM_MOUSELEAVE (CM_BASE + 20) wird in TApplication.DoMouseIdle ausgelöst, welches über TApplication.Idle aufgerufen wird.

TApplication.Idle wird aber leider nur in TApplication.HandleMessage aufgerufen, wenn sonst keine Messages vorhanden waren.

Da ich nur Application.ProcessMessages regelmäßig aufrufe und wärend die Buttonprozedur abgearbeitet wird von der VCL kein TApplication.HandleMessage ausgeführt wird, kann es leider nicht funktionieren.

Delphi-Quellcode:
procedure TApplication.ProcessMessages;
var
  Msg: TMsg;
begin
  while ProcessMessage(Msg) do {loop};
end;

procedure TApplication.HandleMessage;
var
  Msg: TMsg;
begin
  if not ProcessMessage(Msg) then Idle(Msg);
end;
TApplication.HandleMessage kann ich nicht selber aufrufen, da sonst der Hauptthread Aufgrund mangelnder Messages einfrieren kann.

Im Anhang mal eine Datei mit Application.ProcessMessages und Application.HandleMessage in der Schleife ... leider bleibt da Anzeige stehen, wenn keine Messages (z.B. durch das Bewegen der Maus über die Form) mehr empfangen werden.

> der Zähler unterm Stopp-Button steht, wenn z.B. keine Maus über der Form bewegt wird.


Da Idle den Haupthtread schlafen legt, ich DoMouseIdle nicht direkt aufrufen kann
und es unschön wäre, wenn ich z.B. vom Thread aus ständig den Hauptthread mit (Blind)Nachrichten bombadiere, nur damit der nicht einschlaft,
werd' ich wohl damit Leben müssen. (z.B. auf 'nen Timer umzustellen wollt' ich halt nich)
Angehängte Dateien
Dateityp: zip project1_874.zip (2,3 KB, 3x aufgerufen)
Dateityp: exe project1_685.exe (155,0 KB, 3x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:36 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