CraeteWindow Wegmachen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: CraeteWindow Wegmachen

BeitragMi, März 07, 2007 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir in BB3D die Function "CreateWindow" ( aus B+ ) selber geschrieben, also fast ...

Code: [AUSKLAPPEN]


Function CreateWindow$(title$,x,y,width,height)
;TaskLeiste :

For i = 20 To 1 Step -1

Color 0,0,((i*10))

Rect x,y+i,width,1

Next


If MouseY() > y And MouseY() < y+20 Then
If MouseX() > x+width-20 And MouseX() < x+width-20+15 Then
DrawImage XK(2),x+width-20,y+5
If MouseDown(1) Then X_Ende = True
Else
DrawImage XK(1),x+width-20,y+5
EndIf
If MouseX() > x And MouseX() < x+width Then
If MouseDown(1) Then Schieben = True
EndIf
Else
DrawImage XK(1),x+width-20,y+5
EndIf
If X_Ende = True Then
DrawImage XK(3),x+width-20,y+5
If Not MouseDown(1) Then X_Ende = False
EndIf

Color 255,255,255
If Len(title$) > width/6 Then title$ = Mid(title$,1,Len(title$))
Text x+20,y+4,title$

;Fenster :

Color 100,100,100
Rect x,y+20,width,height,1
Color 0,0,200
Rect x,y+20,width,height,0

Return x+"."+y+"."+width+"."+height+"."+title$

End Function


Wie kann ich das machen, wenn man auf das "X" drückt ( In dem falle das Array "XK(1oder2)" ) Das dann das fenster wech geht ?

Und Noch was : Wie mach ich das, wenn der Title größer als die Fenstergröße ist, das man dann die buchstaben, die zuviel sind, löscht ?

Danke schonmal !

mfg und thx

Crack
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragMi, März 07, 2007 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
- Mach dein Fenster als Type, wenn Du es schliesst lösch es mit ql:delete.
- ql:viewport
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ToeB

BeitragMi, März 07, 2007 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das ViewPort ist ja schön und gut, aber wenn ich das da hinschreibe, dann malt der nur noch die "TaskLeite" uns sonst nichts !

Code: [AUSKLAPPEN]

Function CreateWindow$(title$,x,y,width,height)
w.w = New w
w\x = x
w\y = y
w\width = width
w\height = height
w\title$ = title$
End Function



Function Window()
For w.w = Each w
;TaskLeiste :
If w.w <> Null
For i = 20 To 1 Step -1

Color 0,0,((i*10))

Rect w\x,w\y+i,w\width,1

Next


If MouseY() > w\y And MouseY() < w\y+20 Then
If MouseX() > w\x+w\width-20 And MouseX() < w\x+w\width-20+15 Then
DrawImage XK(2),w\x+w\width-20,w\y+5
If MouseDown(1) Then w\ende = True
Else
DrawImage XK(1),w\x+w\width-20,w\y+5
EndIf
If MouseX() > w\x And MouseX() < w\x+w\width Then
If MouseDown(1) Then w\schieben = True
EndIf
Else
DrawImage XK(1),w\x+w\width-20,w\y+5
EndIf
If w\ende = True Then
DrawImage XK(3),w\x+w\width-20,w\y+5
If Not MouseDown(1) Then Delete w.w
EndIf

;Fenster :

Color 100,100,100
Rect w\x,w\y+20,w\width,w\height,1
Color 0,0,200
Rect w\x,w\y+20,w\width,w\height,0

Color 255,255,255
w\mox = MouseX()
w\moy = MouseY()
EndIf
Color 255,255,255
Viewport w\x,w\y,w\width,20
Text w\x+20,w\y+4,w\title$

Next
End Function
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Yogu

BeitragMi, März 07, 2007 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Crack93 hat folgendes geschrieben:
Zitat:
Und Noch was : Wie mach ich das, wenn der Title größer als die Fenstergröße ist, das man dann die buchstaben, die zuviel sind, löscht ?

