"transparentes" Label über Panel mit Hintergrund z

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Arne

Betreff: "transparentes" Label über Panel mit Hintergrund z

BeitragSa, Aug 18, 2007 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
Ist es möglich einen Text über ein Panel mit Hintergrundbild zu schreiben? Bei mir ist dort, wo das Label ist kein Bild mehr zu erkennen. Einen Befehl, um das Label abgesehen vom Text transparent zu machen habe ich nicht gefunden. Sieht also in etwa so aus:
Code: [AUSKLAPPEN]

SuperStrict

Local window:TGadget = CreateWindow("Test", 50, 50, 400, 400)

Local panel:TGadget = CreatePanel(10, 10, 300, 300, window)
SetPanelColor(panel, 255, 255, 255)

Local label:TGadget = CreateLabel("Label", 50, 50, 100, 18, panel)

While True
   WaitEvent
   
   Select EventID()
      Case EVENT_WINDOWCLOSE
         End
   End Select
Wend

Kann man da wohl was machen?
lg
 

ChristianK

BeitragSa, Aug 18, 2007 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit MaxGUI selbst geht das nicht. Da musst entweder die WinAPI benutzen oder gleich das Modul ändern.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Arne

BeitragSo, Aug 19, 2007 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit WinAPI kenne ich mich leider nicht aus und wie ich ein Modul umschreibe weiss ich auch nicht. Gibts eine alternative Lösung für das Problem? Ich werde es sonst mal mit einem Canvas probieren.
 

Dreamora

BeitragSo, Aug 19, 2007 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein es gibt keine Lösung dafür

Und inwiefern das Canvas eine Lösung sind sehe ich gerade nicht, da Canvas und drüber normale Gadgets nur Probleme bringt, keine Freude. (und umgekehrt machts noch weniger sinn weil Canvas = 3D Rendering)


Das einzige was du machen kannst ist total auf MaxGUI verzichten und zum Beispiel HighGUI3 zu nutzen und direkt alles im Grafikfenster machen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ChristianK

BeitragSo, Aug 19, 2007 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Nein es gibt keine Lösung dafür

Stimmt nicht!

Hier ein Beispiel:
Das Programm verarbeitet die WM_PAINT-Message und zeichnet den Text mit transparentem Hintergrund. Funktioniert im Moment nur mit die Default-Schriftart, sollte aber fürs erste reichen.

Code: [AUSKLAPPEN]
Framework brl.win32maxgui
Import brl.eventqueue
Import pub.win32

SuperStrict

' GUI erstellen
Local win:TGadget = CreateWindow( "Testfenster", 100, 100, 400, 300, Null, WINDOW_CLIENTCOORDS | WINDOW_TITLEBAR | WINDOW_HIDDEN )

   Local panel:TGadget = CreatePanel( 50, 50, 200, 150, win )
      SetPanelColor( panel, 255, 0, 0 )
      
   Local label:TGadget = CreateLabel( "Testlabel", 50, 50, 100, 15, panel )
      ' Label transparent machen
      MakeLabelTransparent( label )

ShowGadget( win )

' Hauptschleife
While True
   WaitEvent
   
   Select EventID( )
   
      Case EVENT_WINDOWCLOSE
         End
   
   End Select
Wend

' Funktionen
Function MakeLabelTransparent:Int( label:TGadget )
   ?win32
   
   If label = Null Return 0
   
   Local hwnd:Int = QueryGadget( label, QUERY_HWND )
   Local hwnd_parent:Int = GetParent_( hwnd )
   
   SetWindowLongA( hwnd_parent, GWL_STYLE, GetWindowLongA( hwnd, GWL_STYLE ) & ~WS_CLIPCHILDREN )
   
   SetWindowProc( hwnd, GWL_WNDPROC, LabelProc )
   
   ?
   
   Return 1
End Function

' WinAPI
?win32

Extern "win32"
   Function SetWindowProc:Int( hwnd:Int, longtype:Int, newlong:Int( hwnd:Int, msg:Int, wparam:Int, lparam:Int ) ) = "SetWindowLongA@12"
   Function SetBkMode:Int( hdc:Int, mode:Int )
   Function TextOutA:Int( hdc:Int, x:Int, y:Int, text:Byte Ptr, length:Int )
   Function GetWindowTextA:Int( hwnd:Int, text:Byte Ptr, length:Int )
End Extern

Function LabelProc:Int( hwnd:Int, msg:Int, wparam:Int, lparam:Int )
   Local hdc:Int
   
   Local text:Byte Ptr = MemAlloc( 1024 )
   Local length:Int

   Select( msg )
   
      Case WM_PAINT
         hdc = GetDC( hwnd )
         SetBkMode( hdc, 1 )
         SelectObject( hdc, GetStockObject( 17 ) )
         length = GetWindowTextA( hwnd, text, 1024 )
         TextOutA( hdc, 0, 0, text, length )
   
   End Select
   
   MemFree( text )

   Return DefWindowProcA( hwnd, msg, wparam, lparam )
End Function

?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group