AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TrackMouseEvent's rectangle befindet sich wohl auf dem Mond?
Thema durchsuchen
Ansicht
Themen-Optionen

TrackMouseEvent's rectangle befindet sich wohl auf dem Mond?

Ein Thema von ArrayOf.. · begonnen am 30. Okt 2003 · letzter Beitrag vom 30. Okt 2003
Thema geschlossen
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#1

TrackMouseEvent's rectangle befindet sich wohl auf dem Mond?

  Alt 30. Okt 2003, 01:49
Kann das überhaupt sein? Da gibt es als zentralen Gegenstand für diese TrackMouseEvent-Funktion ein Rechteck über dem ich z.B. mit der Maus HOVERn (drüber schweben) bzw. das ich LEAVEn (verlassen) kann, ABER es gibt nirgendwo eine Möglichkeit dieses Rechteck auch an eine bestimmte Stelle zu platzieren. Stattdessen wird immer nur von der Size dieses Rectangles gesprochen, die man mittels SPI_GET/SETMOUSEHOVERWIDTH/HEIGHT und SYSTEMPARAMETERSINFO auslesen bzw. verändern kann. NIRGENDS aber ist eine Top oder Left-Koordinate auch nur erwähnt, mittels derer ich dieses Rectangle dann z.B. auch mal über einer Button positionieren könnte.

Egal mit was ich die Funktion aufrufe, mit TME_HOVER oder mit TME_LEAVE, sie reagiert immer wieder so als wäre das Rechteck nicht auf dem Screen (sondern irgendwo auf dem...). Das heißt also immer bei TME_HOVER: es gibt niemals eine wm_MouseHover-Message bzw. der Eventhandler wird nie angesprungen; und bei TME_LEAVE bedeutet das: es wird immer sofort eine wm_MouseLeave-Message abgeschickt bzw. der Eventhandler entsprechend sofort ausgeführt. Gleichzeitig tut TrackMouseEvent trotzdem aber immer so als sei alles okay und returniert jedesmal mit true bzw. mit >0.

Also wie gesagt, irgendwie glaubt die Funktion, mit der Maus immer jenseits dieses besagten Rechteckes zu sein. Wahrscheinlich ist letzteres positionsmäßig von irgendwelchen DWORDs abhängig, die selbst aber irgendwie ausgeschaltet mit 4,3Mrd in irgendeinem 'Kellerwinkel' herumliegen und das Rechteck somit irgendwohin ins All projizieren.

Und deswegen also auch nach langer Rede die kurze Frage ans Forum: Hat es hier vielleicht schon mal jemand geschafft, diese TrackMouseEvent-Funktion korrekt in Gang zu bringen, und wenn ja wie? Wie kann man dieses ominöse Rectangle dahinpositionieren wo man es auch haben will?

Danke für eure Hilfe, dieses damned Rechteck endlich auch mal irgendwie auffindbar zu machen!

(PS. Ich möchte nicht wissen, wie ich so ein TrackMouseEvent oder dessen Effekte vielleicht selbst irgendwie herstellen könnte, sondern nur, WIE ich jetzt endlich auch mal an dessen Rechtecksposition herankomme, thx)
MfG

 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M

  Alt 30. Okt 2003, 02:11
