Transparents von XbpStatic-Controls

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Transparents von XbpStatic-Controls

Beitrag von Lewi »

Moin moin,
ich beschäftige mich mit der Frage, ob sich ein xbpStatic-Object transparent über eine Bitmap legen lässt, so das nur die Caption des xbpStatic-Objectes sichtbar ist.

Laut Online-Hilfe kann für ein xbpStatic-Object „die spezielle Farbe XBPSYSCLR_TRANSPARENT zusammen mit XBP_PP_BGCLR dazu verwendet werden, um den Hintergrund eines Xbase Part transparent zu schalten.“

Beispiel:

Code: Alles auswählen

Func CreateTransparentStatic( oDlg )
   Local oT	
   oT       := XbpStatic():new( oDlg:drawingArea, , {260,250}, {80,20},{;
                                           {XBP_PP_FGCLR, GRA_CLR_WHITE }, ;
                                           {XBP_PP_BGCLR, XBPSYSCLR_TRANSPARENT  }} )
   oT:caption := "Test"
   oT:clipSiblings := .T.
   oT:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT
   oT:Create()

Return ( oT ) 
Die Funktion liefert eine Static-Control zurück, dass mit der Hintergrundfarbe des Parent angezeigt wird, von „Transparents“ jedoch keine Spur.

Sehe ich das richtig, dass mit „XBPSYSCLR_TRANSPARENT“ ein xbpStatic-Control „nur“ die Hintergrundfarbe des Parent annimmt?


Gruß,
Olaf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Lewi,

ja so müsste das sein.
Ich würde versuchen ein XbpBitmap oder XbpStatic mit der Bitmap dahin zu setzen wo die Grafik sein soll und dann diese als Parent für den PushButton benutzen. Ansonsten gab es mal Infos für einen Pushbutten, der eine Grafik statt Text anzeigt, wo weiß ich jetzt aber nicht.
Gruß
Hubert
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hi Lewi

ich hab das schonmal gemacht. Also Prinzip ein Bild mit einer speziellen Farbe (irgendwo ein abgerundete Ecke). Eigentlich hab ich dazu immer nur *.PNG's benutzt.

Und folgender Code

Code: Alles auswählen

//-- Pressentationsspace anfordern
oPS     := oApp:lockPS()

cPath   := "forms\HinterGr\"
cEndung := ".png"
nTextColor := GRA_CLR_YELLOW
iCusrsor:= 12041
aClrTransparent := {255,0,255}

cBmpHotkey    := cPath+"hotkey"+cEndung
oLblHotkey         := XbpStatic():new( oApp:Drawingarea,, aPos,{385,230}  )
oLblHotkey:type    := XBPSTATIC_TYPE_BITMAP

if(File(cBmpHotkey))
   oBmp:= XbpBitmap():new():create( oPS )
   oBmp:loadFile(cBmpHotkey)
   oBmp:transparentClr := GraMakeRGBColor(aClrTransparent)
   oLblHotkey:caption := oBmp
endif
oLblHotkey:create()
		
oLblButton1:= XbpStatic():new( oLblHotkey,, {iX, 10+8*21+10 },aLblSize  )
oLblButton1:setFontCompoundName("12.Arial")
oLblButton1:caption := "TITEL"
oLblButton1:lbClick := {|| NIL }
oLblButton1:setPointer( ,iCusrsor,XBPWINDOW_POINTERTYPE_POINTER )
oLblButton1:setColorFG( nTextColor )
oLblButton1:create()
Grüße Rolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Beitrag von brandelh »

Rolf hat geschrieben:Eigentlich hab ich dazu immer nur *.PNG's benutzt.
wenn man eine Bitmap mit max 256 Farben braucht, sind die GIFs ideal und sehr schnell - besonders wenn man diese mit XbpBitmp speichert.
Mittlerweile ist auch das Patent ausgelaufen und man kann sie bedenkenlos verwenden.
Gruß
Hubert
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hi Hubert

ich glaub es war damals so das ich von BMP über JPG auf PNG gekommen bin, da dies mit der Transparenz nur bei PNG funktionierte. GIF habe ich nicht ausprobiert.

--> Korigiere geht auch bei BMP

Bin mir aber leider nicht mehr ganz so sicher. Mein Chef würde sagen ist historisch gewachsen.

Grüße Rolf
Zuletzt geändert von Rolf am Mo, 06. Nov 2006 12:52, insgesamt 1-mal geändert.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hallo Rolf,
Dein Beispiel funktioniert bei mir irgendwie nicht. Da Dein Beispiel nicht deklarierte Variablen nutzt,habe ich den Code angepaßt, der aber "TITEL" nicht anzeigt:

Code: Alles auswählen

Func ShowImage( oDlg )

