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
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)