XbpImagebutton() aus Service Pack 1

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten

ich benutze XbpImagebutton() aus Service Pack 1

ja
1
25%
nein
2
50%
habe eine eigene Class
1
25%
nutze eine 3-PP Class
0
Keine Stimmen
 
Insgesamt abgegebene Stimmen: 4

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

XbpImagebutton() aus Service Pack 1

Beitrag von AUGE_OHR »

hi,

ich habe mir den Source mal genauer angesehen und Fragen "wie" User es verwenden ?
es gibt da 3 iVAR

Code: Alles auswählen

   oXbp:CaptionLayout:= XBP_LAYOUT_TEXTBOTTOM
   oXbp:TextAlign    := XBPALIGN_HCENTER
   oXbp:ImageAlign   := XBPALIGN_HCENTER
in diesem Fall soll der Text unter einem Image erscheinen.

Frage : setzte jemand o:TextAlign oder o:ImageAlign auf was anderes als XBPALIGN_HCENTER ?

im Grunde benötige ich doch nur die o:CaptionLayout:= XBP_LAYOUT_TEXT* denn der Rest ergibt sich dadurch automatisch, oder ?

Code: Alles auswählen

      DO CASE
         CASE ::TextAlign = XBP_LAYOUT_TEXTLEFT    ; olist:uAlign := BUTTON_IMAGELIST_ALIGN_RIGHT
         CASE ::TextAlign = XBP_LAYOUT_TEXTTOP     ; olist:uAlign := BUTTON_IMAGELIST_ALIGN_BOTTOM
         CASE ::TextAlign = XBP_LAYOUT_TEXTBOTTOM  ; olist:uAlign := BUTTON_IMAGELIST_ALIGN_TOP
         CASE ::TextAlign = XBP_LAYOUT_TEXTRIGHT   ; olist:uAlign := BUTTON_IMAGELIST_ALIGN_LEFT
      OTHERWISE
         olist:uAlign := BUTTON_IMAGELIST_ALIGN_CENTER
      ENDCASE
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: XbpImagebutton() aus Service Pack 1

Beitrag von Werner_Bayern »

Servus Jimmy,

ich setze den immer auf XBP_LAYOUT_TEXTRIGHT, damit die Grafik links und der Text rechts erscheint.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpImagebutton() aus Service Pack 1

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:ich setze den immer auf XBP_LAYOUT_TEXTRIGHT, damit die Grafik links und der Text rechts erscheint.
also benötigst du die beiden anderen iVAR

Code: Alles auswählen

   oXbp:TextAlign    := default
   oXbp:ImageAlign   := default
mit den Default Werten und musst die für deine Zwecke nicht ändern wie ich es auch denke ...

Frage : täusche ich mich oder "fehlt", beim "drüber fahren", der "Hover" Effekt bei XbpImagebutton() ?
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: XbpImagebutton() aus Service Pack 1

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:also benötigst du die beiden anderen iVAR

Code: Alles auswählen

   oXbp:TextAlign    := default
   oXbp:ImageAlign   := default
mit den Default Werten und musst die für deine Zwecke nicht ändern wie ich es auch denke ...

Frage : täusche ich mich oder "fehlt", beim "drüber fahren", der "Hover" Effekt bei XbpImagebutton() ?
Korrekt, diese lasse ich auf default-Werte.
Ja, der Hover-Effekt fehlt, leider.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpImagebutton() aus Service Pack 1

Beitrag von AUGE_OHR »

ich hatte ja das Bild geposted
Button_Pushlike.JPG
Button_Pushlike.JPG (36.35 KiB) 4389 mal betrachtet
und gefragt was für Buttons es in der untersten Reihe wären ? wer hat eine Idee ?

ich hab nun mein native DXE_Button in der 1st Version fertig und wollte die letzten "Abstimmung" mit XbpImageButton() vornehmen.

Frage : benutzt jemand XBP_DRAWSTATE_DISABLED ?
... und was ist der Unterschied zu XBP_DRAWSTATE_GRAYED ?

nun steht das, bei XbpImagebutton(), im Zusammenhang mit den Bitmaps ( Icon geht wohl nicht ? )

Code: Alles auswählen

   VAR           Image
   VAR           HotImage              // das "fehlt" ... auch wegen der Reihenfolge in einer Imagelist
   VAR           SelectedImage
   VAR           DisabledImage
