Code: Alles auswählen
Debug #SCREEN_X
öh.. hab ich da vergessen, was zu installieren??
Code: Alles auswählen
Debug #SCREEN_X
Dies ist eine lokale Konstante welche Rings in seinem Programm verwendet hat.Kaeru Gaman hat geschrieben:Constant not found: #SCREEN_XCode: Alles auswählen
Debug #SCREEN_X
öh.. hab ich da vergessen, was zu installieren??
Wie hast du das gemacht?bluejoke hat geschrieben:Geilooo!
Ich hab Bennys TV-Noise als Bildschirmschoner, machst du aus deinem auch noch einen?
Code: Alles auswählen
IncludeFile "Common.pb"
;===========================================================================
;-ONLY START ONE INSTANCE
;===========================================================================
Global ScreensaverName.s
ScreensaverName = "TV-Noise Screensaver"
;The next function call uses the AppRunning User Library
If AppRunning(ScreensaverName) : End : EndIf
;===========================================================================
;-CONSTANTS
;===========================================================================
#SCREEN_X = 800
#SCREEN_Y = 600
#LOOPTIME = 1000/40 ; 40 Frames in 1000ms (1second)
;===========================================================================
;-GLOBAL FLAGS / VARIABLES / STRUCTURES / ARRAYS
;===========================================================================
Global Parameter.s
Global PrevWinHndlString.s
Global PrevWinHndl.l
Parameter = UCase(ProgramParameter())
If Len(Parameter) > 2
PrevWinHndlString = RemoveString(Parameter, Left(Parameter, 3), 1)
Parameter = RemoveString(Parameter, Left(Parameter, 1), 1)
Parameter = Left(Parameter, 1)
Else
Parameter = RemoveString(Parameter, Left(Parameter, 1), 1)
PrevWinHndlString = ProgramParameter()
If FindString(PrevWinHndlString, "-", 0) <> 0 : PrevWinHndlString = RemoveString(PrevWinHndlString, "-", 1) : EndIf
If FindString(PrevWinHndlString, "/", 0) <> 0 : PrevWinHndlString = RemoveString(PrevWinHndlString, "/", 1) : EndIf
EndIf
PrevWinHndl = Val(PrevWinHndlString)
;===========================================================================
;-PROCEDURES
;===========================================================================
;simple error checking
Procedure HandleError(result, text.s)
If result = 0 : MessageRequester("Error", text, #PB_MessageRequester_Ok) : End : EndIf
EndProcedure
;preview window callback
Procedure PreviewCallback(hWnd, Message, wParam, lParam)
Select Message
Case #WM_CLOSE
UnregisterClass_("PreviewWindowClass", GetModuleHandle_(#NULL))
DestroyWindow_(hWnd)
End
EndSelect
Result = DefWindowProc_(hWnd, Message, wParam, lParam)
ProcedureReturn Result
EndProcedure
;execute the preview in the little mini monitor in 'Display Properties'
Procedure ExecutePreview()
PreviewWindowSize.RECT
GetClientRect_(PrevWinHndl, @PreviewWindowSize)
PreviewWindowClass.WNDCLASS
Classname.s = "PreviewWindowClass"
PreviewWindowClass\style = #CS_HREDRAW | #CS_VREDRAW
PreviewWindowClass\lpfnWndProc = @PreviewCallback()
PreviewWindowClass\cbClsExtra = 0
PreviewWindowClass\cbWndExtra = 0
PreviewWindowClass\hInstance = GetModuleHandle_(#NULL)
PreviewWindowClass\hIcon = 0
PreviewWindowClass\hCursor = 0
PreviewWindowClass\hbrBackground = 0
PreviewWindowClass\lpszMenuName = 0
PreviewWindowClass\lpszClassName = @Classname
RegisterClass_(PreviewWindowClass)
hWnd.l = CreateWindowEx_(0, "PreviewWindowClass", "", #WS_CHILD | #WS_VISIBLE, 0, 0, PreviewWindowSize\right, PreviewWindowSize\bottom, PrevWinHndl, 0, GetModuleHandle_(#NULL), 0)
If hWnd
CatchImage(1, ?PreviewImage)
HandleError(CreateGadgetList(hWnd), "Gadget list in preview window could not be created!")
ImageGadget(1, 0, 0, PreviewWindowSize\right, PreviewWindowSize\bottom, UseImage(1))
While GetMessage_(Message.MSG, 0, 0, 0)
TranslateMessage_(Message)
DispatchMessage_(Message)
Wend
EndIf
EndProcedure
; Procedure, die die Farbe in den aktuellen Farbmodus umwandelt.
; (Bei 15-bit bin ich mir nicht sicher ob das so richtig ist, konnte es nicht testen...)
Procedure.l TransformColor(R.b,G.b,b.b)
Select DrawingBufferPixelFormat()
Case #PB_PixelFormat_32Bits_RGB
ProcedureReturn R+G<<8+b<<16
Case #PB_PixelFormat_32Bits_BGR
ProcedureReturn b+G<<8+R<<16
Case #PB_PixelFormat_24Bits_RGB
ProcedureReturn R+G<<8+b<<16
Case #PB_PixelFormat_24Bits_BGR
ProcedureReturn b+G<<8+R<<16
Case #PB_PixelFormat_16Bits
ProcedureReturn b>>3+(G&%11111100)<<3+(R&%11111000)<<8
Case #PB_PixelFormat_15Bits
ProcedureReturn R&%11111000>>3+(G&%11111000)<<2+(b&%11111000)<<7
EndSelect
EndProcedure
; For Speed-Optimation - Original by Danilo!
Procedure InitGameTimer()
; initialize highres timing function TimeGetTime_()
Shared _GT_DevCaps.TIMECAPS
timeGetDevCaps_(_GT_DevCaps,SizeOf(TIMECAPS))
timeBeginPeriod_(_GT_DevCaps\wPeriodMin)
EndProcedure
Procedure StopGameTimer()
; de-initialize highres timing function TimeGetTime_()
Shared _GT_DevCaps.TIMECAPS
timeEndPeriod_(_GT_DevCaps\wPeriodMin)
EndProcedure
;run the fullscreen screensaver code
Procedure ExecuteScreenSaver()
If InitSprite()=0 Or InitMouse()=0 Or InitKeyboard()=0
MessageRequester("ERROR","Cant init DirectX !",#MB_ICONERROR):End
EndIf
If OpenScreen(#SCREEN_X, #SCREEN_Y, 32, "weltenkonstrukteur.de")=0
MessageRequester("ERROR","Cant open screen !",#MB_ICONERROR):End
EndIf
StartDrawing(ScreenOutput())
Pitch = DrawingBufferPitch()
StopDrawing()
White = TransformColor(255,255,255)
Noise = 0
Carry = 0
Index = 0
Seed = $12345
; InitScreenSaver()
SystemParametersInfo_(#SPI_SCREENSAVERRUNNING, #TRUE, @oldval, 0)
ShowCursor_(0)
While quit=0
FlipBuffers()
ExamineMouse()
ExamineKeyboard()
StartDrawing(ScreenOutput())
For y = 0 To #SCREEN_Y -1
For x = 0 To #SCREEN_X -1
noise = seed;
noise = noise >> 3
noise = noise ! seed
carry = noise & 1
seed = seed >> 1
seed = seed | ( carry << 30)
noise = noise & $FF
*Screen.LONG = DrawingBuffer()
*Screen + (Pitch * y) + (x*4)
*Screen\l = (noise<<16) | (noise << 8) | noise
Next x
Next y
StopDrawing()
While ( timeGetTime_()-LoopTimer )<#LOOPTIME : Delay(1) : Wend
LoopTimer = timeGetTime_()
If KeyboardPushed(#PB_Key_All)
quit = 2
EndIf
If MouseDeltaX() <> 0 Or MouseDeltaY() <> 0 Or MouseWheel() <> 0 Or MouseButton(1) <> 0 Or MouseButton(2) <> 0 Or MouseButton(3) <> 0
quit = 2
EndIf
Wend
ShowCursor_(1)
SystemParametersInfo_(#SPI_SCREENSAVERRUNNING, #FALSE, @oldval, 0)
End
EndProcedure
;configuration window
Procedure ExecuteConfiguration()
; MessageRequester("Saver - Config", "Nichts einzurichten!"+Chr(13)+"(c)coming art")
Open_Window_0()
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadgetID()
If GadgetID = #Button_0
End
EndIf
EndIf
Until Event = #PB_EventCloseWindow
End
EndProcedure
;===========================================================================
;-MAIN
;===========================================================================
;deal with the Parameters passed to this program
Select Parameter
Case "" ;double clicked
ExecuteConfiguration()
Case "A" ;check password
End
Case "C" ;'Settings' button clicked in the screensaver dialog
ExecuteConfiguration()
Case "P" ;when the preview is requested in the screensaver dialog by selecting this screensaver
ExecutePreview()
Case "S" ;launch the main screensaver after an interval or by pressing 'Preview' in the dialog
ExecuteScreenSaver()
EndSelect
End
;===========================================================================
;-DATA
;===========================================================================
DataSection
PreviewImage:
IncludeBinary "Preview.bmp"
EndDataSection
Code: Alles auswählen
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Image_0
#Text_0
#Button_0
EndEnumeration
;- Image Plugins
;- Image Globals
Global Image0
;- Catch Images
Image0 = CatchImage(0, ?Image0)
;- Images
DataSection
Image0:
IncludeBinary "F:\Code\purebasic\Examples\comart\TV-Noise_SCR\wkbanner.bmp"
EndDataSection
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 453, 175, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar, "TV-Noise Screensaver - (c) 2oo4 benny!")
If CreateGadgetList(WindowID())
ImageGadget(#Image_0, 15, 15, 420, 60, Image0)
TextGadget(#Text_0, 15, 105, 420, 30, "There is nothing to configure !", #PB_Text_Center)
ButtonGadget(#Button_0, 165, 135, 120, 30, "Close")
EndIf
EndIf
EndProcedure
Das glaube ich auch. Ich hab mich damals nicht an den Code getraut, weil ich maximal nur 1/10 davon verstanden habe.Ich denke ich habe da auf das gleiche ScreenSaver-Gerüst zurückgegriffen,
welches Du auch schon hast.
Code: Alles auswählen
;TV-Test-picture läuft jetzt auch mit 19" TFT SXGA bei aktueller Auflösung
SCREEN_X=GetSystemMetrics_(#SM_CXSCREEN)
SCREEN_Y=GetSystemMetrics_(#SM_CYSCREEN)
#SCREEN_DEPTH=32
#MyFontID=1
Sender.s="PUREBASIC"
XSchritt=SCREEN_X/20
YSchritt=SCREEN_Y/15
Mode=1
DelayZeit=5000
;Make tv-noise, generate a sound in mem without a WAV-file
;#pi = 3.141593 ; pi
fq = 250 ; frequenz in Hz for sinustone
#samplerate = 44100 ; samplerate
#bitrate = 16 ; Bits per sample, #bitrate Mod 8 must be 0 !
#channels = 2 ; number of channels
#secs = 1 ; time for the tone in seconds
BytesNeeded=#samplerate * #secs * #channels *2
BytesNeeded=BytesNeeded + 44;(44 is the header)
mem1=GlobalAlloc_(#GMEM_FIXED,Bytesneeded) ;Api only ;)
mem2=GlobalAlloc_(#GMEM_FIXED,Bytesneeded)
avBytesPerSec.l = #channels*#bitrate/8*#samplerate ; calculate the average bytes per second
Global actsamplevalue.w ; for signed RAW data
offset=44
For acttime = 1 To #samplerate * #secs
For actchannel = 1 To #channels
If fq <= 150
m = 1
ElseIf fq >= 300
m = -1
EndIf
fq + m
actsamplevalue = 32766 * Sin(2 * #pi * fq * acttime / #samplerate)
If actsamplevalue <20000
actsamplevalue = actsamplevalue +5000
EndIf
PokeW(mem2+offset,Random(32765))
PokeW(mem1+offset,actsamplevalue )
offset+2
Next
Next
PokeL(mem1,$46464952) ;
PokeL(mem1+4,36+avBytesPerSec*#secs) ;WriteLong(36+avBytesPerSec*#secs) ; normally filesize - 8 Bytes, here a bit tricky, fmt-chunk + data-chunk
PokeL(mem1+8,$45564157)
PokeL(mem1+12,$20746D66)
PokeL(mem1+16,16);WriteLong(16) ; chunk data size
PokeW(mem1+20,1);WriteWord(1) ; compression code
PokeW(mem1+22,#Channels);WriteWord(#channels) ; number of channels
PokeL(mem1+24,#samplerate);WriteLong(#samplerate) ; samplerate
PokeL(mem1+28,avBytesPerSec);WriteLong(avBytesPerSec) ; average bytes per second, here 2(channels)*2(block align)*44100(samplerate)
PokeW(mem1+32,#bitrate/8*#channels);WriteWord(#bitrate/8*#channels) ; Block Align ('bytes per sample')
PokeW(mem1+34,#bitrate);WriteWord(#bitrate) ; Bits per sample
PokeS(Mem1+36,"data");WriteByte(Asc("d"))
PokeL(mem1+40,avBytesPerSec*#secs);;WriteLong(avBytesPerSec*#secs) ; data chunk size in byes
PokeL(mem2,$46464952) ;
PokeL(mem2+4,36+avBytesPerSec*#secs) ;WriteLong(36+avBytesPerSec*#secs) ; normally filesize - 8 Bytes, here a bit tricky, fmt-chunk + data-chunk
PokeL(mem2+8,$45564157)
PokeL(mem2+12,$20746D66)
PokeL(mem2+16,16);WriteLong(16) ; chunk data size
PokeW(mem2+20,1);WriteWord(1) ; compression code
PokeW(mem2+22,#Channels);WriteWord(#channels) ; number of channels
PokeL(mem2+24,#samplerate);WriteLong(#samplerate) ; samplerate
PokeL(mem2+28,avBytesPerSec);WriteLong(avBytesPerSec) ; average bytes per second, here 2(channels)*2(block align)*44100(samplerate)
PokeW(mem2+32,#bitrate/8*#channels);WriteWord(#bitrate/8*#channels) ; Block Align ('bytes per sample')
PokeW(mem2+34,#bitrate);WriteWord(#bitrate) ; Bits per sample
PokeS(Mem2+36,"data");WriteByte(Asc("d"))
PokeL(mem2+40,avBytesPerSec*#secs);;WriteLong(avBytesPerSec*#secs) ; data chunk size in byes
; Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#SoundSync = $0
#SoundASync = $1
#SoundMemory = $4
#SoundLoop = $8
#SoundNoStop = $10
#SoundNoDefault = $2
If InitSprite()=0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
End
EndIf
If OpenScreen(SCREEN_X, SCREEN_Y, #SCREEN_DEPTH, "TV-TEST")
Flags=#PB_Font_Bold
Result = LoadFont(#MyFontID, "Times New Roman", 32, Flags)
UseFont(#MyFontID)
StartDrawing(ScreenOutput())
Pitch = DrawingBufferPitch()
StopDrawing()
White = $FFFFFF
Noise = 0
Carry = 0
Index = 0
Seed = $12345
Repeat
FlipBuffers()
If IsScreenActive()
ClearScreen($50,$50,$50)
StartDrawing(ScreenOutput())
T1=GetTickCount_()
If T1>T0+DelayZeit
If Mode=1
Mode=2
result=sndPlaySound_(mem2,#SoundASync |#SoundMemory|#SoundLoop )
Else
Mode=1
result=sndPlaySound_(mem1,#SoundASync |#SoundMemory|#SoundLoop )
EndIf
T0=T1
EndIf
If Mode=1
;Draw grid
DrawingMode(1)
X=0
Y=0
While x<SCREEN_X-1
LineXY(X, 0, X, SCREEN_Y-1 , $FFFFFF)
X+XSchritt
While y< SCREEN_Y-1
LineXY(0, y, SCREEN_X-1, y , $FFFFFF)
y+YSchritt
Wend
Wend
LineXY(SCREEN_X-1, 0, SCREEN_X-1, SCREEN_Y-1 , $FFFFFF)
LineXY(0, SCREEN_Y-1, SCREEN_X-1, SCREEN_Y-1 , $FFFFFF)
;draw boxes
Box(XSchritt*4,YSchritt*2,xSchritt*1.5,YSchritt*3,$FFFFFF) ;white
Box(XSchritt*5.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$00FFFF);yellow
Box(XSchritt*7,YSchritt*2,xSchritt*1.5,YSchritt*3,$AAAA00);ligh bluegreen
Box(XSchritt*8.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$00AA44);green
Box(XSchritt*10,YSchritt*2,xSchritt*1.5,YSchritt*3,$FF00FF);purple
Box(XSchritt*11.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$0000FF);red
Box(XSchritt*13,YSchritt*2,xSchritt*1.5,YSchritt*3,$FF0000);blue
Box(XSchritt*14.5,YSchritt*2,xSchritt*1.5,YSchritt*3,$000000);black
Box(XSchritt*4,YSchritt*5,xSchritt*3,YSchritt*2,$000000);black
Box(XSchritt*7,YSchritt*5,xSchritt*3,YSchritt*2,$505050);darkgrey
Box(XSchritt*10,YSchritt*5,xSchritt*3,YSchritt*2,$A0A0A0);lighgrey
Box(XSchritt*13,YSchritt*5,xSchritt*3,YSchritt*2,$FFFFFF);white
Box(XSchritt*4,YSchritt*7,xSchritt*12,YSchritt*3,$FFFFFF);white
Box(XSchritt*6,YSchritt*7+1,xSchritt*8,YSchritt-1,$000000);black
Box(XSchritt*5.5,YSchritt*8,xSchritt*10.5,YSchritt,$505050);darkgrey
For I=1 To 5
Box(XSchritt*6 + (I* XSchritt/3),YSchritt*8,xSchritt/6,YSchritt,$FFFFFF);white
Box(XSchritt*6 + XSchritt/6 + (I*XSchritt/3),YSchritt*8,xSchritt/6,YSchritt,$000000);white
;Box(XSchritt*4.25+ I*(XSchritt/4),YSchritt*8,xSchritt/4,YSchritt,$000000);black
Next I
For I=1 To 10
Box(XSchritt*8 + (I* XSchritt/6),YSchritt*8,xSchritt/12,YSchritt,$FFFFFF);white
Box(XSchritt*8 + XSchritt/12 + (I*XSchritt/6),YSchritt*8,xSchritt/12,YSchritt,$000000);white
;Box(XSchritt*4.25+ I*(XSchritt/4),YSchritt*8,xSchritt/4,YSchritt,$000000);black
Next I
mschritt=2
For I=1 To 20
Box(XSchritt*10.5 + (I* Mschritt*2),YSchritt*8,mSchritt,YSchritt,$FFFFFF);white
Box(XSchritt*10.5 + 2 + (I*mSchritt*2),YSchritt*8,mschritt,YSchritt,$000000);white
;Box(XSchritt*4.25+ I*(XSchritt/4),YSchritt*8,xSchritt/4,YSchritt,$000000);black
Next I
Box(XSchritt*13,YSchritt*8,xSchritt*2.5,YSchritt,RGB(174,84,0));brown
FrontColor($FF,$FF,$FF)
DrawingFont(FontID())
Locate((SCREEN_X - TextLength(sender) )/2,YSchritt*7-2)
DrawText(Sender)
LineXY(SCREEN_X/2, YSchritt*6,SCREEN_X/2, YSchritt*9 , $FFFFFF)
LineXY(SCREEN_X/2+xSchritt/4, YSchritt*9,SCREEN_X/2+xSchritt/4, YSchritt*10, $000000)
LineXY(xSchritt*9.75, YSchritt*9,SCREEN_X/2+xSchritt/4, YSchritt*9, $000000)
LineXY(xSchritt*9.75, YSchritt*9,SCREEN_X/2+xSchritt/4, YSchritt*10, $000000)
FillArea(SCREEN_X/2, YSchritt*9.1, 0, 0)
Box(XSchritt*4,YSchritt*10,xSchritt*8,YSchritt,$3333FF);red
Box(XSchritt*4,YSchritt*11,xSchritt*8,YSchritt,$FF3333);blue
Box(XSchritt*12,YSchritt*10,xSchritt*4,YSchritt*2,$505050);darkgrey
;Draw circle
DrawingMode(4)
Ellipse(SCREEN_X/2, SCREEN_Y/2, SCREEN_Y/2 -1,SCREEN_Y/2 -1 , $FFFFFF)
EndIf
If Mode=2
For y = 0 To SCREEN_Y
For x = 0 To SCREEN_X
noise = seed;
noise = noise >> 3
noise = noise ! seed
carry = noise & 1
seed = seed >> 1
seed = seed | ( carry << 30)
noise = noise & $FF
*Screen.LONG = DrawingBuffer()
*Screen + (Pitch * y) + (x*4)
;*Screen\l =Random(1) * $FFFFFF
*Screen\l = (noise<<16) | (noise << 8) | noise
Next x
Next y
EndIf
StopDrawing()
EndIf
Delay(1)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
GlobalFree_(mem1)
GlobalFree_(mem2)
End