Hintergrundbild im Programm

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Habe ich das richtig verstanden
schwere Geburt :lol: , ja haste Du :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag 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
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag 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
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich gerade zu mundfaul und callbacks kennst du ja schon:

MSDN WM_CTLCOLORSTATIC
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag 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. :(
Man kann nicht wissen was man nicht weiss..
Bayernhans
Beiträge: 20
Registriert: 09.04.2006 15:56
Wohnort: Bayern

Beitrag 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.
vitamine, Vitamine, VITAMINE, ...
Vitamin PB - the best
PB 4.x
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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...
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten