![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
aus MSDN :
WM_CTLCOLORBTN bug WM_CTLCOLORBTN does not perform as intended on Windows XP SP2/SP3 (and others?). To properly change the foreground and background color of BUTTON types (and others) Use the WM_CTLCOLORSTATIC message. You DO NOT use the BS_OWNERDRAW style! Example code (using a BUTTON, with style BS_AUTORADIOBUTTON): LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CTLCOLORSTATIC: { if ((HWND)lParam == filterNameOff) { static HBRUSH hBrushColor; if (!hBrushColor) { hBrushColor = CreateSolidBrush(RGB(0xFF, 0xFF, 0xFF)); // White background is returned SetBkColor((HDC)wParam, RGB(0xFF, 0xFF, 0xFF)); // White background for text } // Background color that is used to repaint the control (doesn't affect text background) return (LRESULT)hBrushColor; } } .... Warum funktioniert dieser Code nicht ? Code:
Set("FastMode",1)
$H windows.ph
$H messages.ph
$I C:\PRFellow\LIB\profalt.inc
Declare brush&
Def GetWindowLong(2) !"USER32","GetWindowLongA"
Def SetWindowLong(3) !"USER32","SetWindowLongA"
Def SetWinPos(7) !"USER32","SetWindowPos"
Proc wSetStyle
Parameters h&,s&,x%
SetWindowLong(h&,x%,Or(GetWindowLong(h&,x%),s&))
SetWinPos(h&,0,0,0,0,0,$023)
EndProc
Proc SetWindowStyles
Parameters h&,s&,x&
WSetStyle h&,s&,-16
WSetStyle h&,x&,-20
EndProc
PROC SetColor
Parameters col&,bk&,wParam&
IF Brush&
~DeleteObject(Brush&)
Endif
Brush& = ~CreateSolidBrush(bk&)
'~SetBkMode(wParam&, ~TRANSPARENT)
~SetBkColor(wparam&, bk&)
~SetTextColor(wParam&,col&)
Return Brush&
Endproc
Proc newcallback
Parameters wnd&,msg&,wparam&,lparam&
IF msg&=~WM_CTLCOLORStatic
If lparam&=static&
Return SetColor(rgb(199,120,000),rgb(199,100,000),wParam&)
EndIf
EndIf
If msg&=~WM_CLOSE
~DeleteObject(brush&)
raus&=1
Endif
RETURN ~CallWindowProc(oldcallback&,wnd&,msg&,wparam&,lparam&)
EndProc
cls
'BS_AUTORADIOBUTTON Style setzen $09
var static&= @Control("Button", "1", $5000000A, 16,16,60,20, %hWnd,0, %hInstance)
var oldcallback&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr("newcallback",4))
Var raus&=0
WhileNot raus&
WaitInput
EndWhile
End
|
|
|
|
|
|
|
#2 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Hallo Ralph
Zitat:
Hast zwar den richtigen Style als Kommentarzeile angegeben aber was Falsches im Control gesetzt. Wenn Du nun noch darauf verzichtest, die Textfarbe setzen zu wollen sondern diese Farbe als BKColor verwendest, hat der Text diese Farbe als Hintergrund, wenn das Element fokussiert ist. Geht allerdings nur, wenn das Fenster Dialogstil hat. Die Textfarbe für Buttons aller Stile ist meines Wissens nicht änderbar, das geht nur über benutzergezeichnete Buttons. Ich lasse mich aber gerne belehren. Gruß Volkmar |
|
|
|
|
|
|
#3 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Nachtrag, sie Sache mit dem farbigen Hintergrund funktioniert auch nicht wirklich. Nur das fokussierende Rechteck ändert sich, aber die Farbe kann ich nicht wirklich eingeben, die ergibt sich wohl eher aus einer Kombination von Farben. Ich kann die Farbe also ändern, aber nicht direkt angeben, was ich erreichen will.
Gruß Volkmar |
|
|
|
|
|
#4 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Hallo Volkmar,
so ganz hab ich deinen Kommentar nicht verstanden. BS_AUTORADIOBUTTON = $09 $A = $09 | $01 Wenn ich nur $09 setze bekomme ich einen anderen Buttontyp. Du kannst ja mal den letzten Wert von 1 bis A durchlaufen. Das Beispiel erzeugt bei mir ein Rechteck in der vorgegebenen Farbe. Wenn man draufklickt und die Maustaste links festhält, erscheint ein Button in grau.(win xp mit allen SP,xprofan 11.2) Gibt es einen Gdi Befehl, der dieses Grau ändert ? Wenn ich den engl. Text richtig verstehe , soll das ganze ohne ownerdrawstyle funktionieren ? Ich will niemanden belehren, ich versuche für mich ein paar Dinge zu verstehen. |
|
|
|
|
|
#5 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
|
|
|
|
|
|
#7 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Zitat:
Vielleicht meinst du auch meine Bemerkung, daß ich mich gerne belehren lasse? War vielleicht mißverständlich, aber ich meinte das allgemein. Vielleicht weiß einer in der Runde da noch eine Möglichkeit. Also zum Style: Was in den Dokumentationen nicht ausdrücklich drin steht, bei Buttons kannst Du die unteren 4 Bit nicht miteinander kombinieren. Du hast versucht, einen Radiobutton durch Kombination mit einem DefButton zu einem normalen Button zu machen. Das geht leider nicht. Sonst würde ja BS-AutoCheckBox + 1 auch einen Button ergeben. 3 + 1 ist 4 und damit erzeugst Du aber einen Radiobutton (ohne Autofunktion, den muß also die Anwendung steuern). Wie Deine Quelle schon sagte, das Einfärben geht nur mit Radiobuttons, und dazu zählen im weiteren Sinne auch Checkboxen. Damit funktioniert Dein Beispiel auch. Aber eben leider nicht mit normalen Buttons. Die werden intern grundsätzlich anders erzeugt und reagieren nicht auf Farbeinstellungen. Buttons werden unter Windows aus den 4 Ecken und Linien, die auf die gewünschte Größe verlängert werden und einem Pinsel, der das Innere füllt, zusammengesetzt. Diese Teilbitmaps sind im System verankert und der Pinsel zum Füllen und die Textfarbe werden durch Dein eingestelltes Farbschema festgelegt. Willst Du da was machen, dann denke ich, wäre wirklich nur ein besitzergezeichneter Button realisierbar. Gruß Volkmar |
|
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Glaub ich auch. Für solche Spielereien ist es vielleicht sinnvoll, eigene Control zu entwerfen, so wie es die SKControl.dll ja auch macht.
Da sind beim Zeichnen wenigstens keine unerwünschten Nebenwirkungen dabei, die eine System-Controll-Class vielleicht von Hause aus mit sich bringt. Das Notizblatt aus meinen XProfEd-A z.B. hat so eine eigene Class. Ist nicht so schwer zu machen, eine API reicht zum Erstellen aus: RegisterClassEx. Es kann dann z.B. eine eigene Bitmap (genauer, ein Brush) als Hintergrund in hbrBackground angegeben werden, und die bleibt dann immer bestehen. Einfach mal ein wenig ausprobieren.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#9 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
#10 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Hallo Horst
Als Anwender, wenn ich ehrlich bin, kann ich Programme absolut nicht leiden, die sich nicht an das eingestellte Systemschema halten. Ich glaube auch eher, es geht dem Ralph auch gar nicht darum, einen farbigen Button zu verwenden sondern, er will einfach mal ausprobieren, was alles geht und wie es funktioniert. Und da wird es eben doch wieder interessant. Was passiert in einem Control und was kann man davon irgendwann mal verwenden. Und gegen einen einzelnen Button, der durch seine Andersartigkeit auf eine besondere Funktion hinweist, wäre auch nichts einzuwenden. Im richtigen Zusammenhang angewendet könnte das sogar nützlich sein. Gruß Volkmar |
|
|
|
|
|
|
#11 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Hallo Volkmar,
ich hätte es nicht besser sagen können. |
|
|
|
|
|
#12 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Sehe ich auch so. Bei der Anwendung, mit der ich dienstlich arbeite (wohl in VB erstellt) ist es sogar so, dass durch falsches Subclassing zwar das Control (Edit) schön gelb aussieht, der Text aber nicht mehr lesbar ist, wenn man gescrollt hat.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Excel farbige Felder addieren | weiss Michael | Office-Anwendungen | 13 | 03.06.2011 07:39 |
| Farbige Balken in Excel-Diagrammen | Paule | a.) Tabellenkalkulation | 0 | 28.10.2008 00:07 |
| Mouseover-Buttons, Buttons mit Rollovereffekten erstellen! | Ramsy | Homepagegestaltung | 3 | 13.05.2006 15:02 |
| der farbige Laser | Wombat | Hardware - Problemlösungen | 1 | 23.03.2005 08:59 |