 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 10.04.2015, 07:57 Titel: Kein Rahmen mit Alpha |
|
|
Hallo liebes Forum.
Ich bin grad an einer Diashow mit Überblendung. Jetzt würde ich gerne den Rahmen wegmachen, doch dann hab ich kein Alpha mehr. Gibt es da eine Möglichkeit beides hinzubekommen?
Vielen Dank.  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 10.04.2015, 17:51 Titel: |
|
|
Code: | '' &h40 GFX_ALPHA_PRIMITIVES '' Bearbeite auch ALPHA-Werte bei Drawing Primitives wie PSET, LINE, etc.
'' &h08 GFX_NO_FRAME '' kein Rahmen
screenres 640,480,32, ,&h08 OR &h40
line (000,000)-(639,479),RGBA(255,0,0,30)
line (000,479)-(639,000),RGBA(255,0,0,255)
sleep |
geht bei mir _________________

Zuletzt bearbeitet von Eternal_pain am 11.04.2015, 11:07, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 11.04.2015, 10:39 Titel: |
|
|
Vielen Dank; werde es versuchen.
Edit: Mit "No Frame", hat es nicht geklappt; das Programm kennt die Variable nicht. Ich hab das auch anfänglich zusammen mit OR versucht. Mit &h... funktioniert es aber einwandfrei.
Hier mal noch der Quellcode für alle, die es interessiert:
Code: |
#include "fbgfx.bi"
dim as integer WinBreite,WinHoehe
screeninfo WinBreite,WinHoehe
screenres WinBreite,WinHoehe,32,,&h08 OR &h40
setmouse ,,0
randomize timer
dim as integer n=int(rnd*2)+1,n2
dim as String dateiname=n &".bmp"
dim bild as Any Ptr
dim as Integer alpha2,i,breit,hoch,breite,hoehe
dim as Integer ff=Freefile
do
if inkey=chr(27) then ImageDestroy bild:end
n2=n
do
n=int(rnd*9)+1
dateiname=n &".bmp"
loop until n<>n2
Open dateiname For Input As #ff
Get #ff,19,breit
Get #ff,23,hoch
Close #ff
bild=ImageCreate(breit,hoch)
Bload dateiname,bild
breite=WinBreite/4
hoehe=0
for i=0 to 17
if inkey=chr(27) then ImageDestroy bild:end
Put (breite+30,hoehe),bild,alpha,alpha2
alpha2+=16
sleep 100
next
n2=n
do
n=int(rnd*9)+1
dateiname=n &".bmp"
loop until n<>n2
Open dateiname For Input As #ff
Get #ff,19,breit
Get #ff,23,hoch
Close #ff
bild=ImageCreate(breit,hoch)
Bload dateiname,bild
breite=WinBreite/4
hoehe=0
for i=0 to 17
if inkey=chr(27) then ImageDestroy bild:end
Put (breite+30,hoehe),bild,alpha,alpha2
alpha2+=16
sleep 100
next
loop
|
PS: Werde daraus mal noch einen Schoner basteln.  |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1278 Wohnort: Ruhrpott
|
Verfasst am: 11.04.2015, 18:50 Titel: |
|
|
Hallo,
die Variable heißt mit vollem Namen "FB.GFX_NO_FRAME" (das gilt entsprechend auch für die übrigen Variablen). Das steht auch -wenn auch etwas verklausuliert, Stichwort "NAMESPACE"- in der Befehlsreferenz.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 11.04.2015, 23:27 Titel: |
|
|
OK, das wird's wohl sein.
Hier mal noch der Schoner; kann ja vielleicht mal jemand brauchen:
Code: |
#include "windows.bi"
#include "fbgfx.bi"
dim shared as String Param
declare sub configurescreensaver
declare sub showscreensaver
if command(1) = "" then
if messagebox(0, "Bildschirmschoner testen?", " ", mb_iconquestion or mb_yesno) = idyes then
showscreensaver
end if
end
end if
param = Mid(Command(1), 2, 1)
select case UCASE(param)
case "S": showscreensaver
case "C": configurescreensaver
end select
end
sub configurescreensaver
messagebox(0, "Es gibt nichts zu konfigurieren! ", " ", mb_iconinformation)
end sub
sub showscreensaver
dim as integer mxalt, myalt, mxneu, myneu
dim as STRING taste
dim as integer WinBreite,WinHoehe
screeninfo WinBreite,WinHoehe
screenres WinBreite,WinHoehe,32,,&h08 OR &h40
setmouse ,,0
randomize timer
dim as integer n=int(rnd*2)+1,n2
dim as String dateiname=n &".bmp"
dim bild as Any Ptr
dim as Integer alpha2,i,breit,hoch,breite,hoehe
dim as Integer ff=Freefile
do
n2=n
do
n=int(rnd*2)+1
dateiname=n &".bmp"
loop until n<>n2
Open dateiname For Input As #ff
Get #ff,19,breit
Get #ff,23,hoch
Close #ff
bild=ImageCreate(breit,hoch)
Bload dateiname,bild
breite=WinBreite/4
hoehe=0
for i=0 to 17
Put (breite+30,hoehe),bild,alpha,alpha2
alpha2+=16
sleep 100
getmouse mxneu, myneu
taste=Inkey
IF taste<>"" THEN
SELECT CASE taste
CASE CHR(32): EXIT DO
CASE ELSE: EXIT SUB
END SELECT
END IF
IF mxalt=0 THEN
mxalt=mxneu
myalt=myneu
ELSE
if mxneu<>mxalt or myneu<>myalt then ImageDestroy bild:end
END IF
next
n2=n
do
n=int(rnd*2)+1
dateiname=n &".bmp"
loop until n<>n2
Open dateiname For Input As #ff
Get #ff,19,breit
Get #ff,23,hoch
Close #ff
bild=ImageCreate(breit,hoch)
Bload dateiname,bild
breite=WinBreite/4
hoehe=0
for i=0 to 17
Put (breite+30,hoehe),bild,alpha,alpha2
alpha2+=16
sleep 100
getmouse mxneu, myneu
taste=Inkey
IF taste<>"" THEN
SELECT CASE taste
CASE CHR(32): EXIT DO
CASE ELSE: EXIT SUB
END SELECT
END IF
IF mxalt=0 THEN
mxalt=mxneu
myalt=myneu
ELSE
if mxneu<>mxalt or myneu<>myalt then ImageDestroy bild:end
END IF
next
getmouse mxneu, myneu
taste = Inkey
IF taste<>"" THEN
SELECT CASE taste
CASE CHR(32): EXIT DO
CASE ELSE: EXIT SUB
END SELECT
END IF
IF mxalt=0 THEN
mxalt=mxneu
myalt=myneu
ELSE
if mxneu<>mxalt or myneu<>myalt then ImageDestroy bild:end
END IF
LOOP
end sub |
|
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1278 Wohnort: Ruhrpott
|
Verfasst am: 12.04.2015, 00:16 Titel: |
|
|
Dieser Bildschirmschoner wird nach einigen Minuten wegen Speichermangel abstürzen. Du reservierst bei jedem Bildwechsel neuen Speicher, gibst ihn danach aber nicht wieder frei (dem Pointer auf das Bild einen neuen Wert zuzuweisen, reicht NICHT, um den alten Speicher freizugeben).
Außerdem: Warum machst du in der Do - Schleife zweimal hintereinander exakt dasselbe? Und die Maus- und Tastaturabfrage ist auch unnötig kompliziert. Hier ein (in Ermangelung geeigneter Bilder allerdings ungetesteter) Verbesserungsvorschlag:
Code: | Sub showscreensaver
Dim As Integer mxalt, myalt, mxneu, myneu
Dim As String taste
Dim As Integer WinBreite,WinHoehe
ScreenInfo WinBreite,WinHoehe
ScreenRes WinBreite,WinHoehe,32,,&h08 Or &h40
SetMouse ,,0
Randomize Timer
Dim As Integer n=Int(Rnd*2)+1,n2
Dim As String dateiname=n &".bmp"
Dim bild As Any Ptr
Dim As Integer alpha2,i,breit,hoch,breite,hoehe
Dim As Integer ff=FreeFile
GetMouse mxalt, myalt
Do
n2=n
Do
n=Int(Rnd*2)+1
dateiname=n &".bmp"
Loop Until n<>n2
Open dateiname For Input As #ff
Get #ff,19,breit
Get #ff,23,hoch
Close #ff
bild=ImageCreate(breit,hoch)
BLoad dateiname,bild
breite=WinBreite/4
hoehe=0
For i=0 To 17
Put (breite+30,hoehe),bild,Alpha,alpha2
alpha2+=16
Sleep 100
Select Case InKey
Case ""
'nichts tun, weiter im programm
Case Chr(32)
ImageDestroy bild
Exit Do
Case Else
ImageDestroy bild
Exit Sub
End Select
GetMouse mxneu, myneu
If mxneu<>mxalt Or myneu<>myalt Then
ImageDestroy bild
End
End If
Next
ImageDestroy bild
Loop
End Sub
|
_________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 12.04.2015, 00:58 Titel: |
|
|
OK. Vielen Dank!!  |
|
Nach oben |
|
 |
|
|
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.
|
|