  | 
					
						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, 06: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, 16: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, 10:07, insgesamt einmal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Input
 
 
  Anmeldungsdatum: 28.07.2014 Beiträge: 59
 
  | 
		
			
				 Verfasst am: 11.04.2015, 09: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: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 11.04.2015, 17: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, 22: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: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 11.04.2015, 23: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: 11.04.2015, 23: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.
  | 
   
 
     |