Seite 1 von 2

Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 03:54
von Melvin71
Hallo,
ich bin noch Neuling bei PureBasic, finde es aber bisher echt klasse. Nun habe ich schon so einiges
an Code geschrieben, nicht zuletzt auch mit Hilfe von Freunden und den Hilfen hier im PureBoard...
aaaaaber... nun möchte ich eine Hintergrundgrafik einbinden was auch gelingt. Dann desweiteren
solle etwas per Button auswählbar sein. Die Button sollen aber ohne "Rahmen" angezeigt werden.
ich benutze den Befehlt ButtonImageGadget, nur damit werden die Rahmen mit angezeigt, nun soll es
auch mit ImageGadget eben ohne Button davor gehen, nur damit werden meine Buttons nicht mehr angezeigt.
Habe schon gegoogelt und so, aber nichts passendes gefunden, kann mir bitte jemand helfen und eben
erklären, wie ich ich es hinbekommen kann, dass die Hintergrundgrafik die Buttons nicht mehr verdeckt.
Besten Dank schon mal im vorraus....

MFG

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 09:36
von dysti
@Melvin71, wenn du dein Beispielcode hier posten würdest, könnten wir auch helfen und dir zeigen, wo dein Denkfehler ist.

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 11:13
von Melvin71
Hallo,
ok das könnte vielleicht wirklich hilfreich sein :lol:
Hier also der Code:

Code: Alles auswählen

#IDC_BITMAP=$5DC

UsePNGImageDecoder()
UseJPEGImageDecoder()


;# Lädt das OGG Vorbis Plugin von PureBasic
UseOGGSoundDecoder()

;# WENN NICHT InitSound() initialisiert werden konnnte
If Not InitSound()
	
	MessageRequester("Error", "Sound konnte nicht initialisiert werden")
	
EndIf

;# WENN NICHT InitMovie() initialisiert werden konnnte
If Not InitMovie()
	
	MessageRequester("Error", "Movie konnte nicht initialisiert werden")
	
EndIf



