Announcement

Collapse
No announcement yet.

Mauskoordinaten kleiner 0 und Mausereignisse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mauskoordinaten kleiner 0 und Mausereignisse

    Hallo,

    hab zwei Probleme mit der Maus bzw. den Bildschirmkoordinaten.

    1. Ich möchte mit 'Mouse.CursorPos' meinen Cursor an einer Stelle auf meiner Komponente plazieren. Dabei habe ich festgestellt, dass die Mauskoordinaten größer oder kleiner als meine tatsächliche Bildschirmauflösung werden könne. Für eine Bildschirmbreite von 1024 Pixeln gibt es Mauskoordinaten von -4 ..+1028.
    Das bringt einen nicht erwarteten Offset von 4 Pixeln zwischen den Koordinatensystemen, den auch 'ClientToScreen' nicht ausgleicht. Ist die vier ein Festwert oder wie kommt er zustande?

    2. Ich möchte mit 'OnMousDown' und 'OnDblClick' unterschiedliche Ereignisbehandlungsroutinen verknüpfen. Leider durchläuft 'OnDblClick' immer zuerst auch 'OnMousDown' (ist ja an sich normal), was ich nicht gebrauchen kann. Gib es eine Möglichkeit beide Ereignisse sauber zu trennen? Bin mit Flags und Timer jedenfalls nicht zu Rande gekommen.

    Vielen Dank vorab

    Sigurd

  • #2
    Hi

    OnMouseDown führt den Parameter Shift mit. Bei einem Doppelklick sollte ssDouble in Shift sein.
    Der Versatz von 4 Pixel'n ist nicht normal. Ich vermute das Deine Koordinatenumrechnungen falsch sind. Du solltest mal die Breite der Fensterrahmen ändern (Windows-Darstellungs-einstellungen) und schauen ob sich der 4 Pixel Wert abhängig ändert. Falls ja, ist Deine Umrechnung falsch. Alternativ versuchste mit GetCursorPos(TPoint) die absoluten Koordinaten mit den umgerechneten zu vergleichen.

    Gruß hage

    Comment


    • #3
      Hallo Hagen,

      erstmal vielen Dank für deine Antwort, leider bringt sie mich nicht so richtig weiter.

      zu 1.
      - Das Ändern der Rahmenbreite in der Systemsteuerung hat keinen Einfluß.
      - Bei meiner Angabe scheint mir ein Fehler unterlaufen zu sein. Die von 'GetCurPos' laufen von -4...1019. D.h. die Anzahl der Bildpunkt ist OK, sie sind nur alle um -4 verschoben.
      - Deine Vermutung mit der Rahmenbreite ist vielleicht ab doch nicht ganz falsch. So liefert ein maximiertes Formular im Objektinspektor folgende Koordinaten:

      ClientWidth: 1024 Width: 1032
      Left: -4 Top: -4

      Meine Windows Kenntnisse sind leider so bescheiden das ich damit nicht weiter komme.

      zu 2.
      Dein Hinweis zu ssDouble ist zwar prinzipiell richtig, aber bei einem Doppelklick wird OnMouseDown dreimal durchlaufen. Zweimal mit ssLeft und einmal mit ssLeft+ssDouble als Parameter. Da ich aber eigentlich auch etwas mit ssLeft verknüpfen wollte, nützt mir das später ssDouble nichts. Ich kann ja bei ssLeft nicht irgendwelche Zeiten warten ob ssDouble noch kommt. Oder stell ich mich nur zu blöd an?

      Gruß Sigur

      Comment


      • #4
        Hallo Hagen,

        ich noch mal. Ziehe den Beitrag zu den Mauskoordinaten zurück. War eigene Dummheit. Ich hatte unter meiner Image-Komponete noch ein Panel liegen und dem die gleiche OnMouseMove Routine wie dem Image zugewiesen. Das hat mir dann den Bevel des Panels als Offset eingebracht.

        Die Angaben des Objektinspektor sind mir aber weiterhin unklar.

        Gruß Sigur

        Comment


        • #5
          Hallo Sigurd,

          die Angaben des Objektinspektor sind schon OK. Ein maximiertes Fenster hat zwar einen "physischen" aber keinen sichtbaren Rahmen. Der Rahmen gehört nicht zur ClientArea (ebenso wie die Titel und die Menüzeile). Der Fensterrahmen liegt damit außerhalb des sichtbaren Bereichs, gehört aber trotzdem zum Fenster. Damit ist das maximierte Fenster um 2xRahmenbreite breiter als Clientwidth (und beginnt damit im negativen Koordinatenbereich). Bei Clientheight und Fensterhöhe spielen dann noch Höhe der Titel- und Menüzeile eine Rolle.

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X