Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Linie zeichnen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Digga



Anmeldungsdatum: 07.01.2006
Beiträge: 48

BeitragVerfasst am: 20.02.2007, 15:35    Titel: Linie zeichnen Antworten mit Zitat

Hallo alle zusammen lächeln
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 mit dem Kopf durch die Mauer wollen

gruß Digga
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
General



Anmeldungsdatum: 26.11.2006
Beiträge: 149

BeitragVerfasst am: 20.02.2007, 15:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 20.02.2007, 15:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Digga



Anmeldungsdatum: 07.01.2006
Beiträge: 48

BeitragVerfasst am: 20.02.2007, 15:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.02.2007, 16:05    Titel: Antworten mit Zitat

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 Zunge rausstrecken


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Digga



Anmeldungsdatum: 07.01.2006
Beiträge: 48

BeitragVerfasst am: 20.02.2007, 16:19    Titel: Antworten mit Zitat

mmh...

Hab jetzt leider keine Zeit es zu testen, aber danke schon mal.

gruß Digga
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 20.02.2007, 16:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Digga



Anmeldungsdatum: 07.01.2006
Beiträge: 48

BeitragVerfasst am: 20.02.2007, 16:21    Titel: Antworten mit Zitat

@Volta

Danke schön!!! lächeln
genau so soll es gemacht werden.

gruß Digga
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.02.2007, 17:07    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
alfonsospringer



Anmeldungsdatum: 27.04.2006
Beiträge: 445

BeitragVerfasst am: 20.02.2007, 19:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 20.02.2007, 19:20    Titel: Antworten mit Zitat

@TPM:
Was hat das mit Spaghetti-Code zutun? verwundert
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 20.02.2007, 19:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
alfonsospringer



Anmeldungsdatum: 27.04.2006
Beiträge: 445

BeitragVerfasst am: 20.02.2007, 19:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.02.2007, 20:00    Titel: Antworten mit Zitat

jip
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
alfonsospringer



Anmeldungsdatum: 27.04.2006
Beiträge: 445

BeitragVerfasst am: 20.02.2007, 20:05    Titel: Antworten mit Zitat

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 grinsen
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.02.2007, 20:10    Titel: Antworten mit Zitat

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. durchgeknallt .. ich hab auch immer mit meinem Space zu kämpfen.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 20.02.2007, 20:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 20.02.2007, 20:53    Titel: Antworten mit Zitat

PMedia hat Folgendes geschrieben:
...Linux...


Das sagt doch bereits alles, oder? grinsen


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 20.02.2007, 21:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.02.2007, 21:11    Titel: Antworten mit Zitat

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 Zunge rausstrecken und ohne Anwendungen sind Treiber und Hardware sinnlos durchgeknallt


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz