Inoffizielles deutsches Xbase-Forum • Thema anzeigen - XbpCombobox und BG [Erledigt]

XbpCombobox und BG [Erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

XbpCombobox und BG [Erledigt]

Beitragvon Jan am Sa, 30. Jan 2010 8:02

Ich möchte den SLE-Teil einer Combobox farbig hinterlegen, sobald der den Fokus bekommen hat. Das funktioniert soweit auch. Aber auch der Listboxteil wird eingefärbt. Was ich wiederum nicht möchte.

Weiß jemand, wie ich wirklich nur den SLE-Teil einfärben kann?

Jan
Zuletzt geändert von Jan am Sa, 13. Mär 2010 9:57, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
1. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4250
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: XbpCombobox und BG

Beitragvon Martin Altmann am Sa, 30. Jan 2010 12:49

Hmm.
Vorschläge: BYO oder Ownerdrawing.
Wie färbst Du denn ein? Eigentlich kann man doch den SLE und den Listbox-Teil explizit getrennt ansprechen...
Z.B. oObjekt:XbpSLE:EditBuffer() bzw. oObjekt:XbpListbox:GetData()
Aber was spricht dagegen, den Hintergrund des geöffneten Controls einzufärben? Hat doch schließlich auch den Fokus...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Berlin/Brandenburg
Mitglied der XUG Osnabrück
2. Vorsitzender des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 7620
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin

Re: XbpCombobox und BG

Beitragvon Jan am Sa, 30. Jan 2010 13:41

Hallo Martin,

ja, ich spreche den SLE-Teil gesondert an für die Farbe. Trotzdem wird der Listteil mit eingefärbt.

Klar hast Du Recht, das auch der Listteil gewissermaßen den Focus hat. Aber das knallt dann farbenmäßig ganz schön rein. Von daher wäre es mir lieber, wenn das nicht farbig wäre.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
1. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4250
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: XbpCombobox und BG

Beitragvon Herbert am So, 31. Jan 2010 13:25

Ist so
Code: Alles auswählen
      ComboBox:XbpSLE:setColorFG(cColor[1,1])
      ComboBox:XbpSLE:setColorBG(cColor[1,2])

färbt alles ein
Bei
Code: Alles auswählen
      ComboBox:setColorFG(cColor[1,1])
      ComboBox:setColorBG(cColor[1,2])

kann ichs noch verstehen.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Herbert
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 313
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Langenthal CH

Re: XbpCombobox und BG

Beitragvon AUGE_OHR am Mo, 01. Feb 2010 10:23

Jan hat geschrieben:Ich möchte den SLE-Teil einer Combobox farbig hinterlegen, sobald der den Fokus bekommen hat
hm ... wenn das SLE den Focus hat ist die Farbe doch identisch wie der "Balken" in der Listbox...

man müsste also die Farbe des "Balken" ändern, aber das ich wohl die Menu System Farbe ...

und wie wäre es wenn du, ähnliche wie bei einem Tab-Header, einen "orangen" Balken anbringst ?
Code: Alles auswählen
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"

*#PRAGMA LIBRARY( "ASCOM10.LIB" )

PROCEDURE APPSYS
RETURN
PROCEDURE MAIN
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oDlg, i

   oDlg := NewForm():new()
   oDlg:create()

   FOR i:=1 TO 10
      oDlg:oCombo1:additem("Hallo "+STR(i))
      oDlg:oCombo2:additem("Hallo "+STR(i))
   NEXT

   oDlg:oCombo1:setdata("Hallo "+STR(7))
   oDlg:oCombo2:setdata("Hallo "+STR(5))

   Setappfocus(oDlg)

   nEvent := 0
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

RETURN

CLASS NewForm FROM _NewForm
   EXPORTED:
      METHOD init
      METHOD create

      METHOD PaintFrame
ENDCLASS

METHOD NewForm:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::_NewForm:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
RETURN self

METHOD NewForm:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::_NewForm:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::show()
RETURN self

METHOD NewForm:PaintFrame(oObj,lOnOff)
LOCAL oPs   := oObj:lockPS()
LOCAL aPos  := oObj:XbpSLE:currentpos()
LOCAL aSize := oObj:XbpSLE:currentSize()
LOCAL aAttr := Array( GRA_AA_COUNT )

DEFAULT lOnOff TO .T.

   IF lOnOff
      aAttr [ GRA_AA_COLOR ] := GraMakeRGBColor({255,203,153}) // light orange
   ELSE
*      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_3DHIGHLIGHT
*      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_3DLIGHT
*      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_3DFACE
      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_3DSHADOW
*      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_3DDARKSHADOW
*      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_SHADOWHILITEBGND
*      aAttr [ GRA_AA_COLOR ] := XBPSYSCLR_SHADOWHILITEFGND
   ENDIF

   DO CASE
      CASE oObj:type = XBPCOMBO_SIMPLE
         aPos[1]  -= 6
         aPos[2]  -= 2

         aSize[1] += 2
         aSize[2] -= 2

      CASE oObj:type = XBPCOMBO_DROPDOWN
         aPos[1]  -= 10

         aSize[1] -= 2
         aSize[2] += 4

      CASE oObj:type = XBPCOMBO_DROPDOWNLIST
   ENDCASE


   GraSetAttrArea( oPs, aAttr )
*   GraBox( oPs, aPos, aSize, GRA_OUTLINE  ) // Rechteck umrandet
   GraBox( oPs, aPos, aSize, GRA_FILL  ) // Rechteck füllen

   oObj:unlockPS()

RETURN

CLASS _NewForm FROM XbpDialog
   EXPORTED:
      VAR editControls

      * Enthaltene Kontrollelemente
      VAR oCombo1
      VAR oCombo2

      METHOD init
      METHOD create
ENDCLASS

METHOD _NewForm:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   DEFAULT oParent  TO AppDesktop(), ;
           aPos     TO {328,118}, ;
           lVisible TO .F.

   DEFAULT aPP TO {}
   AAdd ( aPP, { XBP_PP_COMPOUNDNAME, "8.Arial" } )

   IF Empty(aSize) == .T.
      IF IsMemberVar(self,"ClientSize") == .T.
         aSize := {0,0}
      ELSE
         aSize := {179,230}
      ENDIF
   ENDIF

   ::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   IF aSize[1] == 0 .AND. aSize[2] == 0
      ::XbpDialog:ClientSize := {171,204}
   ENDIF
   ::XbpDialog:taskList := .T.
   ::XbpDialog:title := "Demo Combobox"

   ::editControls := {}

   ::oCombo1 := XbpCombobox():new( ::drawingArea, , {8,108}, {148,80} ) // , { { XBP_PP_BGCLR, GRA_CLR_CYAN }, { XBP_PP_FGCLR, GRA_CLR_YELLOW } } )
   ::oCombo1:tabstop := .T.
   ::oCombo1:type := XBPCOMBO_SIMPLE
   ::oCombo1:XbpSLE:setcolorBG( GRA_CLR_YELLOW )
   ::oCombo1:XbpListBox:setcolorBG( GRA_CLR_WHITE )

   ::oCombo2 := XbpCombobox():new( ::drawingArea, , {12,20}, {140,80} ) //, { { XBP_PP_BGCLR, GRA_CLR_BLUE }, { XBP_PP_FGCLR, GRA_CLR_WHITE } } )
   ::oCombo2:tabstop := .T.
   ::oCombo2:type := XBPCOMBO_DROPDOWN
   ::oCombo2:XbpSLE:setcolorBG( GRA_CLR_YELLOW )
   ::oCombo2:XbpListBox:setcolorBG( GRA_CLR_WHITE )

   ::oCombo1:setInputFocus  := {|| ::PaintFrame(::oCombo1,.T.) }
   ::oCombo2:setInputFocus  := {|| ::PaintFrame(::oCombo2,.T.) }
   ::oCombo1:killInputFocus := {|| ::PaintFrame(::oCombo1,.F.) }
   ::oCombo2:killInputFocus := {|| ::PaintFrame(::oCombo2,.F.) }

RETURN self


METHOD _NewForm:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::oCombo1:create()
   ::oCombo2:create()

RETURN self
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4402
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: XbpCombobox und BG

Beitragvon Jan am Mo, 01. Feb 2010 11:06

Hallo Jimmy,

Danke für Deine Mühe. Aber das ist nicht das, was ich brauche. Ich färbe zur Übersichtlichkeit den SLE, der den Fokus hat, ein. Damit man den auch nach Seitenwechseln schnell wiederfindet. Und da alles gleich aussehen soll sollte das SLE der Combobox auch einfach nur farbig werden.

Übrigens ist der gesamte Listteil der Combobox farbig hinterlegt, nicht nur der aktuelle Eintrag.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
1. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4250
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: XbpCombobox und BG

Beitragvon AUGE_OHR am Di, 02. Feb 2010 3:25

hi,

ich habe es auch nochmals mit Ownerdraw probiert, aber an das SLE kommt ma da gar nicht "ran".

in der Online Knowledge Base habe ich das gefunden
PDR 2981
Symptom:
XbpCombobox does not tell when the SLE part get focus
Description:

It is not possible to determine whether the SLE part or the LISTBOX part
of a XbpCombobox received the input focus.


Solution:

This is by design.

On Win32 platforms the SLE part does always get the input focus, the listbox
part does not receive the input focus although it looks like it does.
wenn man also gar nicht bestimmen kann ob das SLE den Focus hat so wird man kaum darauf "reagieren" können.

... mir fällt gerade ein das wir doch mal das Thema "schmales SLE in Combobox" hatten.
Dort wird mittels SendMessageA( oCombo:getHWND() ... ) gearbeitet ... bei Progressbar / Marquee ging die "Farbe" (grün,gelb,rot) auch nur über SendMessageA() ... ob man damit was anstellen kann ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4402
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: XbpCombobox und BG

Beitragvon Günter Beyes am Mo, 08. Feb 2010 13:37

Hallo Jan,

sieht so aus, als ob Alaska nicht alle Möglichkeiten der Windows-Combobox implementiert hat. Die unterstützt durchaus unterschiedliche Farben für SLE-Teil und List-Teil . Hast du noch Bedarf?

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

Re: XbpCombobox und BG

Beitragvon Jan am Mo, 08. Feb 2010 13:51

Hallo Günter,

da ist wieder der API-Mann :D

Ja, Bedarf besteht noch. Ich hab mich nur die vergangenen Tage nicht kümmern können, da es eine andere, wichtigere Baustelle gab.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
1. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4250
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: XbpCombobox und BG

Beitragvon Günter Beyes am Do, 11. Feb 2010 22:32

Hallo Jan,

:oops: :roll:

ein kleines Beispiel findest du hier: http://www.xbaseforum.de/viewtopic.php?f=16&t=4037

Gruß,
Günter

Ex_aufgeklappt[1].png
Ex_aufgeklappt[1].png (12.21 KiB) 314-mal betrachtet


gegenüber

Klassisch[1].png
Klassisch[1].png (11.03 KiB) 313-mal betrachtet
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 313
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: XbpCombobox und BG

Beitragvon AUGE_OHR am Fr, 12. Feb 2010 0:30

Günter Beyes hat geschrieben:ein kleines Beispiel findest du hier: http://www.xbaseforum.de/viewtopic.php?f=16&t=4037
WOW
habe nicht gedacht das man da wirklich per API "gegen" das Design von Windows was machen kann ;)