Setze die passende Font, speicher den Text in einer Variable (z.B. Titel$) und frage dann die Länge über StringWidth ab (Laenge = StringWidth(Titel$), vergleiche das mit der maximalen Länge und wenn es zu lang ist, gehe in einer For-Schleife immer abwärts ein Buchstaben weniger (Left(Titel$, i)). Beachte auch die Länge der ... am Schluss, füge sie einfach dem abgeschnittenen Titel hinzu.

Also, zusammengefasst:
Code: [AUSKLAPPEN]
;Grafikmodus auf kleine Auflösung, Fenstermodus
Graphics 200,50,16,2
;Titel setzen
Titel$ = "Viel zu langer Titeltext, der durch drei Punkte abgekürzt werden muss"
;Schriftart laden
Font = LoadFont("MS Sans Serif", 14,True)
SetFont Font

;Hauptschleife
Repeat
  ;Text berechnen
  Txt$ = GetTitel(Titel)
  ;Titel anzeigen
  Text 4,4,Txt$
  Flip
  ;Mit Tastatur skalieren
  If KeyDown(203) Then Graphics GraphicsWidth()-2, GraphicsHeight(), 16,2
  If KeyDown(205) Then Graphics GraphicsWidth()+2, GraphicsHeight(), 16,2
  ;Per Mausdruck beenden
  If MouseDown(1) Then End
  If KeyDown(1) Then End
Forever

Function GetTitel$(Titel$)
  Local Laenge, i
  ;Wenn Titel zu lang (-10 wegen Rand)
  If StringWidth(Titel$) > GraphicsWidth()-10 Then
    ;Länge speichern
    Laenge = Len(Titel)
    ;In einer Schleife den Titel immer mehr kürzen
    For i = Laenge To 0 Step -1
      ;Neuen Titel speichern
      Titel = Left(Titel,i)
      ;Wenn Titellänge ok
      If StringWidth(Titel+"...") <= GraphicsWidth()-8 Then
        ;Punkte hinzufügen, Schleife verlassen
        Titel = Titel + "..." : Exit
      End If
    Next
  End If
  Return Titel$
End Function

BladeRunner

Moderator

BeitragMi, März 07, 2007 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbstredend musst du Viewport nach der Textausgabe wieder auf den gesamten Bildschirm setzen.... Rolling Eyes
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ToeB

BeitragMi, März 07, 2007 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
oh.... Embarassed mist, binn ich dumm !

Jetzt hab ich das gemacht mit dem "Delete w.w".
Aber da kommt imma nur Zitat:
Illigal Memory Adress
???

Code: [AUSKLAPPEN]
Function CreateWindow$(title$,x,y,width,height)
w.w = New w
w\x = x
w\y = y
w\width = width
w\height = height
w\title$ = title$
End Function



Function Window()
For w.w = Each w
;TaskLeiste :
If w.w <> Null
For i = 20 To 1 Step -1

Color 0,0,((i*10))

Rect w\x,w\y+i,w\width,1

Next


If MouseY() > w\y And MouseY() < w\y+20 Then
If MouseX() > w\x+w\width-20 And MouseX() < w\x+w\width-20+15 Then
DrawImage XK(2),w\x+w\width-20,w\y+5
If MouseDown(1) Then w\ende = True
Else
DrawImage XK(1),w\x+w\width-20,w\y+5
EndIf
If MouseX() > w\x And MouseX() < w\x+w\width Then
If MouseDown(1) Then w\schieben = True
EndIf
Else
DrawImage XK(1),w\x+w\width-20,w\y+5
EndIf
If w\ende = True Then
If Not MouseDown(1) Then Delete w.w
DrawImage XK(3),w\x+w\width-20,w\y+5
EndIf
Color 255,255,255
Viewport w\x,w\y,w\width-25,20
Text w\x+20,w\y+4,w\title$
Viewport 0,0,800,600


;Fenster :

Color 100,100,100
Rect w\x,w\y+20,w\width,w\height,1
Color 0,0,200
Rect w\x,w\y+20,w\width,w\height,0

Color 255,255,255
w\mox = MouseX()
w\moy = MouseY()
EndIf

Next
End Function
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Tankbuster

BeitragMi, März 07, 2007 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
If w\ende = True Then
If Not MouseDown(1) Then Delete w.w
DrawImage XK(3),w\x+w\width-20,w\y+5
EndIf

Wie soll er das w\x denn finden, wenn "w" kurz vorher gelöscht wurde^^
Twitter
Download Jewel Snake!
Windows|Android

ToeB

BeitragMi, März 07, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja aba wenn ich es geändert hab, dann meckert der imma noch !


~Edit~

Okay, funzt !
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group