OpenWindow(0, 0, 0, 800, 600, "ButtonImage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
LoadImage(0,"Wallpaper\mond800x600.jpg")
LoadImage(1, "Button\Button1.jpg")    ; ändern Sie den 2. Parameter in den Pfad/Dateinamen Ihres Bildes
LoadImage(2, "Button\eigener1.png")
ImageGadget(0,0,0,800,600,ImageID(0))
DisableGadget(0,1)

ButtonImageGadget(1, 180, 400, 50, 50, ImageID(1))
ButtonImageGadget(2, 260, 400, 80, 50, ImageID(2))
  

Procedure Button2()
#SOUND_DATEI = 1

 LoadSound(0, "Sound_Effekte\Help me.wav")
 PlaySound(0)
 
EndProcedure

Procedure PlayMukke()
  
  
  
;# SoundDatei.s speichert den kompletten Pfad und Dateiname // OpenFileRequester() öffnet ein Auswahlfenster für Dateien
SoundDatei.s = OpenFileRequester("Datei auswählen", "", "C:\", 0)

;# Zeigt in der IDE im Debugger die gespeicherte Variable SoundDatei.s
;Debug SoundDatei.s

;# WENN NICHT SoundDatei.s leer ist
If Not SoundDatei.s = ""
	
	;# Wandelt den Dateiname in Kleinschreibung um // GetExtensionPart() zeigt die Dateiendung an
	If LCase(GetExtensionPart(SoundDatei.s)) = "mp3"
		
		;# WENN NICHT Datei existiert
		If Not LoadMovie(0, SoundDatei.s)
			
			MessageRequester("Error", "Datei konnte nicht geladen werden.")
			
		;# SONST
		Else
			
			;OpenWindow(0, 10, 10, 0, 0, "", #PB_Window_SystemMenu | #PB_Window_Invisible)
			
			;# WENN NICHT Datei existiert
			If Not PlayMovie(0, WindowID(0))
				
				MessageRequester("Error", "Datei konnte nicht abgespielt werden.")
				
			EndIf
			
		EndIf
		
	;# SONST
	Else
		
		;# WENN NICHT Sound geladen werden konnte
		If Not LoadSound(0, SoundDatei.s)
			
			MessageRequester("Error", "Datei konnte nicht geladen werden.")
			
		;# SONST
		Else
			
			;# WENN NICHT Sound abgespielt werden konnte
			If Not PlaySound(0)
				
				MessageRequester("Error", "Datei konnte nicht abgespielt werden.")
				
			EndIf
			
		EndIf
		
	EndIf
	
EndIf
EndProcedure 





;# 10000 Millisekunden Verzögerung (Damit der Sound auch etwas abgespielt wird)


Repeat
  
   event = WaitWindowEvent()
;   
;   Select Event
; 		
; 		 		
; 		Case #PB_Event_Gadget
; 			
; 			Select EventGadget()
; 				
; 				Case 2
; 					
; 					If EventType() = #PB_EventType_LeftClick
; 						
; 						MessageRequester("Info", "Button geklickt")
; 						
; 					EndIf
; 					
; 			EndSelect
; 		
; 	EndSelect
  
  
  
  
  If event = #PB_Event_Gadget
    If EventGadget() = 1
      PlayMukke()
      
    EndIf
    
    If EventGadget() = 2
      Button2()
                   
    EndIf
    EndIf 
  
  
  
  
    
Until event = #PB_Event_CloseWindow
__________________________________________________
Code-Tags hinzugefügt
10.05.2013
RSBasic

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 11:40
von Bisonte
und was ist mit Tee ? äh ich mein den Bildern ?
Woher soll unsereins denn wissen welche Ausmaße die haben.... (ausser beim mond800x600 bild ;) )
Und quaken soll datt Dingens auch....

Tip: Benutze TS-Soft's oder Stargates IDE-Tool um Dateien als DataSection einzubinden, oder falls das nicht funktioniert,
weil die Dateien zu gross sind, erstelle sie zur Laufzeit. Stichwort : CreateImage(),

oder nehme die Bilder und Sounds aus dem Installationsordner von PB (Examples), die eigentlich jeder haben sollte ...

oder alles in ein Zip und hochladen und uns den link präsentieren.

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 11:50
von dysti
....also ich benutze die neuste PB-Version.
Bei mir funktioniert das Programm einwandfrei, so wie es sein soll.
Da wird nichts überdeckt.
Als Anfänger würde ich mal den neuen Form-Designer mal ausprobieren.
Dann siehst du, welchen Code er erstellt.

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 11:58
von ts-soft
Für Button ohne Rahmen ist das CanvasGadget gut geeignet. Hier noch ein Beispiel, das
wohl etwas gross für Dein Vorhaben ist, aber vielleicht kannst Du Dir dort doch noch ein
paar Anregungen rauspicken: http://www.purebasic.fr/english/viewtop ... 12&t=53623

Gruß
Thomas

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 13:25
von Melvin71
Erstmal vielen Dank für die schnellen Antworten und die Hilfen.
Es geht nicht darum. dass der Code wo wie ich ihn gepostet habe, nicht funktioniert,
sondern darum, dass, wenn ich nicht BUTTONImageGadget bla bla schreibe,
sondern nur ImageGadget, die Buttons nicht mehr angezeigt werden, aber immer noch klickbar sind.
Die Buttons werden einfach unsichtbar.
Und einen Designer möchte ich absichtlich nicht nutzen, da ich den Code von Anfang an kennen lernen
möchte. Denke das es einfach mehr Lerneffekt mit sich bringt^^

MFG

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 13:42
von NicTheQuick
Das Problem ist ganz einfach, dass es von vorne rein nicht so gedacht ist, dass man Gadgets überlappen kann. Du hast vermutet, dass du ein großes ImageGadget als Hintergrund machen kannst und darüber dann andere Buttons legen kannst. Das macht aber sicherlich jedes Betriebssystem anders und wahrscheinlich sogar verschiedene Windows-Distributionen auch nochmal anders.
Sauber ist das also nicht. Es gibt die Möglichkeit ein Fenster zu skinnen. Vielleicht solltest du das in Betracht ziehen. Einfach mal im Forum suchen. Soweit ich weiß, gibt es da allerdings nur Lösungen für Windows. Eine andere Möglichkeit wäre komplett ein CanvasGadget() zu nutzen und dann die Buttons auch selbst zu zeichnen.

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 16:48
von dysti
Melvin71 hat geschrieben:Es geht nicht darum. dass der Code wo wie ich ihn gepostet habe, nicht funktioniert,
sondern darum, dass, wenn ich nicht BUTTONImageGadget bla bla schreibe,
....und warum hast du dann nicht den Code mit "ImageGadget" gepostet.
Dann wäre das Problem auch zu sehen gewesen.
Melvin71 hat geschrieben:Und einen Designer möchte ich absichtlich nicht nutzen, da ich den Code von Anfang an kennen lernen
möchte. Denke das es einfach mehr Lerneffekt mit sich bringt^^
Da hast du ein Denkfehler.
Ich schrieb ja nicht, das der Form-Designer zur kompletten Codegenerierung genutzt werden sollte.
Wenn man z. B. ein Imagegadget im Designer erstellt und danach sich den generierten Code anschaut,
dann noch mit den Flags etwas spielt, hat mehr mehr Lernerfolg als wenn man einen gesamten Programmcode sich vornimmt.

__________________________________________________
Quote-Tags richtig gesetzt
10.05.2013
RSBasic

Re: Hintergrundgrafik überlappt Buttons

Verfasst: 10.05.2013 18:43
von dysti
Hier hast du eine Lösung für dein Problem:

Code: Alles auswählen

OpenWindow(0, 0, 0, 800, 600, "ButtonImage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
LoadImage(0,"Wallpaper\mond800x600.jpg")
hbrBackground = CreatePatternBrush_(ImageID(0))
SetClassLong_(WindowID(0),#GCL_HBRBACKGROUND,hbrBackground)
LoadImage(1, "Button\Button1.jpg")    ; ändern Sie den 2. Parameter in den Pfad/Dateinamen Ihres Bildes
LoadImage(2, "Button\eigener1.png")
;ImageGadget(0,0,0,800,600,ImageID(0))
;DisableGadget(0,1)