Fenster bewegen *erledigt*
Übersicht

MichaelBetreff: Fenster bewegen *erledigt* |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich baue derzeit eine kleine GUI im Stil eines Pseudo Betriebssystems. Wie kann ich es hinbekommen das wenn ich ein Fenster (Das als Bild vorher geladen wurde) anklicke, bewegen kann mit der Maus?
Ein bisschen Code habe ich schon aber komme nicht weiter. Code: [AUSKLAPPEN] If ImagesOverlap(Mauszeiger,MouseX(),MouseY(),Fenster,100,100)= 1 And MouseDown(1)= 1 Then
DrawImage Fenster ,MouseX(),MouseY() Hier nochmal zum verdeutlichen ein Bild: http://www.bluescreen-security.com/fenster.gif |
||
- Zuletzt bearbeitet von Michael am Mi, Apr 20, 2005 13:48, insgesamt einmal bearbeitet
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
die koordinaten des Fensters müssen in ner variablen gespeichert werden
zb BlitzBasic: [AUSKLAPPEN]
wenn mein tipp so klappt, bin ich selbst von mir überrascht, es soll aber auch nur ein kleiner denkanstoss sein. für ein schnellere abfrage, solltest du vlt BlitzBasic: [AUSKLAPPEN]
|
||
Michael |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm irgendwie klappt garnix mehr. Ich poste mal dne ganzen code. Wäre toll wenn mir das mal einer logisch einbauen könnte das ich das besser verstehe.
BlitzBasic: [AUSKLAPPEN] Graphics 800, 600, 32, 1[/code] |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, so GUI mässig sieht das noch nicht aus, aber es kann ja noch werden.... ![]() Also, du brauchst eine Varaibel für die X und eine für die Y-Position des Fensters.... Wenn du jetzt mit der Maus auf den Fensterrahmen klickst, dann veränderst du die Position des Fensters entsprechend......: BlitzBasic: [AUSKLAPPEN]
Warum brauche ich MouseSpeed und nicht einfach Mousex()?? - Weil man das Fenster an jeder stelle anklicken und verschieben kann, bei MouseX würde sonst das Fenster im an die Position der Maus springen, und das wäre nicht so konfortabel..... |
||
Michael |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also erstmal vielen Dank. Ich habe das gerade eingebaut aber ich kann trotzdem nichts bewegen oder anklicken. genauso wie vorher. | ||
Michael |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OK ich habs jetz geschafft das ich etwas bewegt nach deiner Methode. Nur springt dann das Fenster immer 100 pixel weit davon ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab zwar vorher mich noch nie mit Drag&Drop beschäftigt, bastelte mir aber nun mal sowas:
Code: [AUSKLAPPEN] Graphics 800, 600, 16, 2 SetBuffer BackBuffer() DragStart = False Repeat If MouseDown(1) And mouseInRect( wx, wy, wx + 200, wy + 200) And (Not DragStart) Then DragStart = True mxold = MouseX() myold = MouseY() wxold = wx wyold =wy End If If DragStart Then wx = wxold - (mxold - MouseX()) wy = wyold - (myold - MouseY()) If Not MouseDown(1) Then DragStart = False End If Cls Text 0, 0, MouseX() Text 0, 10, MouseY() Text 0, 20, wx Text 0, 30, wy DrawWindow(wx, wy) Flip() Until KeyDown(1) Function DrawWindow(x, y, w = 200, h = 200) Rect x, y, w, h, 0 Rect x + 5, y + 5, w - 10, h - 10, 0 Return mouseInRect (x, y, x + w, y + w) End Function Function mouseInRect (x1, y1, x2, y2) mx = MouseX() my = MouseY() If mx < x1 Then Return False If mx > x2 Then Return False If my < y1 Then Return False If my > y2 Then Return False Return True End Function Wie euch vielleicht auffällt, ist das noch sehr verbesserungs- und ausbaufähig. Neben der einen Tatsache, dass man jetzt nur immer ein Fenster verschieben kann, gibt es noch die andere, dass man bei zwei sich üpperlappenden Fenstern schon seine Probleme bekommt. Da muss man sich noch was entsprechendes ausdenken. ![]() |
||
Michael |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank. Der Code ist super. Darauus kann ich einiges lernen. Danke für eure Bemühungen. Der Thread kann geschlossen werden | ||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bestimmt habt Ihr euch gefreagt, was ich sonst so mache:
Ich schreibe Beispielprogramme!!! 8) Hier das Programm Code: [AUSKLAPPEN] ;Beispiel von SpionAtom 20.4.2005 ;Standardzeugs am Anfang Const xr = 800, yr = 600 Graphics xr, yr, 16, 2 SetBuffer BackBuffer() AppTitle("Drag&Drop (nur ohne Drop)- Beispiel von SpionAtom") Global mouse_x, mouse_y ;Das Fenster bestehen aus... Type fenster Field x ;..X-Position Field y ;..Y-Position Field w ;..Breite (Width) Field h ;..Höhe (Height) Field n ;..und Typ (ich habe 3 Typen) End Type Global f.fenster ;Ich erschaffe einige neue Fenster f.fenster = New fenster f\x = 100 f\y = 200 f\w = 50 f\h = 20 f\n = 0 f.fenster = New fenster f\x = 200 f\y = 200 f\w = 200 f\h = 200 f\n = 1 f.fenster = New fenster f\x = 50 f\y = 500 f\w = 100 f\h = 80 f\n = 2 For i = 1 To 10 f.fenster = New fenster f\x = 600 - i * 12 f\y = 100 + i * 20 f\w = i * 30 f\h = 10 f\n = 0 If i <= 5 Then f.fenster = New fenster f\x = 500 + i * 10 f\y = 500 f\w = 8 f\h = 80 f\n = 1 End If Next ;****************************************************************** dragStart = False Repeat ;Mauskoordinaten aktualisieren mouse_x = MouseX() mouse_y = MouseY() ;Prüfen, ob ein Dragvorgang gestartet wird If (MouseDown(1)) And (Not dragStart) Then For f = Each fenster If mouseInRect(f\x, f\y, f\x + f\w, f\y + f\h) Then af.fenster = f dragStart = True oldmx = mouse_x oldmy = mouse_y oldfx = f\x oldfy = f\y End If Next End If ;Das entsprechende Fenster Draggen und Droppen If dragStart Then af\x = oldfx - oldmx + mouse_x af\y = oldfy - oldmy + mouse_y If Not MouseDown(1) Then dragStart = False End If ;Alles zeichnen Cls drawAllFenster() Flip() Until KeyDown(1) End ;****************************************************************** ;Diese Funktion zeichnet alle Fenster in der Reihenfolge, in der sie in der Type-Liste stehen (also in der ;Reihenfolge, in der sie erschaffen sind) Function drawAllFenster() For f = Each fenster drawFenster f\x, f\y, f\w, f\h, f\n Next End Function ;Diese Funktion malt ein Fenster. Sie benötigt Position(x,y), Ausmaße(w,h) sowie den Typ(n) Function drawFenster(x, y, w, h, n = 0) Select n Case 1: Color 0, 255, 0 Rect x, y, w, h, 1 Color 255, 0, 0 Rect x + 2, y + 2, w - 4, h - 4, 1 Color 255, 255, 255 Rect x, y, w, h, 0 Rect x + 2, y + 2, w - 4, h - 4, 0 Case 2 Color 255, 255, 0 Rect x, y, w, h, 1 Color 0, 255, 255 Oval x, y, w, h, 1 Color 255, 255, 255 Rect x, y, w, h, 0 Oval x, y, w, h, 0 Default: Color 255, 0, 255 Rect x, y, w, h, 1 Color 255, 255, 255 Rect x, y, w, h, 0 End Select End Function ;Diese Funktion prüft, ob die Maus sich innerhalb des angegebenen Rechtecks befindet und liefert ;entsprechend true oder false zurück Function mouseInRect (x1, y1, x2, y2) If mouse_x < x1 Then Return False If mouse_x > x2 Then Return False If mouse_y < y1 Then Return False If mouse_y > y2 Then Return False Return True End Function Und ich habe es sogar geschafft einen Roboter aus den Rechtecken zu machen . Schade, wenn ich Webspace hätte wrde ich es euch zeigen. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group