tja ... wer das geschrieben hat ( Alaska ) muss sich fragen lassen ob er "keine Plan" von visual Style hat oder was da soll ... [-X
wieso ? weil es, für einen Pushbutton, 5 visual Style Parts gibt und zwar in einer von Windows definierten Reihenfolge :!:

Code: Alles auswählen

#define  PBS_NORMAL     1 // 0x00000001
#define  PBS_HOT        2 // 0x00000002
#define  PBS_PRESSED    3 // 0x00000003
#define  PBS_DISABLED   4 // 0x00000004
#define  PBS_DEFAULTED  5 // 0x00000005
#define  PBS_STYLUSHOT  6 // nur für Tablet PC
der 2nd "Fehler" ist die nicht Verwendung einer Imagelist ... denn da gibt es einen Zusammenhang mit den 5 Style Parts #-o
auch liefert mir GraBackground() IMHO keinen "hover" Effect ... es ist ja auch keine iVar dafür vorhanden.

bei Ownerdraw liefert mir aInfo[XBP_DRAWINFO_STATE] für einen XbpPushbutton

Code: Alles auswählen

  XBP_DRAWSTATE_SELECTED     Objekt ist gegenwärtig ausgewählt (gedrückt)       
  XBP_DRAWSTATE_DISABLED     Objekt ist gegenwärtig deaktiviert                 
  XBP_DRAWSTATE_FOCUS        Objekt hat gegenwärtig den Eingabefokus            
  XBP_DRAWSTATE_DEFAULTITEM  Objekt ist Standard-Dialogelement des Formulars   
zurück wobei es folgenden Konstanten in Xbp.CH gibt

Code: Alles auswählen

#define XBP_DRAWSTATE_NORMAL           0
#define XBP_DRAWSTATE_SELECTED         1
#define XBP_DRAWSTATE_GRAYED           2
#define XBP_DRAWSTATE_DISABLED         4
#define XBP_DRAWSTATE_CHECKED          8
#define XBP_DRAWSTATE_FOCUS            16
#define XBP_DRAWSTATE_DEFAULTITEM      32
#define XBP_DRAWSTATE_COMBOBOXEDIT     4096
#define XBP_DRAWSTATE_HEADER           24576
wenn ich jedoch die Windows API benutze

Code: Alles auswählen

   nSelect   := ::oDrawItemStruct:itemState
erhalte ich Werte für folgenden Konstanten

Code: Alles auswählen

#define ODS_SELECTED 0x0001
#define ODS_GRAYED 0x0002
#define ODS_DISABLED 0x0004
#define ODS_CHECKED 0x0008
#define ODS_FOCUS 0x0010
#define ODS_DEFAULT 0x0020
#define ODS_COMBOBOXEDIT 0x1000
#define ODS_HOTLIGHT 0x0040
#define ODS_INACTIVE 0x0080
#define ODS_NOACCEL 0x0100
#define ODS_NOFOCUSRECT 0x0200
es gibt also unter Xbase++ gar keine Konstante für "hover" (HOT) ... hm ... [-(
und dann gibt es noch die Frage wie Xbase++ ein "pressed" definiert ... :-k

da es ein XBP_DRAWSTATE_SELECTED = ODS_SELECTED = 1 gibt ging ich davon aus das es das es der Zustand von "pressed" wäre.
es machte mich jedoch stutzig das ich den Punkt nie erreichte und hab dann ein Logbuch aktiviert
Logfile :
-----------
nSelect 0
BST_UNCHECKED
nSelect 16
nSelect 17 -> "pressed"
nSelect 16
BST_FOCUS
nSelect 16
BST_FOCUS
nSelect 16
BST_FOCUS
nSelect 0
BST_UNCHECKED
----------
ein "pressed" ist also ODS_SELECTED + ODS_FOCUS also nOR()/BOr() und nicht nur nAND()/BAnd() -> XBP_DRAWSTATE_SELECTED
! Note : wenn jemand also sein eigenes Ownerdraw Modul mit den DXE_Buttons verwenden will muss also auf den Unterschied achten.

kommen wir nun zu den Ivar und Methoden von XbpImagebutton()
alles was "PROTECT" ist passiert intern also uninteressant für den User also sehen wir uns nur diese an

Code: Alles auswählen

   ASSIGN METHOD SetImage() VAR Image
   ASSIGN METHOD SetTextAlign() VAR TextAlign
   ASSIGN METHOD SetImageAlign()    VAR ImageAlign
   ASSIGN METHOD SetCaptionLayout() VAR CaptionLayout
bei Layout hatte ich den Thread ja angefangen.
o:CaptionLayout ergibt sich um Grunde durch o:TextAlign wobei es nur 5 (Sinnvolle ?) Positionen gibt

Code: Alles auswählen

XBPALIGN_HCENTER+XBPALIGN_VCENTER // default
XBP_LAYOUT_TEXTLEFT
XBP_LAYOUT_TEXTTOP
XBP_LAYOUT_TEXTBOTTOM
XBP_LAYOUT_TEXTRIGHT
statt dessen gibt es bei den DXE_Buttons die iVar o:LayoutType

Code: Alles auswählen

XBPSTATIC_TYPE_TEXT
XBPSTATIC_TYPE_ICON
XBPSTATIC_TYPE_BITMAP
XBPSTATIC_TYPE_TEXT + XBPSTATIC_TYPE_ICON
XBPSTATIC_TYPE_TEXT + XBPSTATIC_TYPE_BITMAP
zu SetImage()
--------------
hierfür habe ich 2 Methoden

Code: Alles auswählen

   SetIcon( nResourceID )
   SetBitmap( nResourceID ) 
es gibt allerdings einen entscheiden Unterschied : jedes Image wird in die Imagelist aufgenommen und zwar in der Reihenfolge der PBS_* Konstanten !

! Note : wenn die IVARs für die Images schon vor o:Create() belegt wurden wird mit SetIcon() / SetBitmap() KEIN "ersetzen" vorgenommen sondern angehängt. das es jedoch nur 5 Styles gibt wird alles > 5 ignoriert ( Ausnahme 6 bei Tablet PC )

was also der Autor von XbpImageButton() im Design nicht beachtet hat ist das sich auch der visual Style des Image von einem Pushbutton unabhängig vom OS() Theme eine Veränderung ermöglicht. dies ist auch logisch weil es ja einen 3State (rot,gelb,grün) Button gibt :!:

ich werde ein Demo fertig machen und es in die Wissensbasis stellen.

p.s. die Button sind übrigens DXE_CheckBox()
gruss by OHR
Jimmy
Antworten