amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Mausdaten auslesen [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2004-02-15, 16:04 h

AND
Posts: 9
User
Kann mir bitte jemand sagen, wie ich an die aktiven Mausdaten eines Fensters herankomme? Ich meine damit die Breite/Höhe des Zeigers und den X/Y-Offset. Die Daten in der Window-Struktur sind alle 0.
Wie komme ich an diese Infos ran?

[ - Answer - Quote - Direct link - ]

2004-02-15, 17:51 h

Holger
Posts: 8116
User
Das Auslesen der Mauszeigerdaten, also des Aussehens, nicht der Position, war nie wirklich vorgesehen. Man kann zwar über die diverse Strukturen an die Daten herankommen, diese Unterscheiden sich aber zwischen den verschiedenen Betriebssystemversionen.
Möglich daß in den letzten OS3.x-Versionen Funktionen zum Abfragen hinzugekommen sind, da bin ich momentan überfragt. Zu welchem Zweck brauchst Du denn diese Daten?

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2004-02-15, 18:23 h

chkamiga
Posts:
[Former member]
Währe vielleicht sinnvoll zu sagen in was du Programmierst
C ?E ?ASM ?Basic ?

--
http://people.freenet.de/CHRAmiga.de

CHRKUM@web.de

[ - Edit - Answer - Quote - Direct link - ]

2004-02-15, 18:48 h

AND
Posts: 9
User
Ich brauche die Daten um die Höhe des Mauszeigers zu bestimmen.
Ich habe ein Commodity in C gecodet, mit dem Infos über das Icon unter der Maus angezeigt werden. Damit Der Mauszeiger diese Infos nicht überdeckt möchte ich das Infofenster um die Höhe des Mauszeigers versetzen.

Bei einem anderen Commodity ändere ich den Mauszeiger eines Fensters, dass mit gar nicht gehört. Diesen stelle ich dann wieder her.
Komischerweise funktioniert das, obwohl die Daten alle (Breite,Höhe,Offset) 0 sind.

Ich glaube, dass es an dem RTG-System liegt (P96), dass die Daten nicht in der Window-Struktur eingetragen sind.

[ - Answer - Quote - Direct link - ]

2004-02-15, 18:48 h

Mad_Dog
Posts: 1944
User
Ich habe hier mal einen uralten Sourcecode ausgegraben, dort findest Du zumindest die Antwort auf Deine Frage, wie man an die Mousekoordinaten kommt.

code:
/* win2.c */

#include <exec/types.h>
#include <intuition/intuition.h>
#include <time.h>

/* Variablen für Windows und Grafik */

struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct Window *Window;
struct RastPort *rp;

#include "stdwindow.h"  /* Eigenes Include-Flie */

/* Variablen zur Message-Bearbeitung */
struct IntuiMessage *msg;
ULONG class;
USHORT code;
SHORT mx, my;
char string[81];
struct tm *tp; /* für Datum/Uhrzeit */
time_t t;

void print(int x, int y, char *string)
 {
 SetAPen(rp, 1L);
 Move(rp, x,y);
 Text(rp,"                              ",30L);
 /*       <------ 30 Leerzeichen ------>   */
 Move(rp, x,y);
 Text(rp, string, strlen( string) );
 }


void main(void)
 {
 open_libs(); /* Librarys öffnen */

 Window = (struct Window *) open_window(
   20,20,500,100,"Anzeige von Events",
   WINDOWCLOSE | WINDOWSIZING | WINDOWDRAG |
   WINDOWDEPTH | REPORTMOUSE |

   ACTIVATE,

   CLOSEWINDOW | /* Die IDMC-Flags */
   NEWSIZE |
   MOUSEMOVE |
   VANILLAKEY |
   INTUITICKS,
   NULL
   );

 if (Window == NULL) exit(FALSE);

 rp = Window->RPort;
 print(50,38,"Das letzte Event war:");

 for(;;) /* FOREVER bis CLOSEWINDOW */
 {
 /* Warte auf Mausklick in Close-Gadget */
 Wait(1L<< Window->UserPort->mp_SigBit);

 while( msg = (struct IntuiMessage *)
              GetMsg(Window->UserPort) )
 {
 class = msg->Class;
 code = msg->Code;
 mx = msg->MouseX;
 my = msg->MouseY;
 ReplyMsg( msg );
 switch( class)
 {
 case CLOSEWINDOW: close_all();
 break;
 case NEWSIZE    : print(50,50,"Größe geändert");
 break;
 case MOUSEMOVE  : sprintf(string,
 "Maus bewegt auf x=%d y=%d",
 mx, my);
 print(50,50,string);
 break;
 case VANILLAKEY : sprintf(string,
 "Taste %c gedrückt",code);
 print(50,50,string);
 break;
 case INTUITICKS : time(&t);
 tp = localtime(&t);
 Move(rp, 200, 7);
 Text(rp, asctime(tp),24 );
 break;
 } /* end switch */
 }    /* end while  */
 }       /* end for    */
 }          /* end main   */

--

http://www.norman-interactive.com

[ Dieser Beitrag wurde von Mad_Dog am 15.02.2004 editiert. ]

[ - Answer - Quote - Direct link - ]

2004-02-15, 18:52 h

AND
Posts: 9
User
Zitat:
Original von Mad_Dog:
Ich habe hier mal einen uralten Sourcecode ausgegraben, dort findest Du zumindest die Antwort auf Deine Frage, wie man an die Mousekoordinaten kommt.


Ich habe doch gar nicht nach den Mauskoordinaten gefragt.

Im übrigen stehen die Mauskoordinaten auch in der Window-Struktur und Screen-Struktur.




[ - Answer - Quote - Direct link - ]

2004-02-15, 19:53 h

Holger
Posts: 8116
User
Zitat:
Original von AND:
Ich glaube, dass es an dem RTG-System liegt (P96), dass die Daten nicht in der Window-Struktur eingetragen sind.

Nein, es ist ab OS3.0 grundsätzlich nicht mehr in der Struktur. Das gilt auch für viele andere Strukturen, die nicht mehr in andere Strukturen eingebettet sind, weil sie sich verändert/vergrößert haben.
Deshalb müssen viele Attribute grundsätzlich über die neuen Set...() Funktionen (meist mit TagLists) gesetzt werden, leider fehlen oft die zugehörigen Get...()-Funktionen, womit kein kompatibles Auslesen dieser Attribute möglich ist. Der Mauszeiger ist eins davon.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2004-02-17, 17:34 h

thomas
Posts: 7718
User
Ich habe mir bei sowas immer mit einem einfachen Trick geholfen: ich habe die Informationen *über* dem Zeiger angezeigt anstatt darunter. Man muß ja nicht alles so machen, wie Windows.

Eine andere Möglichkeit wäre, einen eigenen Zeiger anzuzeigen, dann weißt du die Höhe genau. Wenn du sowieso die Mausbewegung verfolgst und immer, wenn der Zeiger über einem Icon ist, etwas machst, kannst du dann ja auch das Bild ändern, z.B. in eine Hand (Windows läßt grüßen).

Ich bin mir nicht sicher, aber man kann mit Intuition ja die System-Configuration auslesen. Vielleicht steht die Größe da drin (aber das ist vermutlich auch eins von den Set-/Get-Feldern).

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/


[ Dieser Beitrag wurde von thomas am 17.02.2004 editiert. ]

[ - Answer - Quote - Direct link - ]

2004-02-18, 01:09 h

Holger
Posts: 8116
User
Zitat:
Original von thomas:
Ich bin mir nicht sicher, aber man kann mit Intuition ja die System-Configuration auslesen. Vielleicht steht die Größe da drin (aber das ist vermutlich auch eins von den Set-/Get-Feldern).

Diese Struktur stammt aus OS1.x Zeiten. Die kann man getrost vergessen, war schon bei OS2.0 veraltet.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Mausdaten auslesen [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.