|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 11.11.2004, 18:02 Titel: Ruckel.... |
|
|
Also, ich hab da so ein Problem, ich hab diesen Code:
Code: | DECLARE SUB Haupt ()
DECLARE SUB MouseDriver (AX%, bx%, CX%, DX%)
DECLARE FUNCTION MouseInit% ()
DECLARE SUB mouseshow ()
DECLARE SUB mousestatus (lb%, Rb%, Xmouse%, Ymouse%)
DECLARE SUB STICKS (Joyx%, JOYY%, BUT1%, BUt2%, BUT3%)
DIM SHARED mouse$
RESTORE
mouse$ = SPACE$(57)
FOR I% = 1 TO 57
READ A$
H$ = CHR$(VAL("&H" + A$))
MID$(mouse$, I%, 1) = H$
NEXT I%
DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B
DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
DATA 8B,5E,06,89,17,5D,CA,08,00
CLS
MS% = MouseInit%
IF NOT MS% THEN
PRINT "Mouse not found": LET AMOUSE$ = "NO":
END IF
LET AMOUSE$ = "YES"
mouseshow
Haupt
SUB Haupt
DO
mousestatus Xmouse%, Ymouse%
CIRCLE ((Xmouse%), (Ymouse%)), 10, 3
LOOP
END SUB
SUB MouseDriver (AX%, bx%, CX%, DX%)
DEF SEG = VARSEG(mouse$)
mouse% = SADD(mouse$)
CALL Absolute(AX%, bx%, CX%, DX%, mouse%)
END SUB
SUB MouseHide
AX% = 2
MouseDriver AX%, 0, 0, 0
END SUB
FUNCTION MouseInit%
AX% = 0
MouseDriver AX%, 0, 0, 0
MouseInit% = AX%
END FUNCTION
SUB MousePut
AX% = 4
CX% = X%
DX% = Y%
MouseDriver AX%, 0, CX%, DX%
END SUB
SUB mousestatus (lb%, Rb%, Xmouse%, Ymouse%)
AX% = 3
MouseDriver AX%, bx%, CX%, DX%
lb% = ((bx% AND 1) <> 0)
Rb% = ((bx% AND 2) <> 0)
Xmouse% = CX%
Ymouse% = DX%
END SUB
SUB STICKS (Joyx%, JOYY%, BUT1%, BUt2%, BUT3%)
Joyx% = STICK(0)
JOYY% = STICK(1)
BUT1% = STRIG(1)
BUt2% = STRIG(5)
BUT3% = STRIG(7)
END SUB
|
Es geht nur um des Sub Haupt.
Da hab ich jetzt nen Kreis der mit dem zeiger mit geht, wenn ich jetzt aber versuch ihn mit cls zu löschen so dass keine spur entsteht flimmert es logischerweise. Wie mach ich dass es nicht flimmert, ich hab auch schon probiert dass der bildschirm nur gelöscht wird wenn die maus sich bewegt, geht aber auch nich. Könnt ihr mit mal wieder helfen(wie schon so oft)? |
|
Nach oben |
|
|
Kai Bareis
Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 11.11.2004, 18:53 Titel: |
|
|
Mit welchem screen arbeitest du eigentlich? _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.11.2004, 21:23 Titel: |
|
|
Das Problem ist ganz einfach. du rufst MausStatus mit nur 2 Parametern auf! du musst in der Haupt-sub einfach "MouseStatus taste1, taste2, mousex, mousey" aufrufen, dann geht das. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 12.11.2004, 16:06 Titel: |
|
|
hä?
also einfach
Code: | Sub Haupt
Do
mousestatus lb%, Rb%, Xmouse%, ymouse$
Circle ((Xmouse%), (Ymouse%))
CLS
Loop
|
oder wie???
Zuletzt bearbeitet von Killos am 12.11.2004, 16:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 12.11.2004, 16:11 Titel: |
|
|
Versuchs mal hiermit...
Der Hintergrund wird in BackGround% gespeichert.
(der alte Bildschirm wird nur dann wiederhergestellt, wenn sich die Maus auch bewegt hat.)
Code: |
SUB Haupt
oldXmouse% = -1
oldYmouse% = -1
DIM BackGround%(0 TO 10000) 'Den Wert musst du angleichen
DO
mousestatus Xmouse%, Ymouse%
IF NOT oldXmouse% = Xmouse% OR NOT oldYmouse% = Ymouse% THEN
IF NOT oldxmouse% = -1 THEN PUT(oldXmouse%, oldYmouse%), BackGround%, PSET
oldXmouse% = Xmouse%
oldYmouse% = Ymouse%
GET(Xmouse% - 10, Ymouse%- 10)-(Xmouse% + 10, Ymouse% + 10), BackGround%
CIRCLE (Xmouse%, Ymouse%), 10, 3
END IF
LOOP
END SUB
|
Habs nicht getestet, müsste aber gehen. _________________
|
|
Nach oben |
|
|
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 12.11.2004, 16:24 Titel: |
|
|
So, ich hab im Internet jetzt nen Code gefunden (unten) bei dem als Maus ein ausgemaltes vireckiges Kästchen gezeigt wird. Jetzt möcht ich aber einen kreis als maus und kein kästchen, aber wie???
hier is der code:
Code: | DECLARE SUB MouseDriver (AX%, bx%, CX%, DX%)
DECLARE FUNCTION MouseInit% ()
DECLARE SUB mouseshow ()
DECLARE SUB mousestatus (lb%, RB%, Xmouse%, Ymouse%)
DECLARE SUB STICKS (Joyx%, JOYY%, BUT1%, BUt2%, BUT3%)
DIM SHARED mouse$
RESTORE
mouse$ = SPACE$(57)
FOR I% = 1 TO 57
READ A$
H$ = CHR$(VAL("&H" + A$))
MID$(mouse$, I%, 1) = H$
NEXT I%
DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B
DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
DATA 8B,5E,06,89,17,5D,CA,08,00
CLS
MS% = MouseInit%
IF NOT MS% THEN
PRINT "Mouse not found": LET AMOUSE$ = "NO":
END IF
mouseshow
DO
mousestatus lb%, RB%, Xmouse%, Ymouse%
LOOP
SUB MouseDriver (AX%, bx%, CX%, DX%)
DEF SEG = VARSEG(mouse$)
mouse% = SADD(mouse$)
CALL Absolute(AX%, bx%, CX%, DX%, mouse%)
END SUB
SUB MouseHide
AX% = 2
MouseDriver AX%, 0, 0, 0
END SUB
FUNCTION MouseInit%
AX% = 0
MouseDriver AX%, 0, 0, 0
MouseInit% = AX%
END FUNCTION
SUB MousePut
AX% = 4
CX% = X%
DX% = Y%
MouseDriver AX%, 0, CX%, DX%
END SUB
SUB mouseshow
AX% = 1
MouseDriver AX%, 0, 0, 0
END SUB
SUB mousestatus (lb%, RB%, Xmouse%, Ymouse%)
AX% = 3
MouseDriver AX%, bx%, CX%, DX%
lb% = ((bx% AND 1) <> 0)
RB% = ((bx% AND 2) <> 0)
Xmouse% = CX%
Ymouse% = DX%
END SUB
SUB STICKS (Joyx%, JOYY%, BUT1%, BUt2%, BUT3%)
Joyx% = STICK(0)
JOYY% = STICK(1)
BUT1% = STRIG(1)
BUt2% = STRIG(5)
BUT3% = STRIG(7)
END SUB
|
|
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 12.11.2004, 16:42 Titel: |
|
|
Aso bei DEM Code dürfte eigentlich garnix angezeigt werden. _________________
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 12.11.2004, 19:59 Titel: |
|
|
doch, es wird der zeiger angezeigt, der auch bei der programmieroberfläche von qb 4.5 angezeigt wird!
ich verzweifel noch... |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.11.2004, 22:05 Titel: |
|
|
also mal so: Nimm die MausDEU.bas aus dem Rundum-sorglos-mauspaket von Qbasic.de
dann machst du den Code hier:
Code: | 'normale Mausinitialisierungen, kannst du kopieren
SCREEN 12
radius = 10
DIM hintergrund(4*radius*radius)
DO
MouseStatus b1,b2,x,y
GET (x-radius,y-radius)-STEP(2*radius,2*radius), hintergrund
CIRCLE x,y,radius
t=timer
do:loop until t <> timer
PUT (x-radius,y-radius), hintergrund, PSET
LOOP |
das könnte gehen. Die Subs brauchst du natürlich auch alle, die schreib ich aber ned ab _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 12.11.2004, 22:51 Titel: |
|
|
Achsoo !
Ja im SCREEN 0 kannste doch natürlich keine grafischen Mauscursor benutzen !! Der ist nur für Text vorgesehen. _________________
|
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 12.11.2004, 22:53 Titel: |
|
|
Ich kann nur MisterD zustimmen, nimm das sorglos-Paket _________________
|
|
Nach oben |
|
|
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 13.11.2004, 12:10 Titel: |
|
|
Also, ich habs jetzt so gemacht wie ihrs gesagt habt, geht aber trotzdem nich... ...kommt jetzt halt en Kreis aber immer noch ne linie, also nich durchgezogen sondern unregelmäsig...
hier nochmal der umgschriebene code:
Code: | '***************************************************************************
' MouseDeu.bas - Maustreiber fuer QBasic und QuickBasic fuer alle SCREENs
' ==========================================================================
' Dieser Maustreiber stammt von einem unbekannten Programmierer. Er eignet
' sich im Prinzip fuer alle SCREENS inklusive den Textbildschirm SCREEN 0.
' Ausfuehrliche deutsche Kommentare eingefuegt von Thomas Antoni
'
'
' \ (c) Thomas Antoni, 1.11.02 - 4.11.02
' \ /\ Mailto:thomas@antonis.de
' ( ) www.antonis.de --- www.qbasic.de
' .( o ).
' ----==== Hottest QBasic Stuff on Earth !!! ====----
'
'***************************************************************************
'-------------------------- Maus-Routinen ----------------------------------
DECLARE SUB MouseDriver (AX%, bx%, CX%, DX%)
'Maustreiber, wird nur von anderen SUBs, nicht v. Hauptprogr. aufgerufen
DECLARE SUB MouseHide ()
'Mauszeiger unsichtbar machen
DECLARE FUNCTION MouseInit% ()
'Maus initialisieren, liefert -1 zurueck, wenn Maus gefunden
DECLARE SUB MousePut (x%, y%)
'Mauszeiger an den Koordinaten X%/Y% anzeigen
DECLARE SUB MouseShow ()
'Mauszeiger in der Bildschirm-Mitte sichtbar machen
DECLARE SUB MouseStatus (lb%, Rb%, Xmouse%, Ymouse%)
'Tasten-Status und Mauskoordinaten abfragen (LB% / RB% = -1 wenn
'Linke / Rechte Maustaste gedrueckt)
'---------- Maschinensprache-Code fuer Maustreiber erstellen ----------------
DIM SHARED mouse$
RESTORE
mouse$ = SPACE$(57) 'Maschinensprache-Code als String in mouse$ hinterlegen
FOR I% = 1 TO 57
READ A$
H$ = CHR$(VAL("&H" + A$))
MID$(mouse$, I%, 1) = H$
NEXT I%
'Maschinensprache-Befehle (57 Bytes)
DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B
DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
DATA 8B,5E,06,89,17,5D,CA,08,00
'--------- Maus initialisieren und anzeigen, ob Maus gefunden --------------
CLS
MS% = MouseInit%
IF MS% THEN
PRINT "Maus gefunden und initialisiert"
ELSE
PRINT "Maus nicht gefunden": SLEEP: END
END IF
'-------- Mauszeiger in Bildschirm-Mitte anzeigen --------------------------
MouseShow
'-------- Maus testen und Status anzeigen -----------------------------------
'normale Mausinitialisierungen, kannst du kopieren
SCREEN 12
radius = 10
DIM hintergrund(4 * radius * radius)
DO
MouseStatus lb%, Rb%, Xmouse%, Ymouse%
GET ((Xmouse%) - radius, (Ymouse%) - radius)-STEP(2 * radius, 2 * radius), hintergrund
CIRCLE ((Xmouse%), (Ymouse%)), radius
t = TIMER
DO: LOOP UNTIL t <> TIMER
PUT ((Xmouse%) - 5, Ymouse% - 5), hintergrund, PSET
LOOP
SUB MouseDriver (AX%, bx%, CX%, DX%)
'----------------------- Maustreiber aufrufen ------------------------------
DEF SEG = VARSEG(mouse$)
mouse% = SADD(mouse$)
CALL Absolute(AX%, bx%, CX%, DX%, mouse%)
END SUB
SUB MouseHide
'----------------- Mauszeiger unsichtbar machen -----------------------------
AX% = 2
CALL MouseDriver(AX%, 0, 0, 0)
END SUB
FUNCTION MouseInit%
'----------- Maus initialisieren ----------------------------------------
AX% = 0
CALL MouseDriver(AX%, 0, 0, 0)
MouseInit% = AX% '-1 falls Maus gefunden, 0 falls Maus nicht gefunden
END FUNCTION
SUB MousePut (x%, y%)
'------------ Mauszeiger auf die Koordinaten X%/Y% setzen -----------------
AX% = 4
CX% = x%
DX% = y%
CALL MouseDriver(AX%, 0, CX%, DX%)
END SUB
SUB MouseShow
'--------------- Mauszeiger in Bildschirmmitte sichtbar machen -------------
AX% = 1
CALL MouseDriver(AX%, 0, 0, 0)
END SUB
SUB MouseStatus (lb%, Rb%, Xmouse%, Ymouse%)
'---------------- Mausposition und Tastenstatus ermitteln ------------------
AX% = 3
MouseDriver AX%, bx%, CX%, DX%
lb% = ((bx% AND 1) <> 0) '-1 / 0 = linke Taste gedrueckt / nicht gedrueckt
Rb% = ((bx% AND 2) <> 0) ' dito fuer rechte Maustaste
Xmouse% = CX%
Ymouse% = DX%
END SUB
|
|
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.11.2004, 12:19 Titel: |
|
|
Jetzt versuche mal - wie du's beim ersten Beispiel schon ausprobiert hast - den Kreis nur dann neu zu zeichnen, wenn sich die Koordinaten des Mauszeigers ändern. |
|
Nach oben |
|
|
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 13.11.2004, 12:57 Titel: |
|
|
Also, ich hab alles von hier noch mal probiert, hab aber nichts hingekriegt...
Kann mir nich jemand ein funktionierendes baispiel schreiben???
bitte, ich brauchs nämlich dringend... |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 13.11.2004, 16:07 Titel: |
|
|
argh !
Ich hab doch oben schon nen Beispielcode dazu gemacht !!! _________________
|
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.11.2004, 16:46 Titel: |
|
|
Hallo
Das folgende basiert auch auf einem Beispiel von qbasic.de. Ich hab's etwas um- und einen Kreis als Cursor eingebaut, der die Farben entsprechend den Tastendrücken ändert. Der Hintergrund ist etwas doof, aber soll auch nur zeigen, dass er wieder hergestellt wird. Läuft bei mir absolut flimmer- und streifenfrei.
Code: |
DECLARE FUNCTION MouseInit% ()
DECLARE SUB MouseStatus (Lb%, Rb%, xMouse%, yMouse%)
DECLARE SUB MouseRange (X1%, Y1%, x2%, Y2%)
DECLARE SUB MouseDriver (ax%, bx%, cx%, dx%)
DEFINT A-Z: DEF SEG = &HA000:
DIM SHARED mouse$: mouse$ = SPACE$(57)
DIM bild%(500)
KEY(1) ON
ON KEY(1) GOSUB raus
SCREEN 12
GOSUB hintergrund
f% = 3
fm% = f%
FOR I% = 1 TO 57: READ a$: H$ = CHR$(VAL("&H" + a$))
MID$(mouse$, I%, 1) = H$: NEXT I%
DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B
DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53
DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F
DATA 8B,5E,06,89,17,5D,CA,08,00
RESTORE
ms% = MouseInit%
IF NOT ms% THEN
PRINT "Mouse not found"
END
END IF
MouseRange 10, 10, 629, 469
MouseStatus l%, r%, x%, y%
GET (x% - 10, y% - 10)-(x% + 10, y% + 10), bild%
xm% = x%
ym% = y%
GOSUB kreis
DO
MouseStatus l%, r%, x%, y%
f = 3
IF l% = -1 THEN f = 12
IF r% = -1 THEN f = 14
IF l% = -1 AND r% = -1 THEN f = 1
IF x% <> xm% OR y% <> ym% THEN GOSUB kreis
IF f% <> fm% THEN fm% = f%: GOSUB kreis
LOOP
raus:
END
kreis:
PUT (xm% - 10, ym% - 10), bild%, PSET
GET (x% - 10, y% - 10)-(x% + 10, y% + 10), bild%
CIRCLE (x%, y%), 10, f
xm% = x%
ym% = y%
RETURN
hintergrund:
CLS
RANDOMIZE TIMER
FOR a = 1 TO 10
xa = RND * 640
ya = RND * 480
xb = RND * 640
yb = RND * 480
f = 6 + FIX(RND * 2) * 2
LINE (xa, ya)-(xb, yb), f, BF
NEXT
RETURN
DEFLNG A-Z
SUB MouseDriver (ax%, bx%, cx%, dx%)
DEF SEG = VARSEG(mouse$)
mouse% = SADD(mouse$)
CALL Absolute(ax%, bx%, cx%, dx%, mouse%)
END SUB
FUNCTION MouseInit%
ax% = 0
MouseDriver ax%, 0, 0, 0
MouseInit% = ax%
END FUNCTION
SUB MouseRange (X1%, Y1%, x2%, Y2%)
ax% = 7
cx% = X1%
dx% = x2%
MouseDriver ax%, 0, cx%, dx%
ax% = 8
cx% = Y1%
dx% = Y2%
MouseDriver ax%, 0, cx%, dx%
END SUB
SUB MouseStatus (Lb%, Rb%, xMouse%, yMouse%)
ax% = 3
MouseDriver ax%, bx%, cx%, dx%
Lb% = ((bx% AND 1) <> 0)
Rb% = ((bx% AND 2) <> 0)
xMouse% = cx%
yMouse% = dx%
END SUB
|
Vielleicht kannst du damit was anfangen.
Gruss
Skilltronic
Zuletzt bearbeitet von Skilltronic am 13.11.2004, 17:30, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 13.11.2004, 17:12 Titel: |
|
|
Also nur mal so: Wenn du nur einen Kreis machen willst darfst du nicht MouseShow schreiben, da dann der normale Zeiger erscheint! _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Killos
Anmeldungsdatum: 12.09.2004 Beiträge: 31
|
Verfasst am: 13.11.2004, 17:27 Titel: |
|
|
@skill tronic vielen dank, dass hab ich gebraucht
@all hierposters danke |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 13.11.2004, 17:39 Titel: |
|
|
MisterD hat Folgendes geschrieben: | Also nur mal so: Wenn du nur einen Kreis machen willst darfst du nicht MouseShow schreiben, da dann der normale Zeiger erscheint! |
@MisterD: Klar - das war's. Ich hab' mir den Originalcode nicht richtig angesehen.
Genauso kann man in meinem Programm die SUB MouseHide weglassen. Ist ja sonst doppelt gemoppelt. Hab das Beispiel auch schon entsprechend editiert.
@Killos: Bitteschön ! |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|