Seite 1 von 2

Gadget (Text, String, ...) verschwindet immer hinter Image

Verfasst: 07.08.2008 12:27
von funk.munich
Hallo zusammen,

wenn ich einen Text auf einer Seite anzeigen lassen möchte, jedoch
ein Image im Hintergrund gesetzt wurde, verschwindet mein TextGadget
immer. Gibt es eine Möglichkeit, z.B. ImageGadget immer im Hintergrund
anzeigen zu lassen und alle anderen Gadget davor liegen?

Code: Alles auswählen

Procedure Load_Page()

  ImageGadget(#B_2, 0, 0, 500, 59, ImageID(#BGROUND)) 
  TextGadget(#B_3, 10, 10, 200, 40, "hello")

EndProcedure
Desweiteren habe ich es auch hiermit ausprobiert:

Code: Alles auswählen

Procedure Load_Page_License()
  
  StartDrawing(WindowOutput(#MAIN_WND))
     
    Box(0, 0, 500, 60 , $FFFFFF) 
    DrawText(10, 10, "hello")
    
  StopDrawing()
  
EndProcedure
Jedoch wenn das Fenster den Focus verliert, verschwindet auch das
gezeichnete. Gibt es eine Möglichkeit das statisch zu machen oder
muss ich die Felder dann immer wieder neu zeichnen? Wenn Ja,
wie kann ich dass denn angehen?

Bin dankbar für jede Hilfe.

Gruß,
Daniel

Verfasst: 07.08.2008 13:11
von bobobo
disable das imagegadget mit disablegadget()

das das "aufDasFensterGemalte" verschwindet ist normal.
Benutz für sowas möglichst immer ein imagegadget, damit hast du
solche Problem nicht.

(auch ein imagegadget kann man dynamisch bestücken indem
du ein bild malst Createimage ... und dieses dann dem imagegadget
zuweist)

Verfasst: 07.08.2008 13:29
von Kaeru Gaman
Gadgets haben keine Z-Order!
das wird von PB nicht unterstützt (es wird sogar eigentlich von Windows nicht wirklich unterstützt)

also, es ist einfach keine gute Idee, Gadgets übereinander zu packen.

Verfasst: 07.08.2008 13:35
von funk.munich
Hi zusammen,

danke für die Infos. Ich frage jetzt nach dem Event = #PB_Event_Repaint
und zeichne die Bereiche immer wieder neu.

Hintergrund war der, dass ich mich gefragt habe wie Installer das machen.
Dort existiert im Header meistens ein weißer Hintergrund und darauf
wird Text geschrieben.

Quick & Dirty Beispiel:

Code: Alles auswählen

OpenWindow(10,0, 0, 500, 500, "test", PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(10))


Repeat
  EventID = WaitWindowEvent()

  Select EventId
    Case #PB_Event_CloseWindow
      Quit = 1
    Case #PB_Event_Repaint
      StartDrawing(WindowOutput(10))
      Box(0, 0, 500, 60 , $FFFFFF) 
      DrawText(10, 10, "hello")
      StopDrawing()
  EndSelect

Until Quit = 1

End
Danke + Gruß,
Daniel

Verfasst: 07.08.2008 13:40
von Kaeru Gaman
funk.munich hat geschrieben:Hintergrund war der, dass ich mich gefragt habe wie Installer das machen.
Dort existiert im Header meistens ein weißer Hintergrund und darauf
wird Text geschrieben.
was meinst du denn jetzt? :?


btw:
es gibt auch ein Hintergrundbild als Fenstereigenschaft.
allerdings kann man das nicht nativ in PB setzen.
...und ich weiß nicht, welche API-Funktion dafür zuständig ist.

Verfasst: 07.08.2008 13:54
von funk.munich
Hi,

Installer wie NSIS, InstallShield etc. zeigen oben auf der Fenster Seite
meistens ein Logo, eine andere Hintergrundfarbe sowie einen Content Title.

Ich hatte mir mal einen Installer geschrieben und hing aber an diesem
Problem, dass bei mir der Text immer wieder verschwand.

Gruß,
Daniel

Verfasst: 07.08.2008 14:09
von Kaeru Gaman
du meinst so etwas ähnliches?

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 300,200, "La Demo")
CreateGadgetList(WindowID(0))
Frame3DGadget(0, -8,-8, 316,60, "")
TextGadget(1, 50,0, 250,50,"Title", #PB_Text_Center)
SetGadgetColor(1, #PB_Gadget_BackColor, $FFFFFF )

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow

Verfasst: 07.08.2008 14:35
von funk.munich
Hi Kaeru,

normalerweise ist es wie folgt (nach meinem Wissen) aufgebaut:

-----------------------------------------------------------------
#BackgroundColor_Or_Image#
<LOGO>
<TitleContent>
<ContentDescription>

-----------------------------------------------------------------

Das könnte ich mit Deinem Vorschlag so nicht bewältigen oder?

Ich habe das jetzt so mal versucht ...

Code: Alles auswählen

;-- Page_License.pbi
Enumeration #PB_Compiler_EnumerationValue
  #B_1
  #B_2
EndEnumeration

Procedure Redraw_License()

  StartDrawing(WindowOutput(#MAIN_WND))
     
    DrawText(10, 10, "license")
    
  StopDrawing()

EndProcedure

Procedure Load_Page_License()

  ImageGadget(#B_1, 0, 60, 500, 2, ImageID(#BORDER))
  ImageGadget(#B_2, 0, 0, 500, 59, ImageID(#BGROUND))
  
EndProcedure

Procedure UnLoad_Page_License()

  FreeGadget(#B_1) : FreeGadget(#B_2)

EndProcedure
Und wenn nun das Event = #PB_Event_Repaint passiert wird die Procedure "Redraw_License()" aufgerufen. So in etwa ...

Hast Du ggf. noch einen anderen Vorschlag?

Gruß,
Daniel

Verfasst: 07.08.2008 14:45
von bobobo
so? (auf repaint geschissen)

Code: Alles auswählen

CreateImage(1, 500, 60)
OpenWindow(10, 0, 0, 500, 500, "test", PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(10))
ImageGadget(1, 0, 0, 500, 60, ImageID(1))

Repeat
  EventID = WaitWindowEvent(100)
  i+10
  Select EventId
    Case #PB_Event_CloseWindow
      Quit = 1
    Case #PB_Event_Repaint
      
  EndSelect
  StartDrawing(ImageOutput(1))
    Box(0, 0, 500, 60, $FFFFFF)
    DrawText(10, 10, "hello "+Str(i))
  StopDrawing()
  SetGadgetState(1, ImageID(1))
  
Until Quit = 1

End

Verfasst: 07.08.2008 14:51
von Kaeru Gaman
> Das könnte ich mit Deinem Vorschlag so nicht bewältigen oder?

ich sehe dein Problem nicht...?

Code: Alles auswählen

; **********************
; *** Image erzeugen
; *** Für den Ablauf unwichtig
; **********************
CreateImage(0, 50,50)
  StartDrawing(ImageOutput(0))
    Box(0,0,50,50,$FF0000)
    For n=0 To 15
      Col = RGB(255-8*n,255-8*n,0)
      Line(0,n,50,50,col)
      Line(n,0,50,50,col)
    Next
  StopDrawing()
; **********************

OpenWindow(0, #PB_Ignore, #PB_Ignore, 300,200, "La Demo")
CreateGadgetList(WindowID(0))

; **********************
; *** Der kleine Trennrahmen zum Seitenkörper
  Frame3DGadget(0, -8,-8, 316,60, "")

; **********************
; *** Seitentitel mit weißem Hintergrund
  TextGadget(1, 50,0, 250,50,"License", #PB_Text_Center)
    SetGadgetColor(1, #PB_Gadget_BackColor, $FFFFFF )

; **********************
; *** Logo
  ImageGadget(2, 0, 0, 50, 50, ImageID(0))

; **********************
; *** Seitenkörper
Licen$ = "Dies soll eine Lizenz simulieren. Es ist also eine Simulatorlizenz." +#CRLF$
Licen$ + "Damit erhalten sie die Lizenz sum Simulieren, allerdings nicht, "
Licen$ + "eine Tötung zu simulieren oder einen Simulanten zu töten. " +#CRLF$
Licen$ + "Dafür benötigen Sie eine Doppelnull, greifen sie also im Zweifel zu ihrem Toiletten-Reiniger."

  TextGadget(3,8,64,284,128, Licen$,#PB_Text_Border)
    SetGadgetColor(3, #PB_Gadget_BackColor, $FFFFFF )

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
für so Details wie vertikales zentrieren des Textes, Schriftgröße ändern oder Scrollbar an einem Textgadget bemühe dann mal bitte die Boardsuche.