Frage : funktioniert das ganze auch mit Xbase++ Ownerdraw ?

wenn ich den Source "richtig" verstehe besteht die Tatsache ComboBG = SleBG weiterhin d.h. die SLE Farbe wird durch die Combobox gesetzt.

Dann kommt der "Trick" des "übermalen" per
DllExecuteCall( CreateSolidBrush, ::ListColorBG_API )
und der Eventhandler für die Listbox.

ich würde ja den ganzen Listbox Teil "selbst" zeichnen (wollen) z.b. Icon / Gradient ... würde das gehen ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4402
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: XbpCombobox und BG

Beitragvon Günter Beyes am Mo, 15. Feb 2010 23:54

Hallo Jimmy,

... "gegen" das Design von Windows ...


mitnichten; die Combobox des .NET-Frameworks unterstützt das von Haus aus, soweit ich gehört habe. :-)

funktioniert das ganze auch mit Xbase++ Ownerdraw ?


Was soll es da bewirken? Bei Ownerdrawing liegt es doch eh ganz in deiner Hand, mit welchen Farben die Items gezeichnet werden. Siehe oPS:setColor(), oPS:setAttrString().

ich würde ja den ganzen Listbox Teil "selbst" zeichnen (wollen) z.b. Icon / Gradient ... würde das gehen ?


