Mini-Grafik-Demo als Aboutrequester

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Mini-Grafik-Demo als Aboutrequester

Beitrag von scholly »

moin, moin...

Seit Weihnachten hab ich immer mal wieder geguckt/gesucht, was es
denn so Interessantes gibt, das man in eigenen Programmen für die
eigentlich doch meist recht drögen Messagebox-About-Requester als
Ersatz zum Aufpeppen nehmen könnte.

Meine ersten bescheidenen Ergebnisse folgen konsequenterweise.

Ich hab den Weg der Gosub-Routine gewählt, weil es damit IMHO für
andere am einfachsten ist, das About zu testen, anzupassen und
dann in das eigene Proggi zu übernehmen.

Die Variablen sollten alle so benannt sein, daß sie nach bestem
Einschätzen kaum mit fremdem Code collidieren sollten. Auch die
konsequente Verwendung von #PB_any zielt darauf ab.

Desweiteren sollten nur solche externen Elemente (z.B. Images)
verwendet werden, die mit PB oder dem Code-Archiv mitgeliefert
werden; damit sollte sichergestellt sein, daß der Code bei den
Meisten von Euch funktioniert.

Aus demselben Grund habe ich auf Effekt-Paket wie z.B. von EPyx
die FXLib verzichtet und versuche alle ausschließlich mit den
Bordmitteln von PB zu realisieren.

Meine Routinen kann jeder benutzen/verändern wie er will,
aber dann bitte meine Texte rausnehmen.
Ich hoffe es kommen noch bessere Beiträge von Euch hinzu, sodaß
sich nach und nach eine interessante Auswahl ergibt ;)

have fun...
Zuletzt geändert von scholly am 24.03.2008 01:35, insgesamt 4-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

arng_ugs_01

Beitrag von scholly »

; About TNG Requester scholly 01 Version 1.1
; by scholly
; (intern arng_ugs_01.pb)
; WindowsXP(SP2), PB 4.10
;
; Textgadgets + horizontaler Scrolltext direkt aufs Fenster gezeichnet

Code: Alles auswählen

; About TNG Requester scholly 01 Version 1.1
; by scholly
; (intern arng_ugs_01.pb)
; WindowsXP(SP2), PB 4.10
; 
; Textgadgets + horizontaler Scrolltext direkt aufs Fenster gezeichnet

Gosub ANG_1
End

