 |
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 |
Digga

Anmeldungsdatum: 07.01.2006 Beiträge: 48
|
Verfasst am: 20.02.2007, 15:35 Titel: Linie zeichnen |
|
|
Hallo alle zusammen
Hab ein kleines problem mit diesem Code:
Code: |
DIM AS INTEGER x, y, buttons
DIM AS INTEGER xl(1 to 2), yl(1 to 2)
screen 18
cls
DO
for i = 1 to 2
GETMOUSE x, y,, buttons
if bit(buttons, 0) then
xl(i) = x
yl(i) = y
endif
next i
line (xl(1), yl(1))-(xl(2),yl(2))
LOOP WHILE INKEY = ""
|
Und zwar soll eine Linie per Maus gezeichnet werden, anhand von Anfangs - u. Endpunkt. Das klappt aber leider nicht immer. Mal macht er eine Linie dann nur einen Punkt oder mehrere Linien aneinander.
Ich hoffe ihr könnt mir helfen
gruß Digga |
|
Nach oben |
|
 |
General
Anmeldungsdatum: 26.11.2006 Beiträge: 149
|
Verfasst am: 20.02.2007, 15:43 Titel: |
|
|
also ich weiß nicht ob du dir das so vorstellst aber kannst ja ma gucken ob es das is
Code: |
DIM AS INTEGER x, y, buttons
DIM AS INTEGER xl(1 to 2), yl(1 to 2)
screen 18
cls
DO
for i = 1 to 2
GETMOUSE x, y,, buttons
if bit(buttons, 0) then
xl(i) = x
yl(i) = y
endif
line (xl(1), yl(1))-(xl(2),yl(2))
next i
LOOP WHILE INKEY = ""
|
ich hab einfach ma das mit dem linien zeichnen in die for schleife gesetzt
sag ob es das ist was du suchst |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 20.02.2007, 15:52 Titel: |
|
|
Hi,
die FOR..NEXT Schleife brauchst du nicht (sie sorgt für die Fehler).
Code: | Dim As Integer x, y, buttons, xl, yl
Screen 18
Cls
Getmouse x, y
xl = x
yl = y
Do
Getmouse x, y,, buttons
If Bit(buttons, 0) Then
Line (xl, yl)-(x,y)
xl = x
yl = y
End If
Loop While Inkey = "" |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Digga

Anmeldungsdatum: 07.01.2006 Beiträge: 48
|
Verfasst am: 20.02.2007, 15:55 Titel: |
|
|
Danke schon mal für eure Antworten.
Aber irgendwie klappt das bei mir immer noch nicht...
Jetzt zeichnet er alle Linien aneinander.
Ich möchte aber wie in Paint einzelne Linien zeichnen.
@Volta
Deshalb habe ich auche For..Next Schleife benutzt damit er immer einen neuen Anfangs u Entpunkt hat...
gruß Digga |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 20.02.2007, 16:05 Titel: |
|
|
Das mit dem Punkt zeichen / Linie ist warscheinlich ein abfrageproblem
Wenn du die Linie zeichnen Willst, dann überleg dir, wann du die linie zeichen möchtest.
Als Beispiel:
-Kriterien-
Startpunkt: Position der Muas, wenn Button1 Gedrückt wird.
Stoppunkt: Position der Muas, wenn Button 1 losgelassen wird.
Linie soll dargestellt werden, wenn Maus bewegt wird, udn Button 1 Gedrückt ist.
Anhand der Konkretisierten problematik (Logik), kannst du nun das Programm entwerfen.
Zuerst eine Abfrage, ob die Maus gedrückt wurde, oder losgelassen.
Dazu nimmt man 2 Variablen des Boolischen Typs. Die erste markiert, den aktuellen zustand des button, der 2te den letzten.
Code: |
Dim Maus_AKB1 as Boolean
Dim Maus_LastB1 as Boolean
Dim X as long
Dim Y as long
Do
GETMOUSE x, y,, buttons
MausAK1 = False
If bit(Button,0) = 1 then MausAK1 = True
'code
MausLastB1 = Maus_AK1
Loop
|
Anschliessend kann ausgewertet werden, ob die maus gedrückt wurde, oder ob sie losgelassen wurde.
Code: |
If Maus_LastB1 = False and Maus_AKB1 = True Then
'Maus wurde gedrückt
elseif Maus_LastB1 = True and Maus_AKB1 = False then
'Maus wurde losgelassen
elseif Maus_LastB1 = True and Maus_AKB1 = True
'Maustaste immernoch gedrückt (keine änderung)
else
'Maus immernoch lossgelassen (Keine änderung)
Endif
|
Damit kann man dann die Linie zeichen, bzw die Positionen auswerten.
Code: |
Dim Maus_PosXStart as Long
Dim Maus_PosYStart as Long
Dim Maus_PosXStop as Long
Dim Maus_PosYStop as Long
'...
'Maus wurde gedrückt
Maus_PosXStart = X
Maus_PosYStart = Y
Maus_PosXStop = X
Maus_PosYStop = Y
|
dann noch für den "MouseMove" Effekt
Code: |
'...
'Maustaste immernoch gedrückt (keine änderung)
Maus_PosXStop = X
Maus_PosYStop = Y
|
Anschliessend kann man die Events auswerten, und eventuell ein Linien Array rüllen, und die aktuelle Linie zeichnen
Code: |
If Mause_AKB1 = True then
Line (Maus_PosXStart, Maus_PosYStart) - (Maus_PosYStop, Maus_PosYStop)
End if
|
dann noch das event, das die Linie fixiert, wenn die maus wieder los gelassen wurde.
Code: |
'...
'Maus wurde losgelassen
'Hier kan dann z.B. ein Array Gefüllt werden, das die Linien enthält, die gezeichnet wurden.
'Anschliessend müssen diese natürlich auch gezeichnet werden, so wie zuvor die aktuelle linie.
|
Das ganze packt man dann in eine Do Loop schliefe, und schon is das Perfekt
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Digga

