Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TrackMouseEvent's rectangle befindet sich wohl auf dem Mond? (https://www.delphipraxis.net/11032-trackmouseevents-rectangle-befindet-sich-wohl-auf-dem-mond.html)

ArrayOf.. 30. Okt 2003 00:49


TrackMouseEvent's rectangle befindet sich wohl auf dem Mond?
 
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)

Luckie 30. Okt 2003 01:11

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M
 
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.

ArrayOf.. 30. Okt 2003 01:43

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M
 
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...

Luckie 30. Okt 2003 01:54

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

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. :roll: 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? :evil:

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.

ArrayOf.. 30. Okt 2003 07:37

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M
 
..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).

Luckie 30. Okt 2003 09:00

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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