ANG_1:
;#########################################################################################
;{
;Als erstes einen Font festlegen, der auf den meisten System vorhanden sein sollte. Wenn 
;wer eine bessere/aktuellere Liste als http://www.kayskreations.net/fonts/fonttb.html hat, 
;bitte mitteilen

ar1_font_id      = LoadFont(#PB_Any,"Arial", 32, #PB_Font_Bold)
ar1_fontclr      = #Black

ar1_quit = #False

ar1_win_titel.s  = "About-Requester - TNG "
ar1_win_width    = 400
ar1_win_height   = 200  
 
ar1_win_ID = OpenWindow(#PB_Any,0,0,ar1_win_width,ar1_win_height,ar1_win_titel,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CreateGadgetList(WindowID(ar1_win_ID)) 

TextGadget(#PB_Any, 0, 10, ar1_win_width, 20, "PureBoard Requester Suite",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 40, ar1_win_width, 20, "schollys Requester 1 Version 0815",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 70, ar1_win_width, 20, "Copyleft März 2008",#PB_Text_Center) 

ar1_scrtext_1x.s = " (: Credits gehen an alle, die in den PureBoards den Anfängern so gut helfen :) "

;ist der Scrolltext kürzer als das Fenster breit, den text mehr als 1x wiederholen
ar1_scrolltext.s = ar1_scrtext_1x + ar1_scrtext_1x

;hier kann die Scrollgeschwindigkeit eingestellt werden....
ar1_delaytime =10

;nun brauchen wir die Pixellänge des einfachen scrolltextes und die Farbe des Fensterhintergrundes
StartDrawing(WindowOutput(ar1_win_ID))
  DrawingFont(FontID(ar1_font_id))
  ar1_st_len.l  = TextWidth(ar1_scrtext_1x)
  ar1_win_bck.l = Point(1,1)
StopDrawing()

ar1_drawoffset_x = 1
ar1_drawoffset_y = 100

Repeat

  ar1_drawoffset_x - 1
  If ar1_drawoffset_x = -ar1_st_len
    ar1_drawoffset_x = 0
  EndIf

  StartDrawing(WindowOutput(ar1_win_ID))
    DrawingFont(FontID(ar1_font_id))
    DrawText(ar1_drawoffset_x,ar1_drawoffset_y,ar1_scrolltext,ar1_fontclr,ar1_win_bck.l)
  StopDrawing()
  
  Delay(ar1_delaytime)

  ar1_EventID = WaitWindowEvent(1)
  If EventWindow() = ar1_win_ID
    If ar1_EventID = #PB_Event_CloseWindow
      ar1_quit = #True
      CloseWindow(ar1_win_ID)
    EndIf
  EndIf

Until ar1_quit = #True

;}
Return; ANG_1 ###########################################################################
Ich frag mich hierbei alleredings, warum da (nur bei mir ?) so weiße Spratzer auftauchen und ob/wie man die abstellen kann.

[Edit 1] Hintergrundfarbe wird nicht jedesmal in der Schleife ermittelt.
Zuletzt geändert von scholly am 14.03.2008 22:29, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

arng_ugs_02

Beitrag von scholly »

; About TNG Requester scholly 02 Version 1.0
; by scholly
; (intern arng_ugs_02.pb)
; WindowsXP(SP2), PB 4.10
;
; Textgadgets + horizontaler Scrolltext per WindowedScreen

Code: Alles auswählen

; About TNG Requester scholly 02 Version 1.0
; by scholly
; (intern arng_ugs_02.pb)
; WindowsXP(SP2), PB 4.10
; 
; Textgadgets + horizontaler Scrolltext per WindowedScreen 

Gosub ANG_2
End

ANG_2:
;#########################################################################################
;{
;Als erstes einen Font festlegen, der auf den meisten System vorhanden sein sollte. Wenn 
;wer eine bessere/aktuellere Liste als http://www.kayskreations.net/fonts/fonttb.html hat, 
;bitte mitteilen

InitSprite()

ar2_font_size    = 32
ar2_font_id      = LoadFont(#PB_Any,"Arial", ar2_font_size)
ar2_fontclr      = #Black

ar2_quit = #False

ar2_win_titel.s  = "About-Requester - TNG "
ar2_win_width    = 400
ar2_win_height   = 200  
 
ar2_win_ID = OpenWindow(#PB_Any,0,0,ar2_win_width,ar2_win_height,ar2_win_titel,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CreateGadgetList(WindowID(ar2_win_ID)) 

TextGadget(#PB_Any, 0, 10, ar2_win_width, 20, "PureBoard Requester Suite",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 40, ar2_win_width, 20, "schollys Requester 2 Version 4711",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 70, ar2_win_width, 20, "Copyleft März 2008",#PB_Text_Center) 

OpenWindowedScreen(WindowID(ar2_win_ID), 0, 100, ar2_win_width, ar2_font_size*2, 0, 0, 0)

ar2_scrtext_1x.s = " (: Credits gehen an alle, die in den PureBoards den Anfängern so lieb helfen :) "

;ist der Scrolltext kürzer als das Fenster breit, den text mehr als 1x wiederholen
ar2_scrolltext.s = ar2_scrtext_1x + ar2_scrtext_1x

;hier kann die Scrollgeschwindigkeit eingestellt werden....
ar2_delaytime =25

;nun brauchen wir die Pixellänge des einfachen scrolltextes
StartDrawing(WindowOutput(ar2_win_ID))
  DrawingFont(FontID(ar2_font_id))
  ar2_st_len.l = TextWidth(ar2_scrtext_1x)
  ar2_st_hi.l  = TextHeight(ar2_scrtext_1x)
  ar2_winbgc.l = Point(1,1)
StopDrawing()

ar2_drawoffset_x = ar2_win_width
ar2_drawoffset_y = ar2_font_size/2

Repeat

  ClearScreen(ar2_winbgc.l)

  ar2_drawoffset_x - 1 ;hier kann die Scrollgeschwindigkeit auch eingestellt werden....
  If ar2_drawoffset_x < -ar2_st_len
    ar2_drawoffset_x = 0
  EndIf

  StartDrawing(ScreenOutput())
    DrawingFont(FontID(ar2_font_id))
    DrawText(ar2_drawoffset_x,ar2_drawoffset_y,ar2_scrolltext,ar2_fontclr,ar2_winbgc.l)
  StopDrawing()

  FlipBuffers(0)

  Delay(ar2_delaytime)

  ar2_EventID = WaitWindowEvent(1)
  If EventWindow() = ar2_win_ID
    If ar2_EventID = #PB_Event_CloseWindow
      ar2_quit = #True
      CloseScreen()
      CloseWindow(ar2_win_ID)
    EndIf
  EndIf
    
Until ar2_quit = #True

;}
Return; ANG_1 ###########################################################################
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

arng_ugs_03

Beitrag von scholly »

; About TNG Requester scholly 03 Version 1.0
; by scholly
; (intern arng_ugs_03.pb)
; WindowsXP(SP2), PB 4.10
;
; Textgadgets + horizontaler Scrolltext im WindowedScreen bouncen

Code: Alles auswählen

; About TNG Requester scholly 03 Version 1.0
; by scholly
; (intern arng_ugs_03.pb)
; WindowsXP(SP2), PB 4.10
; 
; Textgadgets + horizontaler Scrolltext im WindowedScreen bouncen

Gosub ANG_3
End

ANG_3:
;#########################################################################################
;{
;Als erstes einen Font festlegen, der auf den meisten System vorhanden sein sollte. Wenn 
;wer eine bessere/aktuellere Liste als http://www.kayskreations.net/fonts/fonttb.html hat, 
;bitte mitteilen

InitSprite()

ar3_font_size    = 24
ar3_font_id      = LoadFont(#PB_Any,"Arial", ar3_font_size)
ar3_fontclr      = #Blue

ar3_quit = #False

ar3_win_titel.s  = "About-Requester - TNG "
ar3_win_width    = 400
ar3_win_height   = 200  
 
ar3_win_ID = OpenWindow(#PB_Any,0,0,ar3_win_width,ar3_win_height,ar3_win_titel,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CreateGadgetList(WindowID(ar3_win_ID)) 

TextGadget(#PB_Any, 0, 10, ar3_win_width, 20, "PureBoard Requester Suite",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 40, ar3_win_width, 20, "schollys Requester 3 Version 007",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 70, ar3_win_width, 20, "Copyleft März 2008",#PB_Text_Center) 

OpenWindowedScreen(WindowID(ar3_win_ID), 0, 100, ar3_win_width, ar3_font_size*2, 0, 0, 0)

ar3_scrtext_1x.s = "(: just - bouncing :)"

;nun brauchen wir die Pixellänge des einfachen scrolltextes
StartDrawing(WindowOutput(ar3_win_ID))
  DrawingFont(FontID(ar3_font_id))
  ar3_st_len.l = TextWidth(ar3_scrtext_1x)
  ar3_st_hi.l  = TextHeight(ar3_scrtext_1x)
  ar3_winbgc.l = Point(1,1)
StopDrawing()

;ist der Scrolltext länger als das Fenster breit, meckern
If ar3_st_len > ar3_win_width / 3 * 2
  MessageRequester("Obacht !!", "Scrolltext zu lang zum Bouncen") 
  End
EndIf

ar3_drawoffset_x = ar3_win_width
ar3_drawoffset_y = ar3_font_size/4 ; hier den vertikalen Offset im WindowScreen anpassen

ar3_scrollrichtung.s = "links"

;hier kann die Scrollgeschwindigkeit generell eingestellt werden...
ar3_delaytime = 10

Repeat

  ClearScreen(ar3_winbgc.l)

  If ar3_scrollrichtung = "links"
    ar3_drawoffset_x - 4 ; Scrollgeschwindigkeit nach links einstellen....
    If ar3_drawoffset_x < 0
      ar3_scrollrichtung = "rechts"
    EndIf
  ElseIf ar3_scrollrichtung = "rechts"
    ar3_drawoffset_x + 2 ; Scrollgeschwindigkeit nach rechts einstellen....
    If ar3_drawoffset_x > ar3_win_width - ar3_st_len + 3
      ar3_scrollrichtung = "links"
    EndIf
  EndIf

  StartDrawing(ScreenOutput())
    DrawingFont(FontID(ar3_font_id))
    DrawText(ar3_drawoffset_x,ar3_drawoffset_y,ar3_scrtext_1x,ar3_fontclr,ar3_winbgc.l)
  StopDrawing()
  
  Delay(ar3_delaytime)
  
  FlipBuffers()

  ar3_EventID = WaitWindowEvent(1)
  If EventWindow() = ar3_win_ID
    If ar3_EventID = #PB_Event_CloseWindow
      ar3_quit = #True      
    EndIf
  EndIf 
Until ar3_quit = #True

CloseScreen()
CloseWindow(ar3_win_ID)
;}
Return; ANG_1 ###########################################################################
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

arng_ugs_04

Beitrag von scholly »

; About TNG Requester scholly 04 Version 1.0
; by scholly
; (intern arng_ugs_04.pb)
; WindowsXP(SP2), PB 4.10
;
; Textgadgets + horizontaler Scrolltext mit Textur im WindowedScreen per ExtFloodFill_()

Code: Alles auswählen

; About TNG Requester scholly 04 Version 1.0
; by scholly
; (intern arng_ugs_04.pb)
; WindowsXP(SP2), PB 4.10
; 
; Textgadgets + horizontaler Scrolltext mit Textur im WindowedScreen per ExtFloodFill_()

Gosub ANG_4
End

ANG_4:
;#########################################################################################
;{
;Als erstes einen Font festlegen, der auf den meisten System vorhanden sein sollte. Wenn 
;wer eine bessere/aktuellere Liste als http://www.kayskreations.net/fonts/fonttb.html hat, 
;bitte mitteilen

InitSprite()

ar4_font_size    = 64
ar4_font_id      = LoadFont(#PB_Any,"Verdana", ar4_font_size,#PB_Font_Bold)
ar4_fontclr      = #White

ar4_quit = #False

ar4_win_titel.s  = "About-Requester - TNG "
ar4_win_width    = 400
ar4_win_height   = 250 
 
ar4_win_ID = OpenWindow(#PB_Any,0,0,ar4_win_width,ar4_win_height,ar4_win_titel,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

CreateGadgetList(WindowID(ar4_win_ID)) 

TextGadget(#PB_Any, 0, 10, ar4_win_width, 20, "PureBoard Requester Suite",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 40, ar4_win_width, 20, "schollys Requester 4 Version 42",#PB_Text_Center) 
TextGadget(#PB_Any, 0, 70, ar4_win_width, 20, "Copyleft März 2008",#PB_Text_Center) 

OpenWindowedScreen(WindowID(ar4_win_ID), 0, 100, ar4_win_width, ar4_font_size*2, 0, 0, 0)

ar4_scrtext_1x.s = "(: Credits an hjbremer für seine ExtFloodFill_()-Routine :)"

;ist der Scrolltext kürzer als das Fenster breit, den text mehr als 1x wiederholen
ar4_scrolltext.s = ar4_scrtext_1x + ar4_scrtext_1x

;hier kann die Scrollgeschwindigkeit eingestellt werden....
ar4_delaytime = 1

;nun brauchen wir u.a. die Pixellänge des einfachen scrolltextes
StartDrawing(WindowOutput(ar4_win_ID))
  DrawingFont(FontID(ar4_font_id))
  ar4_st_len.l = TextWidth(ar4_scrtext_1x)
  ar4_st_hi.l  = TextHeight(ar4_scrtext_1x)
  ar4_winbgc.l = Point(1,1)
  
  ar4_texturewidth.l = TextWidth(ar4_scrolltext)
StopDrawing()

;hier kann natürlich eine beliebige, bei Euch vorhandene Texture geladen werden 
;als Texture-Beispiel benutze ich ein JPEG-Bild aus den PB-Beispielen
UseJPEGImageDecoder()
ar4_temp_img_id = LoadImage(#PB_Any, #PB_Compiler_Home+"examples\sources\Data\clouds.jpg")

ar4_drawoffset_x = 0
ar4_drawoffset_y = 0

;Image in Scrolltext-größe erstellen
ar4_texture_img_id = CreateImage(#PB_Any, ar4_texturewidth, ar4_st_hi)

StartDrawing(ImageOutput(ar4_texture_img_id))
  DrawingFont(FontID(ar4_font_id))
  DrawText(ar4_drawoffset_x,ar4_drawoffset_y,ar4_scrolltext,ar4_fontclr,ar4_winbgc.l)
StopDrawing()

;#########################################################################################
; Routine: hjbremer - http://www.purebasic.fr/german/viewtopic.php?t=15794&start=6
ar4_dc=StartDrawing(ImageOutput(ar4_texture_img_id))
   
  ar4_ID = CopyImage_(ImageID(ar4_temp_img_id), #IMAGE_BITMAP, 40, 40, 0)
  ar4_brush = CreatePatternBrush_(ar4_ID)
  DeleteObject_(ar4_ID)

  For ar4_line = 1 To ar4_st_hi
    For ar4_column = 1 To ar4_texturewidth
      ar4_mask_color = Point(ar4_column,ar4_line)     
      If ar4_mask_color = ar4_fontclr  ;nur dann brauchen wir das Muster
        SelectObject_(ar4_dc,ar4_brush)
        ExtFloodFill_(ar4_dc,ar4_column,ar4_line,ar4_fontclr,#FLOODFILLSURFACE)
      EndIf
    Next ar4_column
  Next ar4_line

StopDrawing()
;#########################################################################################

;hier kann die Scrollgeschwindigkeit eingestellt werden....
ar4_delaytime = 25
ar4_drawoffset_x = ar4_win_width

Repeat

  ClearScreen(ar4_winbgc.l)

  ar4_drawoffset_x - 3 ;hier kann die Scrollgeschwindigkeit auch eingestellt werden....
  If ar4_drawoffset_x < -ar4_st_len
    ar4_drawoffset_x = 0
  EndIf

  StartDrawing(ScreenOutput())
    DrawImage(ImageID(ar4_texture_img_id), ar4_drawoffset_x,ar4_drawoffset_y) 
  StopDrawing()
  
  Delay(ar4_delaytime)

  ar4_EventID = WindowEvent()
  If EventWindow() = ar4_win_ID
    If ar4_EventID = #PB_Event_CloseWindow
      ar4_quit = #True
    EndIf
  EndIf
  
  FlipBuffers()
  
Until ar4_quit = #True
CloseScreen()
CloseWindow(ar4_win_ID)

;}
Return; ANG_1 ###########################################################################
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

arng_ugs_05

Beitrag von scholly »

; About TNG Requester scholly 05 Version 1.1
; by scholly
; (intern arng_ugs_05.pb)
; WindowsXP(SP2), PB 4.10
;
; Logo, Text und Button

Code: Alles auswählen

; About TNG Requester scholly 05 Version 1.1
; by scholly
; (intern arng_ugs_05.pb)
; WindowsXP(SP2), PB 4.10
; 
; Logo, Text und Button

Gosub ANG_5
End

ANG_5:
;#########################################################################################
;{
ar5_win_titel.s = "About-Requester - TNG "
ar5_win_width   = 300
ar5_win_height  = 265
 
ar5_quit        = #False

ar5_font_big_id = LoadFont(#PB_Any,"Arial", 32, #PB_Font_Bold)

ar5_font_sml_id = LoadFont(#PB_Any,"Arial", 9,#PB_Font_Bold)

ar5_logofile.s  = #PB_Compiler_Home+"examples\sources\Data\Geebee2.bmp"
ar5_logoimg_id  = LoadImage(#PB_Any,ar5_logofile) 
ar5_logoback    = RGB(255,0,255)

ar5_win_ID      = OpenWindow(#PB_Any,0,0,ar5_win_width,ar5_win_height,ar5_win_titel,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
;Hintergrund an das Logo anpassen
SetWindowColor(ar5_win_ID, RGB(255,0,255)) 
CreateGadgetList(WindowID(ar5_win_ID)) 

ar5_logogdgt_id = ImageGadget(#PB_Any,ar5_win_width - ImageHeight(ar5_logoimg_id),0, #PB_Ignore,#PB_Ignore, ImageID(ar5_logoimg_id))
ar5_blanker_id  = TextGadget(#PB_Any,0,ImageHeight(ar5_logoimg_id) + 100,ar5_win_width, 40,"")
ar5_button_id   = ButtonGadget(#PB_Any,50,ImageHeight(ar5_logoimg_id) + 105,ar5_win_width - 100, 30,"bye, bye (^_^)/~~")

Repeat
StartDrawing(WindowOutput(ar5_win_ID))
  DrawingFont(FontID(ar5_font_big_id))
  DrawText(10,ImageHeight(ar5_logoimg_id) -40,"About NG",#Red,ar5_logoback)
  
  DrawingFont(FontID(ar5_font_sml_id))
  DrawText(10,ImageHeight(ar5_logoimg_id)+5, "Version 5.0815",#White,ar5_logoback)
    
  DrawText(10,ImageHeight(ar5_logoimg_id)+25, "PureBoard Requester Suite",#Black,ar5_logoback) 
  DrawText(10,ImageHeight(ar5_logoimg_id)+40, "schollys Requester 5 ",#Black,ar5_logoback) 
  DrawText(10,ImageHeight(ar5_logoimg_id)+55, "Copyleft März 2008, no rights reserved",#Black,ar5_logoback)
  DrawText(10,ImageHeight(ar5_logoimg_id)+70, "Nutzung auf eigenes Risiko (^o^)",#Black,ar5_logoback)
StopDrawing()


  ar5_EventID = WaitWindowEvent()
  If EventWindow() = ar5_win_ID
    If ar5_EventID = #PB_Event_CloseWindow
      ar5_quit = #True
    ElseIf EventGadget() = ar5_button_id
      ar5_quit = #True
    EndIf
  EndIf
  
Until ar5_quit = #True
CloseWindow(ar5_win_ID)

;}
Return; ANG_1 ###########################################################################
Zuletzt geändert von scholly am 14.03.2008 23:16, insgesamt 2-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

arng_ugs_06

Beitrag von scholly »

; About TNG Requester scholly 06 Version 1.0
; by scholly
; (intern arng_ugs_06.pb)
; WindowsXP(SP2), PB 4.10
;
; Logo, Text, Button, Sprite, Sprite3D, Scrolling und Transparenz

Code: Alles auswählen

; About TNG Requester scholly 06 Version 1.0
; by scholly 
; (intern arng_ugs_06.pb)
; WindowsXP(SP2), PB 4.10
;
; Logo, Text, Button, Sprite, Sprite3D, Scrolling und Transparenz


Gosub ANG_6
End

ANG_6:
;#########################################################################################
;{
InitSprite()
InitSprite3D()

ar6_win_titel.s = "About-Requester - TNG "
ar6_win_width   = 300
ar6_win_height  = 465
 
ar6_quit        = #False

ar6_font_big_nr = LoadFont(#PB_Any,"Arial", 32, #PB_Font_Bold)

ar6_font_sml_nr = LoadFont(#PB_Any,"Arial", 9,#PB_Font_Bold)

ar6_logofile.s  = #PB_Compiler_Home+"examples\sources\Data\Geebee2.bmp"

ar6_win_ID      = OpenWindow(#PB_Any,0,0,ar6_win_width,ar6_win_height,ar6_win_titel,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
 
CreateGadgetList(WindowID(ar6_win_ID)) 

ar6_but_1_id    = ButtonGadget(#PB_Any,10,ar6_win_height -35,50, 25,"Credits")
ar6_but_2_id    = ButtonGadget(#PB_Any,ar6_win_width-110,ar6_win_height -35,100, 25,"bye, bye (^_^)/~~")

OpenWindowedScreen(WindowID(ar6_win_ID),0,0,ar6_win_width,ar6_win_height -55,0,0,0)

; Das Schmetterlings(??)-Logo holen
ar6_sprite1_nr  = LoadSprite(#PB_Any,ar6_logofile) 
TransparentSpriteColor(ar6_sprite1_nr, RGB(255,0,255))

;Sprite-Maße holen
StartDrawing(SpriteOutput(ar6_sprite1_nr))
   ar6_spr1_height = SpriteHeight(ar6_sprite1_nr)
   ar6_spr1_width  = SpriteWidth(ar6_sprite1_nr)
StopDrawing()

StartDrawing(ScreenOutput())
  For ar6_linecounter = 0 To 128
    Box(0,ar6_linecounter,ar6_win_width, 255-ar6_linecounter*2,RGB(255-ar6_linecounter/2,255-ar6_linecounter/2,255-ar6_linecounter/2))
  Next ar6_linecounter
StopDrawing()  

ar6_sprite2_nr  = CreateSprite(#PB_Any,ar6_win_width,250)
TransparentSpriteColor(ar6_sprite2_nr, #White)

StartDrawing(SpriteOutput(ar6_sprite2_nr))
  FillArea(1, 1, #White,#White)
  DrawingFont(FontID(ar6_font_big_nr))
  DrawText(10,5,"About NG",#Red,#White)
  
  DrawingFont(FontID(ar6_font_sml_nr))
  DrawText(10, 50, "Version 6.4711",RGB(128,128,128),#White)
    
  DrawText(10, 70, "PureBoard Requester Suite",#Black,#White) 
  DrawText(10, 85, "schollys Requester 6 ",#Black,#White) 
  DrawText(10,110, "Copyleft März 2008, no rights reserved",#Black,#White)
  DrawText(10,125, "Nutzung auf eigenes Risiko (^o^)",#Black,#White)
  
  DrawText(10,145, "Treffen sich zwei Planeten.",#Black,#White)
  DrawText(10,160, "Fragt der Erste: ",#Blue,#White)
  DrawText(10,175, "  Wie gehts denn so? ",#Blue,#White)
  DrawText(10,190, "Antwortet der Zweite:",#Black,#White)
  DrawText(10,205, "  Nich so gut, ich hab Homo Sapiens (*_*)",#Black,#White)
  DrawText(10,220, "Sagt der Erste:",#Blue,#White)
  DrawText(10,235, "  Wart ab, das geht vorbei....",#Blue,#White)
StopDrawing()

; Auf Seite 2 sollen Credits vertikal gescrollt werden, Namen horizontal zentiert
; Dafür wandern Creditoren-Name und die Länge des Strings in eine Struktur

Structure ar6_creditor
  text.s
  width.l
EndStructure

Global Dim ar6_zeile.ar6_creditor(25)

ar6_zeile(0)\text   = "Lurchi"
ar6_zeile(1)\text   = "Mäckie"
ar6_zeile(2)\text   = "Goldbaron"
ar6_zeile(3)\text   = "Silberzweig"
ar6_zeile(4)\text   = "Otto"
ar6_zeile(5)\text   = "Hasenfuß"
ar6_zeile(6)\text   = "Pumpelsteinchen"
ar6_zeile(7)\text   = "Kleiner Mann"
ar6_zeile(8)\text   = "Knollennase"
ar6_zeile(9)\text   = "Klein Erna"
ar6_zeile(10)\text  = "Tünnes"
ar6_zeile(11)\text  = "Schäl"
ar6_zeile(12)\text  = "Hoppeditz"
ar6_zeile(13)\text  = "Ärnie"
ar6_zeile(14)\text  = "Bärt"
ar6_zeile(15)\text  = "Dr. Kombüse"
ar6_zeile(16)\text  = "Ärlkönig"
ar6_zeile(17)\text  = "Knuddelmaus"
ar6_zeile(18)\text  = "Baver Hans"
ar6_zeile(19)\text  = "Dora Dussel"
ar6_zeile(20)\text  = "Bonsei Master"
ar6_zeile(21)\text  = "Vogelscheuche"
ar6_zeile(22)\text  = "     ";Dummy
ar6_zeile(23)\text  = "-----";Dummy damit die Wiederholung sichtbar wird
ar6_zeile(24)\text  = "     ";Dummy

; Stringlängen und notwendige Image-Höhe ermitteln
ar6_scl_img_height = 0
StartDrawing(ScreenOutput())
  DrawingFont(FontID(ar6_font_sml_nr))
  For ar6_counter = 0 To 24
    ar6_zeile(ar6_counter)\width = TextWidth(ar6_zeile(ar6_counter)\text)
    If ar6_zeile(ar6_counter)\width >= ar6_win_width
      MessageRequester("Obacht", "Font zu groß oder Textzeile(n) zu lang für den Screen")
      End
    EndIf
    
    ar6_scl_img_height + TextHeight(ar6_zeile(ar6_counter)\text) + 3 ;ZeilenAbstand
  Next
StopDrawing()

; Hier könnte berechnet werden, wie hoch das Image werden soll, aber in diesem Beispiel
; werden nur Text- und Screen-Höhe debugged
; Debug "Screen-Höhe: " + Str(ar6_win_height -55)
; Debug "Image-Höhe:  " + Str(ar6_scl_img_height)
; Da die Image- > Screenhöhe ist, reicht ein 2-faches Image

ar6_scl_img_height * 2
ar6_scl_img_nr = CreateImage(#PB_Any,ar6_win_width, ar6_scl_img_height)
StartDrawing(ImageOutput(ar6_scl_img_nr))
  FillArea(1, 1, #White,#White)
  DrawingFont(FontID(ar6_font_sml_nr))
  For ar6_counter = 0 To 24
    ar6_x_offset = (ar6_win_width - ar6_zeile(ar6_counter)\width)/2
    ar6_y_offset = ar6_counter*2*9; denn die Fonthöhe = 9

    DrawText(ar6_x_offset,ar6_y_offset,ar6_zeile(ar6_counter)\text,RGB(100,100,100),#White)
  Next
  For ar6_counter = 0 To 24
    ar6_x_offset = (ar6_win_width - ar6_zeile(ar6_counter)\width)/2
    ar6_y_offset = 9*2*ar6_counter+ar6_scl_img_height/2

    DrawText(ar6_x_offset,ar6_y_offset,ar6_zeile(ar6_counter)\text,RGB(100,100,100),#White)
  Next
StopDrawing()

;Das wird der untere Teil des Farbverlaufes, der Transparenz "gewinnt"
ar6_bldspr_nr = CreateSprite(#PB_Any,ar6_win_width,1,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(ar6_bldspr_nr))
  TransparentSpriteColor(ar6_bldspr_nr, #White)
  Box(0,0,ar6_win_width, 4,RGB(128,128,128))
StopDrawing()

ar6_bldspr3d_nr = CreateSprite3D(#PB_Any, ar6_bldspr_nr)

ar6_crdspr_nr   = CreateSprite(#PB_Any,ar6_win_width,100)
TransparentSpriteColor(ar6_crdspr_nr, #White)
StartDrawing(SpriteOutput(ar6_crdspr_nr))
  FillArea(1, 1, #White,#White)
  DrawingFont(FontID(ar6_font_big_nr))
  DrawText(0,0,"Credits",#Black,#White)  
  DrawText(0,40,"go to:",#Black,#White)  
StopDrawing()

ar6_scroll_y = ar6_win_height

ar6_page = 1
Repeat

  ClearScreen(#White)
  
  Select ar6_page
    Case 1
    
      StartDrawing(ScreenOutput())
        For ar6_linecounter = 0 To 128
          Box(0,ar6_linecounter,ar6_win_width, 255-ar6_linecounter*2,RGB(255-ar6_linecounter/2,255-ar6_linecounter/2,255-ar6_linecounter/2))
        Next ar6_linecounter
      StopDrawing()
    
      DisplayTransparentSprite(ar6_sprite1_nr,ar6_win_width-ar6_spr1_width,0)
      DisplayTransparentSprite(ar6_sprite2_nr,0,ar6_spr1_height)
    
    Case 2 
              
      ; das Scrolltext-Image
      ar6_scroll_y - 1 
      If ar6_scroll_y < -ar6_scl_img_height/2
        ar6_scroll_y = 0
      EndIf 
      StartDrawing(ScreenOutput())
        DrawImage(ImageID(ar6_scl_img_nr),0,ar6_scroll_y)
      StopDrawing()
      
      ; Der obere Farbverlauf
      StartDrawing(ScreenOutput())
        For ar6_linecounter = 0 To 128
          Line(0,ar6_linecounter,ar6_win_width, 0,RGB(255-ar6_linecounter,255-ar6_linecounter,255-ar6_linecounter))
        Next ar6_linecounter
      StopDrawing()
      
      Start3D()
        For ar6_linecounter = 0 To 127
          DisplaySprite3D(ar6_bldspr3d_nr,0,128+ar6_linecounter,255-2*ar6_linecounter)
        Next
      Stop3D()
      
      ; Der Schmetterling
      DisplayTransparentSprite(ar6_sprite1_nr,ar6_win_width-ar6_spr1_width,0)
      ; "Credits"
      DisplayTransparentSprite(ar6_crdspr_nr,10,10)
      

  EndSelect

  ar6_EventID     = WaitWindowEvent(1)
  ar6_eventwindow = EventWindow()
  ar6_EventGadget = EventGadget()
  
  If ar6_eventwindow = ar6_win_ID
    If ar6_EventID = #PB_Event_CloseWindow
      ar6_quit = #True
    ElseIf ar6_EventID = #PB_Event_Gadget
      If ar6_EventGadget = ar6_but_2_id
        ar6_quit = #True
      ElseIf ar6_EventGadget = ar6_but_1_id
        If GetGadgetText(ar6_but_1_id) = "Credits"
          SetGadgetText(ar6_but_1_id, "About") 
          ar6_Page = 2
        ElseIf GetGadgetText(ar6_but_1_id) = "About"
          SetGadgetText(ar6_but_1_id, "Credits") 
          ar6_Page = 1
          ar6_y = 255
        EndIf
      EndIf
    EndIf
  EndIf
  FlipBuffers()
Until ar6_quit = #True

FreeSprite(ar6_sprite1_nr)
FreeSprite(ar6_sprite2_nr)
FreeImage(ar6_scl_img_nr)
FreeSprite(ar6_bldspr_nr)
FreeSprite3D(ar6_bldspr3d_nr)
FreeSprite(ar6_crdspr_nr)

CloseScreen()
CloseWindow(ar6_win_ID)

;}
Return; ANG_1 ###########################################################################
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: About-Requester, The Next Generation ;)

Beitrag von HeX0R »

scholly hat geschrieben: Ich hab den Weg der Gosub-Routine gewählt, weil es damit IMHO für
andere am einfachsten ist, das About zu testen, anzupassen und
dann in das eigene Proggi zu übernehmen.
Prozeduren wären da aber sehr viel besser geeignet.
So wie deine Teile jetzt dastehen, sehen sie zwar echt gut aus aber sind nicht wirklich nutzbar.
Hättest du es in Prozeduren gepackt, hättest du dir auch keinen Kopf über irgendwelche ewiglangen Variablennamen machen müssen, weil dort drin eh alles gekapselt ist.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

HeX0R hat geschrieben:Prozeduren wären da aber sehr viel besser geeignet.
Seh ich anders, denn Prozedur in Prozedur geht nich. Und ich hab Code in der Pipeline, da gehts FMPOV nich anders.
HeX0R hat geschrieben:So wie deine Teile jetzt dastehen, sehen sie zwar echt gut aus aber sind nicht wirklich nutzbar.
Wieso denn nicht ?
Selektieren - an den eigenen Code hintendranpasten - anpassen - von irgendwoher aufrufen - klappt (wenigstens bei mir immer).
Wo siehst Du das Problem ?
Zuletzt geändert von scholly am 14.03.2008 17:17, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Prozedur in Prozedur geht nicht ? :freak:

Hier mal dein erstes Beispiel als Prozedur:

Code: Alles auswählen

Procedure About(FontName.s, win_titel.s, delaytime.l)
	Protected font_id.l = LoadFont(#PB_Any, FontName, 32)
	Protected fontclr.l = #Black, quit.l, win_width.l = 400, win_height.l = 200, win_ID.l
	Protected scrtext_1x.s, scrolltext.s, st_len.l, TimeOUT.l
	Protected drawoffset_x.l = 1, drawoffset_y.l = 100
 
	win_ID = OpenWindow(#PB_Any, 0, 0,win_width, win_height, win_titel, #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
	If win_ID And CreateGadgetList(WindowID(win_ID))

		TextGadget(#PB_Any, 0, 10, win_width, 20, "PureBoard Requester Suite", #PB_Text_Center)
		TextGadget(#PB_Any, 0, 40, win_width, 20, "schollys Requester 1 Version 0815", #PB_Text_Center)
		TextGadget(#PB_Any, 0, 70, win_width, 20, "Copyleft März 2008", #PB_Text_Center)

		scrtext_1x = " (: Credits gehen an alle, die in den PureBoards den Anfängern so gut helfen :) "

		;ist der Scrolltext kürzer als das Fenster breit, den text mehr als 1x wiederholen
		scrolltext = scrtext_1x + scrtext_1x


		;nun brauchen wir die Pixellänge des einfachen scrolltextes
		StartDrawing(WindowOutput(win_ID))
  		DrawingFont(FontID(font_id))
			st_len = TextWidth(scrtext_1x)
		StopDrawing()

		TimeOUT = ElapsedMilliseconds() + delaytime
		Repeat
			
			If TimeOUT < ElapsedMilliseconds()
				drawoffset_x - 1
  			If drawoffset_x = -st_len
    			drawoffset_x = 0
  			EndIf

  			StartDrawing(WindowOutput(win_ID))
    			DrawingFont(FontID(font_id))
   				DrawText(drawoffset_x, drawoffset_y, scrolltext, fontclr, Point(1, 1))
				StopDrawing()
				TimeOUT = ElapsedMilliseconds() + delaytime
			EndIf
			
			If WaitWindowEvent(delaytime) = #PB_Event_CloseWindow
  			If EventWindow() = win_ID
    			quit = #True
      		CloseWindow(win_ID)
    		EndIf
  		EndIf
		Until quit = #True
	EndIf
EndProcedure
; ANG_1 ###########################################################################

About("Arial", "About-Requester - TNG ", 10)
Antworten