Mit :drawItem() hast du alle Möglichkeiten, schätze ich. Eine Bitmap passender Größe ließe sich sicherlich bei :drawItem streifenweise als Item-Hintergrund darstellen; einen Farbverlauf könnte man vorab als passende Bitmap ablegen und dann genauso verfahren.

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

Re: XbpCombobox und BG

Beitragvon AUGE_OHR am Mi, 17. Feb 2010 2:55

Günter Beyes hat geschrieben:Mit :drawItem() hast du alle Möglichkeiten, schätze ich. Eine Bitmap passender Größe ließe sich sicherlich bei :drawItem streifenweise als Item-Hintergrund darstellen; einen Farbverlauf könnte man vorab als passende Bitmap ablegen und dann genauso verfahren.
aha ... ja ... "streifenweise" ... das muss ich mal ausprobieren, danke für die Idee !
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4402
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: XbpCombobox und BG

Beitragvon Jan am Sa, 13. Mär 2010 9:56

Hallo Günter,

nach ein paar Anlaufproblemen sieht das jetzt sehr gut aus! Das wirkt wesentlich professioneller als in der Xbase++-Standardversion. In Deinem Beispiel mit dem dunkelblauen Hintergrund geht das ja noch so gerade, aber ich markiere die SLE gelb. Und das war dann wirklich zum Schreien.

Vielen Dank für den Code und die obj-Datei dazu.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
1. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 4250
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle


Zurück zu GUI

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast