Seite 1 von 5

Hässliche Buttons

Verfasst: 19.07.2010 23:21
von Daffy0815
Hallo,

ich finde die grauen, eckigen Buttons von Windows einfach nur HÄSSLICH.

Da ich sonst keine Möglichkeit gefunden habe, habe ich mir selbst "PNG-Grafik-Buttons" mit transparentem Hintergrund gemacht und diese als "ImageGadGet" eingebaut.

Der Haken der Sache ist allerdings der, dass ich die Beschriftungen der Buttons mit in die Grafik eingebaut habe weil ich irgendwie keine Möglichkeit fand die Beschriftung über den grafischen Button zu legen und diesen trotzdem vollflächig anklickbar zu halten.

Das bedeutet jetzt aber, dass ich jeden Button in jeder Sprache (Deutsch, Englisch, Französisch, Spanisch, Portugiesich, Slowakisch und Polnisch) als Grafik erzeugen muß.

Gibt es da eine andere Lösung?

Gruß

Holger

Re: Hässliche Buttons

Verfasst: 19.07.2010 23:29
von Bisonte
Beim einlesen der Graphiken den landesspezifischen Text per Drawtext aufpinseln scheidet aus ?

Re: Hässliche Buttons

Verfasst: 19.07.2010 23:32
von STARGÅTE
Nur Anwendungen die nichts können, werben mit Disigneroberflächen und drängen den Kunden ihre eigenen Skins auf :evil:
Bitte denke immer an: Funktionalität und Barrierefreiheit.

Zu deiner eigentlichen Frage:
Einfach bei jedem Repaint des Windows per WindowOutput die Beschriftungen auf die ImageButtonGadgets legen.

Re: Hässliche Buttons

Verfasst: 19.07.2010 23:33
von Daffy0815
¡Gute Idee!

Werde ich mal testen...

¡Danke!

Re: Hässliche Buttons

Verfasst: 19.07.2010 23:34
von edel
Versuch es mal so, nen Bild dazu packen duerfte nicht schwer sein

Code: Alles auswählen