Local oPs
Local nTextColor        := GRA_CLR_YELLOW
Local iCusrsor          := 12041
Local aClrTransparent   := {255,0,255}
Local oLblHotkey
Local oBmp
Local oLblButton1

oPS := oDlg:lockPS()

oLblHotkey := XbpStatic():new( oDlg:Drawingarea,, {160,180},{200,100}  )
oLblHotkey:type := XBPSTATIC_TYPE_BITMAP

oBmp := XbpBitmap():new():create( oPS )
oBmp:loadFile("bg.png")
oBmp:transparentClr := GraMakeRGBColor(aClrTransparent)
oLblHotkey:caption := oBmp
oLblHotkey:create()

oLblButton1:= XbpStatic():new( oLblHotkey,, {260, 230 },{80,24}  )
oLblButton1:setFontCompoundName("12.Arial")
oLblButton1:caption := "TITEL"
oLblButton1:setColorFG( GRA_CLR_WHITE )
oLblButton1:create()

Return ( NIL )
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hi Lewi

Sorry der Code stammt leider aus einem viel komplexerem Projekt und ich hab ihn nur im Notepad zusammengestückelt.

Ich denke es liegt an der Positionierung des oLblButton1 auf oLblHotkey nimm, da bitte mal als Position {1,1}.

Ich hab dem oLblButton1 erst immer eine sichtbare Hintergrundfarbe (GRA_CLR_RED) gegeben um zu sehen wo es letztendlich liegt.

Grüße Rolf
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Moin Olaf,

probiere doch alternativ die Bitmapbeschriftung im Paint-Handler
des XbpStatic-Objekts, das die Bitmap beinhaltet, auf die Bitmap zu zeichnen.

Code: Alles auswählen

oCanvas := XbpStatic():New( oDlg:drawingArea, , aPos, aSize )
oCanvas:Type     := XBPSTATIC_TYPE_BITMAP
oCanvas:Caption  := oBmp
oCanvas:paint := {|a,b,o| drawCaption(o, "Test") }


PROCEDURE drawCaption( o, cCaption )

LOCAL oPS := o:lockPS()

GraSetColor( oPS, GRA_CLR_WHITE, XBPSYSCLR_TRANSPARENT )
GraStringAt( oPS, {10,10}, cCaption )

o:unlockPS( oPS )
RETURN

Gruß, Günter
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Ok, jetzt wird "TITEL" angezeigt. Gleichwohl, die Caption überdeckt dennoch mit der Hintergrundfarbe das Image.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hi Günter,
deine Lösung ist mir wohl bewußt.

Ich entwickle gerade eine alternative Pushbuttom-Klasse, die Eigenschaften wie :
- flat
- Nutzung von ICON´s
- Text unterhalb einer Bitmap
- graphischen Hintergrund

unterstützen soll.

Bei der Beschriftung von Bottons mit den GRA-Funktionen gibt es manchmal ( mir unerklärliche) Probleme beim re-painten. Insofern dachte ich im Zuge von Bottons mit graphischen Hintergrund an einer Lösung mit transparenten Static´s.

Gruß
Olaf
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hi Lewi

Das hab ich noch vergessen steht weiter unten bei mir im Code.

Code: Alles auswählen

oLblHotkey:setColorBG(XBPSYSCLR_TRANSPARENT)
Grüße Rolf
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Beitrag von Sören »

Hallo Olaf,

Nur so eine Idee:

Die Static mit dem Image hat doch denselben Parent wie die Static mit der Caption!? Wenn dem so ist, setzt' doch einfach mal bei der Caption-Static ::clipSiblings := .T.
Bei solchen Überlagerungsgeschichten ist es immer ratsam ein bisschen mit den ::clip... - Einstellungen zu spielen. Jedenfalls ist das meine Erfahrung.

Tschüs,
Sören
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hey Rolf!

Heureka! Das ist es. Funktioniert einwandfrei!

Danke und viele Grüße
Olaf
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Olaf,

Bei der Beschriftung von Buttons mit den GRA-Funktionen gibt es manchmal ( mir unerklärliche) Probleme beim re-painten.
Haben diese Probleme eventuell mit MsgBox(), ConfirmBox(), XbpPrintDialog(), XbpFileDialog() und Konsorten zu tun?

Gruß, Günter
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Günter, nein.

Ich programmiere eine eigene Pushbotton-Klasse, die von der xbpstatic-Klasse abgeleitet ist.

Bei der xbpPushbottom-Klasse vermisse ich einige visuelle Stile wie FLAT-Button, Text unterhalb einer Bitmap oder die Nutzung von ICON´s. Also habe ich mich im Urlaub rangesetzt und eine Lösung entwickelt.

Im Prinzip steht meine Klasse. Jetzt kommt das "fein-tuning".
Antworten