Irgendwie werde aus deinem Gestammel nicht so recht schlau. Alles was ich verstanden habe ist, dass du irgendwelche Probleme mit TrackMouseEvent hast. Aber so geht es bei mir:
Delphi-Quellcode:
function BtnWndProc(hBtn, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
var
  tme: TTRACKMOUSEEVENT;
  TrackMouseEvent_: function(var EventTrack: TTrackMouseEvent): BOOL; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_MOUSEHOVER:
    begin
      if bHover = TRUE then exit;
      SetWindowLong(hBtn, GWL_EXSTYLE, GetWindowLong(hBtn, GWL_EXSTYLE) and not WS_EX_CLIENTEDGE);
      SetWindowPos(hBtn, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_FRAMECHANGED);
      bHover := TRUE;
    end;
    WM_MOUSELEAVE:
    begin
      if bHover = FALSE then exit;
      SetWindowLong(hBtn, GWL_EXSTYLE, GetWindowLong(hBtn, GWL_EXSTYLE) or WS_EX_CLIENTEDGE);
      SetWindowPos(hBtn, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_FRAMECHANGED);
      bHover := FALSE;
    end;
    WM_MOUSEMOVE:
    begin
      tme.cbSize := sizeof(TTRACKMOUSEEVENT);
      tme.dwFlags := TME_HOVER or TME_LEAVE;
      tme.dwHoverTime := 10;
      tme.hwndTrack := hBtn;
      @TrackMouseEvent_:= @TrackMouseEvent; // nur eine Pointerzuweisung!!!
      TrackMouseEvent_(tme);
    end;
  else Result := CallWindowProc(OldWndProc, hBtn, uMsg, wParam, lParam);
  end;
end;
Das ist die überschriebene standard Prozedur eines Buttons, den ich mit einem Hover Effekt versehen habe.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#3

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M

  Alt 30. Okt 2003, 02:43
Gestammel ?

Also ich habe dich auch bei deinen sehr sehr sehr vielen Einträgen hier schon schon mit den aller aller lächerlichsten Anfängerfehlern und sooo dämlichen Antworten gesehen, da konnte man wirklich nur noch mehr denken: Mein Gott, wie wirklich extrem peinlich das für den Mann doch sein muss...... Und was überhaupt sollte man dir dann wohl selbst erst in solchen Situationen antworten?

Nichts für ungut...
MfG

 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M

  Alt 30. Okt 2003, 02:54
Zitat von ArrayOf..:
Also ich habe dich auch bei deinen sehr sehr sehr vielen Einträgen hier schon schon mit den aller aller lächerlichsten Anfängerfehlern
Ich habe auch nie behauptet, dass ich alles weiß und alles kann. Und auf dem Schlauch kann jeder mal stehen. Aber zeig mir doch mal ein paar Postings die deine Argumentation untermauern. Aber im Gegesatz zu deinen Fragen, stelle ich mien verständlich, so dass im folge Posting gleich eine Antwort auf meine Frage kommt und nicht erst tausend aaml nachgefragt werden muss, was eigentlich gemeint ist. Bei deiner obigen Frage lese ich nur etwas von Mond und DWORD im Keller und irgendwo dazwischen taucht was mit TRACKMOUSEEVENT auf.
Zitat:
und sooo dämlichen Antworten gesehen,
Auch da würde ich gerne ein paar Postings sehen. Wenn ich dämliche Antworten gebe, dann sollte sich der Fragesteller, auch du in diesem Fall, mal überlegen, ob er seine Frage verständlich gestellt hat.
Zitat:
da konnte man wirklich nur noch mehr denken: Mein Gott, wie wirklich extrem peinlich das für den Mann doch sein muss......
Mein Unwissenheit ist mir nicht peinlich, oder weißt du alles?
Zitat:
Und was überhaupt sollte man dir dann wohl selbst erst in solchen Situationen antworten?
Bitte was?
Zitat:
Nichts für ungut...
Dito.

PS: Soll ich meine Antowrt wieder löschen, da sie eventuell in die Kategorie "dämliche Antworten" fällt?

Um noch mal auf dein Problem zu kommen:
TrackMouseEvent ist immer mit einem Fenster verknüpft, wie man an der Struktur sehen kann -> Element hWnd. Mit GetWindowRect kommt man dann an das begrenzende Rechteck dran.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#5

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M

  Alt 30. Okt 2003, 08:37
..weil du ja Belege wolltest und ich sie dir nicht schuldig bleiben kann, da sonst ich der Täter wäre:

Z.B. dort, wo du 2 Buffer nicht als Array sondern sie nur als einfache Cardinal-Größen deklariert hast.

Oder

dies hier, vielleicht weil beim BlockRead & BlockWrite der untypisierten Dateien die Blocklänge 1 ja auch so besonders vorteilhaft u. sinnvoll erscheint, dass man es deswegen auch schon gleich mit einer typisierten Datei und viel weniger Aufwand hätte machen können. Aber eventuell irre ich ja auch hier, habe ja auch erst knapp 50 Einträge.

Übrigens, war das nicht etwas vorschnell, schon 2 Minuten nach Mystics Lösungsvorschlag mit 'Bingo' und 'Das war es.' zu antworten. Denn damit ging es ja auch noch nicht richtig, sondern es wurden nur einmal eine BlockSize geschrieben, aber nicht mehr (ich habe das mal kurz an einem 1.2 Megabyte großen File ausprobiert). Wahrscheinlich hast du dich von den da trotzdem nur übertragenen 64KB bloß kurz bluffen lassen. Nur wenn du es dann auch konsequent auf typisierte Datein vereinfacht hattest, funzte es korrekt. Und ob du das in diesen zwei Minuten mit downloaden + lesen der Anwort und editieren und uploaden deiner eigenen Antwort getan hast, glaube ich nicht. Außerdem hättest du dann bestimmt auch noch was diesbezügliches dazugeschrieben. (Ach ja und wenn du einen halbwegs schnellen Comp hast, dann dauert auch das Extrahieren von einem Megabyte auch mittels typisierter Dateien noch nicht einmal viel mehr als eine Sekunde.)

So das reicht auch schon, denn dämlich war das hier über dich zu berichtende (deine zweite Forderung) ja u.a. auch schon genug.

Thread-Ende (weil ich auch keine Lust habe, alle deine Antworten diesbezüglich zu untersuchen).
MfG

 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M

  Alt 30. Okt 2003, 10:00
Die Änderung war in Sekundenbruchteilen gemacht. Und danach hat es ja funktioniert, wo ist dein Problem? Und der Fehler beim ersten Link, war ein reiner Denkfehler. Aber passiert dir wohl nicht. Gut, solche Programmier Götter soll es auch geben - Glückwunsch, dass du dazu gehörst.

Jetzt musst du mir nur noch erklären, was daran dämlich ist, wenn man etwas nicht weiß bzw. wenn man Fehler macht. Aber bitte per PN, persönliche Dinge gehören hier nicht her.

Und geschlossen, da dich eine weiter Lösung des Problemes anscheinend nicht mehr interessiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Thema geschlossen


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 08: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