Anmeldungsdatum: 07.01.2006 Beiträge: 48
|
Verfasst am: 20.02.2007, 16:19 Titel: |
|
|
mmh...
Hab jetzt leider keine Zeit es zu testen, aber danke schon mal.
gruß Digga |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 20.02.2007, 16:19 Titel: |
|
|
Ach so,
dann ist die FOR ..NEXT aber auch nicht nötig.
Code: | Dim As Integer x, y, buttons
Dim As Integer xl(1 To 2), yl(1 To 2)
Screen 18
Cls
i=1
Do
Getmouse x, y,, buttons
If Bit(buttons, 0) Then
xl(i) = x
yl(i) = y
Do
Getmouse x, y,, buttons
Loop While Bit(buttons, 0)
if i = 2 then Line (xl(1), yl(1))-(xl(2),yl(2))
i += 1
if i = 3 then i =1
End If
Loop While Inkey = "" |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Digga

Anmeldungsdatum: 07.01.2006 Beiträge: 48
|
Verfasst am: 20.02.2007, 16:21 Titel: |
|
|
@Volta
Danke schön!!!
genau so soll es gemacht werden.
gruß Digga |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 20.02.2007, 17:07 Titel: |
|
|
@volta .. naja... klar, kann man das auch so einfach machen, aber ... CoderLike is das sicherlich nicht ... ... das sieht eher nach Spagetticode aus ...
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 20.02.2007, 19:02 Titel: |
|
|
Kann mir jemand mal die bit() funtkion erklären. Ich hab's achgelesen aber leider nicht verstanden. Die Referenz sagt:
"BIT wird benutzt, um zu prüfen, ob das Bit an der Stelle 'BitNr' gesetzt ist. Wenn ja, gibt BIT true (-1) aus, ansonsten false (0)."
Ich weis, dass in einem Bit entwerder 0 oder 1, true oder false, usw gespeichert werden kann, jedoch frage ich mich, was hier passiert
If Bit(buttons, 0) Then
In buttons ist der aktuelle Maustastenzustand gespeichert, das ist mir klar, aber was ist der zweite Parameter? _________________ Die Antworten zu fast allen Fragen des Lebens findest du entweder im MonsterFAQ oder der Befehlsreferenz - Und wenn du gar nicht mehr weiter weisst ? -> Wikipedia
ALLE RECHTSCHREIBFEHLER DIE ICH MACHE SIND BEABSICHTIGT, DAMIT DIE LEUTE, DIE SPAß DARAN HABEN SOLCHE ZU FINDEN, ETWAS ZU TUN HABEN |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 20.02.2007, 19:20 Titel: |
|
|
@TPM:
Was hat das mit Spaghetti-Code zutun?  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 20.02.2007, 19:26 Titel: |
|
|
Nun, ein Bit gibt ja nur 0 oder 1 an. Da deine Maus aber 2 oder 3, vlt auch so wie meine, 5 besitzt, ist es schwierig, dies mit einem Bit auszudrücken. Daher reiht man mehrere Bits aneinander.
Bei 2 Bit können damit 4 Zustände ausgedrückt werden, sollte für eine Maus reichen.
Code: |
Bitkombi | Wert in Dezimal
----------+----------------
00 | 0
01 | 1
10 | 2
11 | 3
|
So, da aber der Dezimalwert nich wirklich bei sowas nützt, und es Verschwendung wäre, für jede Taste ein eignes Byte zu verschwenden (=8 Bit), hat man dies zusammengefasst. Soll heißen, mit dem zweiten Parameter gibst du an, welches wievielte Bit von Rechts gesehen du haben willst. |
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 20.02.2007, 19:56 Titel: |
|
|
Code: |
If Bit(buttons, 0) Then
|
also fragt man hiermit das erste bit von rechts in der variable buttons ab? _________________ Die Antworten zu fast allen Fragen des Lebens findest du entweder im MonsterFAQ oder der Befehlsreferenz - Und wenn du gar nicht mehr weiter weisst ? -> Wikipedia
ALLE RECHTSCHREIBFEHLER DIE ICH MACHE SIND BEABSICHTIGT, DAMIT DIE LEUTE, DIE SPAß DARAN HABEN SOLCHE ZU FINDEN, ETWAS ZU TUN HABEN |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
alfonsospringer
Anmeldungsdatum: 27.04.2006 Beiträge: 445
|
Verfasst am: 20.02.2007, 20:05 Titel: |
|
|
also ist der einzige sinn dahinter speicherplatz zu sparen? bei diesen datenmengen doch villeicht ein bisschen überflüssig, oder?
danke, jetzt versteh ich die welt viel besser  _________________ Die Antworten zu fast allen Fragen des Lebens findest du entweder im MonsterFAQ oder der Befehlsreferenz - Und wenn du gar nicht mehr weiter weisst ? -> Wikipedia
ALLE RECHTSCHREIBFEHLER DIE ICH MACHE SIND BEABSICHTIGT, DAMIT DIE LEUTE, DIE SPAß DARAN HABEN SOLCHE ZU FINDEN, ETWAS ZU TUN HABEN |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 20.02.2007, 20:10 Titel: |
|
|
alfonsospringer hat Folgendes geschrieben: | also ist der einzige sinn dahinter speicherplatz zu sparen? bei diesen datenmengen doch villeicht ein bisschen überflüssig, oder? | Betreib doch mal 2 Mäuse, 2 Joystiks, 1 Tastaturen, ne TV-Karte, 3 Grafikkarten, USB-Karte, Netzwerk-karte (1GBit), Festplatte, CPU, Motherboard, usw. in einer Kiste .. das fisst alles so massig Space, da is man froh, wenn man jedes Bit frei bekommt. .. ich hab auch immer mit meinem Space zu kämpfen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 20.02.2007, 20:34 Titel: |
|
|
Hm? Also i n meine 256 MB passt das ganze System, und Linux hat danna uch noch knapp 170 MB für sich... |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 20.02.2007, 20:53 Titel: |
|
|
PMedia hat Folgendes geschrieben: | ...Linux... |
Das sagt doch bereits alles, oder?
Achja, wieso soll das so viel arbeitsspeicher brauchen, wenn man viel Hardware eingebaut hat? Ich hab keinen Unterschied gemerkt als ich die TV-Karte oder andere Hardware Sachen eingebaut habe...
Das hängt wohl eher mit der Software (und sehr wahrscheinlich auch dem OS) zusammen.
Benutze übrigens auch Linux _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 20.02.2007, 21:07 Titel: |
|
|
Die Erklärung der Arbeitsweise von 'Bit(buttons, 0)' ist richtig, aber alfonsospringer hat Folgendes geschrieben: | also ist der einzige sinn dahinter speicherplatz zu sparen? | Einspruch 'Euer Ehren':
ob ich jetzt 'Bit(buttons, 0)' oder 'buttons AND 1' oder 'buttons = 1' schreibe spart kein 'Space' (evtl. sind sogar die beiden letztgenannten vom source her kürzer). Die vom FBC erzeugte Exe sowie auch der Speicherbedarf sind gleich (wer es nicht glauben will, soll es mal ausprobieren). _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 20.02.2007, 21:11 Titel: |
|
|
axooo .. Coding technisch .. joar .. also .. ich würd mal behaupten, das man das nur dann realistisch beurteilen kann, wenn man sich mal den Compiler näher ansieht, wei er das dann umsetzt .. speicherschonender ..
@programmierer ... Naja.. Die Hardware braucht auch speicher, wobei die Software mehr Speicher frist, für die Hardware ... Ohne Treiber funzt Hardware nunmal nicht und ohne Anwendungen sind Treiber und Hardware sinnlos
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
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.
|
|