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

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.