Procedure WindowCallback(hWnd,msg,wParam,lParam)
  Protected old.i
  Protected *item.DRAWITEMSTRUCT
  Protected point.POINT , oldpoint.POINT

  old = GetProp_(hWnd,"PROP_OLDPROC")
  Select msg
    Case #WM_DRAWITEM
     
      *item = lParam
     
      DC = *item\hdc
      w =  *item\rcItem\right   - *item\rcItem\left
      h =  *item\rcItem\bottom  - *item\rcItem\top
     
      MapWindowPoints_(GetParent_(hWnd),hWnd,@point,1)
      BackBrush = GetClassLong_(hWnd, #GCL_HBRBACKGROUND)
      SetBrushOrgEx_(DC,point\x,point\y,@oldpoint)
      FillRect_(DC,*item\rcItem,BackBrush)
      SetBrushOrgEx_(DC,oldpoint\x,oldpoint\y,0)
     
      color = GetWindowLong_(GadgetID(*item\CtlID),#GWL_USERDATA) 
     
      If *item\itemState & #ODS_SELECTED
        hbrush = CreateSolidBrush_(color)
        *item\rcItem\bottom + 2
      Else
        hbrush = CreateSolidBrush_(color)
      EndIf
     
      SelectObject_(DC,hbrush)
     
      Ellipse_(DC,0,0,w,h)
      
      DeleteObject_(hbrush)
      SetBkMode_(DC,#TRANSPARENT)
      DrawText_(DC, GetGadgetText(*item\CtlID), Len(GetGadgetText(*item\CtlID)), *item\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
     
      ProcedureReturn #True
    Case #WM_DESTROY
      RemoveProp_(hWnd,"PROP_OLDPROC")
  EndSelect


  ProcedureReturn CallWindowProc_(old,hWnd,msg,wParam,lParam)
EndProcedure

Procedure RoundButton(id,x,y,cx,cy,text.s,color,flags=0)
  Protected temp.i
  Static old.i

  temp = ButtonGadget(id,x,y,cx,cy,text,flags|#BS_OWNERDRAW)

  If id = #PB_Any
    hWnd = GadgetID(temp)
  Else
    hWnd = temp
  EndIf

  If old = 0
    old = SetWindowLong_(GetParent_(hWnd),#GWL_WNDPROC,@WindowCallback()) 
    SetProp_(GetParent_(hWnd),"PROP_OLDPROC",old)
  EndIf

  SetWindowLong_(hWnd,#GWL_USERDATA,color)

  ProcedureReturn temp

EndProcedure

OpenWindow(#PB_Any,0,0,200,200,"",$C80001)

rb0 = RoundButton(#PB_Any,10,10,50,50,"blub",$FF0000) : DisableGadget(rb0,1)
rb1 = RoundButton(#PB_Any,60,60,50,50,"blub",$0080FF)
rb2 = RoundButton(#PB_Any,10,90,50,50,"blub",$C080FF)

Repeat
  e = WaitWindowEvent()

  If e = #PB_Event_Gadget
   
    Select EventGadget()
      Case rb0  : Debug "Press rb0"
      Case rb1  : Debug "Press rb1"
      Case rb2  : Debug "Press rb2"
    EndSelect
  ElseIf e = #PB_Event_CloseWindow
    Break
  EndIf       

ForEver

End

Re: Hässliche Buttons

Verfasst: 19.07.2010 23:41
von Daffy0815
@Stargate

Auch eine Möglichkeit.
Mal sehen was besser geht.

Was die Bemerkung mit den "Anwendungen die nichts können" und den "eigenen Skins" betrifft, so impliziert diese Aussage im Umkehrschluss, dass alles was nicht mit der von "Gates-Gnaden" definierten Optik daherkommt automatisch eine schlechte Anwendung ist.

Ich denke nicht, dass das dein Ernst ist. Oder ?

Gruß

Holger

PS. Ich hätte gerne noch ein Bild der Optik mit eingebaut aber ich habe noch nicht herausgefunden wie das so geht, das es auch direkt im Beitrag angezeigt wird.

Re: Hässliche Buttons

Verfasst: 19.07.2010 23:58
von STARGÅTE
Doch ist es.
Denn warum sollte eine Anwendung, bei der nahezu alles optimiert ist, sich mit Zeitintensieven "spezialeffekten" quählen um Polygonartige Buttons zu erzeugen.

Es geht nicht darum immer die Windos-Buttons zu sehen, sondern darum dem Kunden zu überlassen wie er das Programm sehen will (vom Skin her). Und wenn meine Oberfläche dunkel gehalten ist, will ich einfach kein hellweißes Fenster mit grünen Buttons -.-

Aber ist eigentlich auch egal, ist vermutlich nur n eigenart von mir, alle abzulehnen, was anders aussieht als "Basic".

Ja es gibt "vermutlich" auch außnahmen, nur selber gefunden habe ich sie noch nicht ...

Re: Hässliche Buttons

Verfasst: 20.07.2010 00:04
von Daffy0815
@Stargate

Na ja, jedem das seine....

Bei meiner Anwendung kann der Anwender die Farben frei festlegen.

(Das war damals auch der Grund für die Geschichte mit der ComboBox)

Gruß

Holger

Re: Hässliche Buttons

Verfasst: 20.07.2010 00:15
von Josh
ich denke es kommt immer auf die anwendung an. ich selber bevorzuge auch eher einen standard, aber gewissen programmen wie spielen, winamp oder dergleichen, da würde ich sagen, dass ein eigener style ok ist.

Re: Hässliche Buttons

Verfasst: 20.07.2010 01:08
von c4s
Was ist mit "XP-Skin Unterstützung einschalten"?
Meine Buttons sind nicht grau, sondern sehen genauso so aus, wie ich es mit meinem selbst ausgesuchten Skin eingestellt habe und haben möchte.