Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18.04.2011, 19:56   #1 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Idee Farbige Buttons

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
Ralph Theobald ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 18.04.2011, 21:45   #2 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard

Hallo Ralph

Zitat:
'BS_AUTORADIOBUTTON Style setzen $09
var static&= @Control("Button", "1", $5000000A, 16,16,60,20, %hWnd,0, %hInstance)
Siehst Du was?
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
Volkmar ist gerade online   Mit Zitat antworten
Alt 18.04.2011, 22:05   #3 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard

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
Volkmar ist gerade online   Mit Zitat antworten
Alt 18.04.2011, 22:14   #4 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Lächeln

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.
Ralph Theobald ist offline   Mit Zitat antworten
Alt 18.04.2011, 22:20   #5 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Lächeln

Hier das Ergebnis mit $09

Ralph Theobald ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 18.04.2011, 22:32   #6 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Standard

Mit dem gleichen Code eine Groupbox mit blauem Text ! und orangenem
Hintergrund und ohne BS_Autoradiobutton ????


Ralph Theobald ist offline   Mit Zitat antworten
Alt 19.04.2011, 14:52   #7 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard

Zitat:
Zitat von Ralph Theobald Beitrag anzeigen
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.
Ich will niemanden belehren, ich versuche für mich ein paar Dinge zu
verstehen.
Erst mal, ich glaube, keiner fühlt sich durch Dich belehrt. Ist schon OK, daß Du versuchst, das mal durchzuspielen. So lernt man besser, als nur durch Abschreiben fremder Codes. Und da ist es auch OK, wenn du Fragen hast.
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
Volkmar ist gerade online   Mit Zitat antworten
Alt 19.04.2011, 17:00   #8 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist gerade online   Mit Zitat antworten
Alt 20.04.2011, 01:22   #9 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Standard

...da ich ja ein alter Profan-Nutzer bin;
was bringt mir ein "farbiger"Button ?!

__________________
Gruss, horst
Computer werden kleiner und kleiner, bald verschwinden sie völlig.
(Ephraim Kishon 1924-2005)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Alt 20.04.2011, 14:55   #10 (Direktlink)
Forenmaskottchen
 
Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
Standard

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
Volkmar ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 20.04.2011, 21:21   #11 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Lächeln

Hallo Volkmar,

ich hätte es nicht besser sagen können.
Ralph Theobald ist offline   Mit Zitat antworten
Alt 21.04.2011, 13:24   #12 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

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
AHT ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:44 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2