>>>>>>>>Der Basic-Kurs fr Fortgeschrittene<<<<<<<<<<<<< Kursbersicht: ================================ I. Teil Maussteuerung (mit PowerBasic) II. Teil Bewegte (kleine) Grafiken III. Teil Einlesen des DIR's mal anders IV. Teil CHAIN, COMMON und hnliches Der Rest steht noch nicht fest. ================================ >>>>>>>>>>>>>>>>>>>Heute: ================================ I. Teil Maussteuerung (mit PowerBasic) ================================ Einleitung -==--==--==--==--==--==--==--==--==--==--==- Hallo Freax! Neuer Kurs, neues Glck. Endlich mal ein Basickurs fr Fortge- schrittene und solche, die es werden wollen. Heute widmen wir uns mal einem ganz interessanten Thema: Der Maussteuerung. Viele Basicdialekte bieten zustzlich zu Compiler ja auch einige sogannte Libaries, die Maussteuerung beeinhalten. Mir persnlich gefllt die Maussteurung der Libaries, die bei PowerBasic beiliegen nicht, denn es lsst sich die Maus nur ansprechen, wenn auch ein Fenster geffnet ist. (Und die Fenster sind auch nicht das wahre.) Also, was tun? Ich habe neulich von einer Maustteurungsroutine fr Powerbasic gehrt und habe mich natrlich dann weiter informiert. (in den Libaries stehen auch die Befehle dafr (hab' ich dann fest- gestellt)). -==--==--==--==--==--==--==--==--==--==--==- So, jetzt geht's los: Zuerstmal mssen wir testen, ob eine Maus (+geladener Maus- treiber) vorhanden ist. Dazu mu man Register setzen und den Maustreiber aufrufen (der Maustreiber ist (wenn berhaupt) als Maschinensprache- programm im Speicher, also mssen wir eine bestimmte Speicher- adresse aufrufen) Die Befehle: ====================Programm: MAUS1.bas=================== REG 1,0: CALL INTERRUPT &h33 ======================Programm ende======================= REG 1,0 setzt das Register 1 auf 0. CALL INTERRUPT &h33 ruft die Interruptadresse &h33 (dezimal:51) auf. Der Maustreiber initalisiert die Maus. Natrlich bleibt jetzt noch der Bildschirm schwarz, denn der Maustreiber ist noch nicht angewiesen worden, den Mauszeiger auf dem Bildschirm zu zeigen. Also: ====================Programm: MAUS1.bas=================== REG 1,0: CALL INTERRUPT &h33 REG 1,1: CALL INTERRUPT &h33 ======================Programm ende======================= CALL INTERRUPT &h33 ruft wieder die Interruptadresse 51 auf, diesmal wird der Maustreiber vllig aktiviert und steht ganz zur Verfgung. Der Mauszeiger ist auch endlich auf dem Bildschirm zu sehen und lsst sich auch bewegen. (Schaltet mal, bevor der Maustreiber aktiviert wird, mal in den Bildschirm- modus 12 um. Toll, nicht?) Jetzt fehlen uns nur noch zwei Sachen: 1. Wie knnen wir testen, wo sich die Maus befindet und 2. wie knnen wir die Maus wieder ausschalten? Nichts einfacher als das: ====================Programm: MAUS1.bas=================== REG 1,0: CALL INTERRUPT &h33 REG 1,1: CALL INTERRUPT &h33 REG 1,3: CALL INTERRUPT &h33 x=reg(3) y=reg(4) taste=reg(2) ======================Programm ende======================= Jetzt befindet sich die x-Position in der Variable x, die y-Position in der Variable y und die Tastenzustand in der Variable taste. Zum Tastenzustand: (gedrckt=1, nicht gedrckt=0) Zweitastenmaus: Links | Rechts | Tastenzustand ---------------------------------------- 0 | 0 | 0 1 | 0 | 1 0 | 1 | 2 1 | 1 | 3 Dreitastenmaus: Links | Rechts | Mitte |Tastenzustand ---------------------------------------- 0 | 0 | 0 | 0 1 | 0 | 0 | 1 0 | 1 | 0 | 2 0 | 0 | 1 | 3 Zur x/y-Position: In Bildschirmmodus 0 gelten nicht die Zeile/Spalteaufteilung des normalen Texmodus. Die Werte liegen in etwa wie beim Modus 9 oder 12!!! So, hier zum Schlu mal ein Listing, das euch vieleicht etwas weiterhilft. =========================Programm: MAUS2.bas=================== REG 1,0: CALL INTERRUPT &h33 REG 1,1: CALL INTERRUPT &h33 DO UNTIL taste=3 REG 1,3: CALL INTERRUPT &h33 x=reg(3) y=reg(4) taste=reg(2) LOCATE 1,1: PRINT space$(30) LOCATE 1,1: PRINT x,y,taste LOOP ==========================Programm ende========================== Jetzt bleibt euch berlassen, was ihr daraus macht! Das war's auch schon fr dieses Mal. Also, bis zum nchsten Mal, euer Dark Crusher