Seite 3 von 4

Verfasst: 04.05.2007 23:05
von ts-soft
>> Habe ich das richtig verstanden
schwere Geburt :lol: , ja haste Du :wink:

Verfasst: 04.05.2007 23:19
von HeX0R
>>Ist es möglich fest zu legen das das Bild unter die anderen Gagedelemente kommt, ich meinte das mein Bild immer im Hintergrund bleibt?

Das geht schon, dazu kommst du aber um ein wenig Win-Api nicht rum (oder SkinWin-Lib (o.ä.) im PBOSL). Beides finde ich persönlich etwas zu heftig für dieses Projekt.

Vielleicht solltest du mal ein wenig mit SetGadgetColor() und SetWindowColor() spielen. Evtl. noch verschiedene ContainerGadgets benutzen, deren Hintergrund du dann auch noch farblich umgestalten kannst.

Verfasst: 04.05.2007 23:27
von Fluid Byte
Das geht schon, dazu kommst du aber um ein wenig Win-Api nicht rum (oder SkinWin-Lib (o.ä.) im PBOSL)
Nah, dazu brauchste keine extra LIB's. Das sind lediglich zwei Befehle: CreatePatternBrush_() und SetClassLong_(). Aber wie du gesagt hast ist es wohl besser sich erst mal mit den Basics zu beschäftigen anstatt mit der API zumzudaddeln.

Verfasst: 05.05.2007 15:08
von duli
Danke für die Hinweise :allright:

Für mich ist das aber ziemlich zentrall Oberflächen mit Hintergrundbildern, dass wird in den meinsten Anwendungen die ich mache wichtig sein, will doch etwas Creatives erschaffen und nicht nur Flächenfarben verwenden.

Ist es möglich das die Textgadgets so zu machen das sie transparent sind?

Danke für euere Aufmerksamkeit.

gruss Duli

Verfasst: 05.05.2007 17:30
von duli
Hallo zusammen

Ich habe noch mehr im Forum gesucht und bin mit dem Begriff Durchsichtig fündig geworden.

Ich habe diesen Code ausprobiert, er macht genau was ich will, aber ich habe keine Ahnung warum.

könnte mir jemand erklären wieso und wie es funktioniert, danke.

Code: Alles auswählen

Procedure WCB(WindowID, Message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  Select Message
   Case #WM_CTLCOLORSTATIC
      Select lparam
      Case GadgetID(1)
         SetBkMode_(wparam,#TRANSPARENT)
         ProcedureReturn GetStockObject_(#HOLLOW_BRUSH)
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure



CreateImage(0, 100,100)
StartDrawing( ImageOutput(0) )
  Circle(0,0,110,$00ff00)
StopDrawing()

hWin=OpenWindow(0, 50,150,400,400, "")
  CreateGadgetList(hWin)
  ImageGadget(0, 0,0,  200,100, ImageID(0) , #PB_Image_Border)
  TextGadget(1, 10,20, 300,20, "hach wie lustig, ich bin ja doch durchsichtig", $0)
  TextGadget(2, 10,40, 300,20, "hach wie lustig, ich bin nicht durchsichtig", $0)
  SetGadgetColor(1, #PB_Gadget_FrontColor, $009900)
  SetGadgetColor(2, #PB_Gadget_FrontColor, $009900)
  SetWindowCallback(@WCB(),0) 
 
Repeat
  event=WindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      quit=1
  EndSelect
Until quit

Verfasst: 05.05.2007 18:21
von Fluid Byte
Ich gerade zu mundfaul und callbacks kennst du ja schon:

MSDN WM_CTLCOLORSTATIC

Verfasst: 06.05.2007 15:19
von duli
:mrgreen: Jetzt hat es mir gedämmert, aber gibt es kein PB Flag das dies direkt macht. :freak:

Wenn ich es richtig verstanden habe kann in ich in Gadgets, Flags setzten mit welchen man bestimmte Werte und Einstellungen festgelegt werden.
Wenn ich Hintergrundfarbe festelgen kann, gibt es den keinen Farbwert welcher Durchsichtig bedeuted.

TextGadget(#Gadget, x, y, Breite, Hoehe, Text$ [, Flags])
#PB_Gadget_BackColor

Oder auch im Gadget
SetGadgetColor(0, #PB_Gadget_BackColor, $00FFFF) einen Wert welcher den Gadgethintergrund Durchsichtig macht. :(

Verfasst: 10.07.2007 00:00
von Bayernhans
Warum klappt so etwas in Pb nicht ? OHNE Imagegadget !

Code: Alles auswählen

Repeat
  OpenWindow(0, 100, 250, 600, 580, "Background direct included", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#WS_CLIPCHILDREN)
  If LoadImage(0, "irgendein-Bitmap.bmp") <> 0  ; "irgendein Bitmap"-Bild ins gleiche Verzeichnis wie diese PB-PRogramm stellen.
    ID_Background1=ImageID(0) ; Geladenes Bild ...
    StartDrawing(WindowOutput(0)) ; ... direkt zum Fenster ausgeben ...
    DrawImage(ID_Background1, 0, 0) ; und dort zeichnen
    StopDrawing()
  Else
    MessageRequester("Error","Kann Bitmap nicht finden/laden !!", #PB_MessageRequester_Ok)
    Break
  EndIf 
Until event=#PB_Event_CloseWindow

Was ist falsch ? Ist die Idee falsch, das Image (bmp) direkt ins Window zu zeichnen und dann z. B. Gadgets drüberzulegen, usw.

Verfasst: 10.07.2007 00:26
von D@nte
Was ist falsch ?
Fast dein ganzer Source...

Code: Alles auswählen

If OpenWindow(0, 100, 250, 600, 580, "Background direct included", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#WS_CLIPCHILDREN)
  If LoadImage(0, #PB_Compiler_Home + "Examples\Sources\Data\Background.bmp")
    ID_Background1=ImageID(0)
    StartDrawing(WindowOutput(0))
    For x = 0 To WindowWidth(0) / ImageWidth(0)
      For y = 0 To WindowHeight(0) / ImageHeight(0)
        DrawImage(ID_Background1, x * ImageWidth(0), y * ImageHeight(0))
      Next y
    Next x
    StopDrawing()
  Else
    MessageRequester("Error","Kann Bitmap nicht finden/laden !!", #PB_MessageRequester_Ok)
    End
  EndIf

  Repeat

    Event = WaitWindowEvent(100)

    If event = #PB_Event_CloseWindow Or GetAsyncKeyState_(#VK_ESCAPE)
      quit = 1
    EndIf

  Until quit = 1

EndIf
Warum klappt so etwas in Pb nicht ?
Geht doch ohne ImageGadget, man darf's nur nicht minimieren, aus dem Desktop-Bereich schieben oder mit einem anderen Fenster überlagern...

Verfasst: 10.07.2007 01:07
von mk-soft
Zu GIF noch mal. Ich glaube, da liegt noch eine Lizenz dran.
Jede Programm das dieses Format verwendet darf dafür blechen.