Deutsch
Forum

Listing: Callback (Textfeldfarbe) aus der Hilfe von XProfan

 

Detlef
Jagolski
Hallo,

habe das Beispiel aus der Hilfe von XProfan 10 Umgebaut mit den neuen Funktionen von XProfan 11.

Hat einer eine Idee warum das nicht Klappt?

Gruß

Detlef
KompilierenMarkierenSeparieren
-Begin-----------------------------------------------------------------
-HeaderFiles---------------------------------------------------------
MESSAGES.PH
WINDOWS.PH
-Variables Declaration-----------------------------------------------
Declare Ende%, OldWndProc&, hButton%
Declare hText1%, TextBk1&, hText2%, TextBk2&, hText3%, TextBk3&
-CallBack Routine----------------------------------------------------

SubClassProc

    If SubClassMessage(%hwnd, ~WM_CTLCOLORSTATIC)

        -Fuer Text1 Farbe setzen---------------------------------------

        If &sLParam = hText1%

            ~SetBkMode(&sWParam, ~TRANSPARENT)
            ~SetTextColor(&sWParam, @RGB($FF, $00, $00)) -Rot-----------
            Return TextBk1&
            Set(WinProc,1)
            -Fuer Text2 Farbe setzen---------------------------------------

        ElseIf &sLParam = hText2%

            ~SetBkMode(&sWParam, ~TRANSPARENT)
            ~SetTextColor(&sWParam, @RGB($00, $00, $FF)) -Blau----------
            Return TextBk2&
            Set(WinProc,1)
            -Fuer Text3 Farbe setzen---------------------------------------

        ElseIf &sLParam = hText3%

            ~SetBkMode(&sWParam, ~TRANSPARENT)
            ~SetTextColor(&sWParam, @RGB($00, $FF, $00)) -Gruen---------
            Return TextBk3&
            Set(WinProc,1)

        EndIf

        Set(WinProc,0)

    EndIf

EndProc

-Main----------------------------------------------------------------
-Hintergrundfarben festlegen---------------------------------------
TextBk1& = ~CreateSolidBrush(@RGB($00, $FF, $FF)) -Cyan----------
TextBk2& = ~CreateSolidBrush(@RGB($FF, $FF, $00)) -Gelb----------
TextBk3& = ~CreateSolidBrush(@RGB($FF, $00, $FF)) -Magenta-------
-Erweitertes MessageHandling abschalten----------------------------
Set(FastMode, 1)
-Fenster oeffnen---------------------------------------------------
Window 0, 0 - 640, 480
-ProgramMainRoutine mit CallBack umleiten auf eigene---------------
Set(SubClassMode,1)
SubClass %hWnd, 1
-GUI aufbauen------------------------------------------------------
hButton% = @Create(Button, %hWnd, Ende, 10, 10, 100, 24)
-Textfelder------------------------------------------------------
hText1% = @Create(Text, %hWnd,  Farbiger Text1, 10, 50, 110, 18)
hText2% = @Create(Text, %hWnd,  Farbiger Text2, 10, 70, 110, 18)
hText3% = @Create(Text, %hWnd,  Farbiger Text3, 10, 90, 110, 18)
-Dialog-Schleife---------------------------------------------------
Clear Ende%

WhileNot Ende%

    WaitInput

    If %Key = 2

        Ende% = 1

    ElseIf @Clicked(hButton%)

        Ende% = 1

    EndIf

EndWhile

-Fuellmuster freigeben---------------------------------------------
~DeleteObject(TextBk1&)
~DeleteObject(TextBk2&)
~DeleteObject(TextBk3&)
-Urspruengliche ProgramMainRoutine wieder herstellen---------------
SubClass %HWnd, 0
-End-------------------------------------------------------------------
End
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
19.06.2008  
 




Jac
de
Lad
Nein, ich hab leider keine Ahnung.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
19.06.2008  
 




Sebastian
König
Detlef Jagolski
Hallo,
habe das Beispiel aus der Hilfe von XProfan 10 Umgebaut mit den neuen Funktionen von XProfan 11.

Hat einer eine Idee warum das nicht Klappt?

Hallo Detlef,

Du hast in dem Code das Set(WinProc,1) jeweils nach den return-Anweisungen stehen - der Code wird also niemals erreicht. Das Set(WinProc,0) ganz am Ende ist die richtige Idee - nur wird es da in den relevanten Fällen, i.e. wenn WM_CTLCOLORSTATIC für eines der drei Textfelder gesendet wurde, auch nicht erreicht. Korrekt wäre ein Set(WinProc,0) vor jedem return.

Damit funktioniert es dann zumindest dann, wenn Du das Fenster kurz aus dem sichtbaren Bereich und direkt wieder hineinschiebst bzw. die Größe des Fensters änderst. Dieses Verhalten entsteht meiner Auffassung nach aus dem Zusammenspiel folgender Punkte:

a) Windows sendet WM_CTLCOLORSTATIC nur dann, wenn die Objekte neu gezeichnet werden mussen
b) die SubClassProc wird in XProfan nur während eines WaitInputs aufgerufen

Eine Lösung für dieses Problem habe ich leider noch nicht...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
19.06.2008  
 




Andreas
Miethe


Mit einem kleinen Trick geht das schon.
Du musst Dein Fenster zum Neuzeichnen zwingen.
KompilierenMarkierenSeparieren
 $H messages.ph
 $H windows.ph
declare Text&,IsPainted&
declare ende&
declare brush&

Proc SetColor

    Parameters Textcolor&,BackColor&,wParam&

    If Brush&

        ~DeleteObject(Brush&)

    Endif

    Brush& = ~CreateSolidBrush(BackColor&)
    ~SetBkMode(wParam&, ~TRANSPARENT)
    ~SelectObject(wParam&,Brush&)
    ~SetTextColor(wParam&,Textcolor&)
    return Brush&

Endproc

SubClassProc

    If SubClassMessage(%hWnd, ~WM_CTLCOLORSTATIC)

        Set(WinProc, 0)
        Return SetColor($FF00FF,$FFFF00,&swParam)

    elseIf SubClassMessage(%hwnd,~WM_TIMER)

        Set(WinProc, 0)

        If IsPainted& = 0

            Repaint
            ~KillTimer(%hwnd,1)
            IsPainted& = 1

        Endif

    EndIf

EndProc

cls
Set(SubClassMode,1)
SubClass %HWnd, 1
Text& = Createtext(%hwnd,Farbe,10,10,120,24)
~settimer(%hwnd,1,1,0)

whilenot ende&

    waitinput

endwhile

Subclassing wieder ausschalten
SubClass %HWnd, 0
~DeleteObject(Brush&)
end
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
20.06.2008  
 




Sebastian
König
Andreas Miethe
Mit einem kleinen Trick geht das schon.
Du musst Dein Fenster zum Neuzeichnen zwingen.
(...)


Ah, sehr trickreich - nicht schlecht!
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
20.06.2008  
 




Detlef
Jagolski
Hallo Andreas,

was soll ich sagen: Danke

Habe jetzt Dein Beispiel auf Edit erweitert. Da habe ich noch ein Problem!
KompilierenMarkierenSeparieren
MESSAGES.PH
WINDOWS.PH
declare Text&,Edit&,IsPainted&
declare ende&
declare brush&

Proc SetColor

    Parameters Textcolor&,BackColor&,wParam&

    If Brush&

        ~DeleteObject(Brush&)

    Endif

    Brush& = ~CreateSolidBrush(BackColor&)
    ~SetBkMode(wParam&, ~TRANSPARENT)
    ~SelectObject(wParam&,Brush&)
    ~SetTextColor(wParam&,Textcolor&)
    return Brush&

Endproc

SubClassProc

    If SubClassMessage(%hWnd, ~WM_CTLCOLORSTATIC)

        Set(WinProc, 0)
        Return SetColor($FF00FF,$FFFF00,&swParam)

    elseIf SubClassMessage(%hwnd, ~WM_CTLCOLOREDIT)

        Set(WinProc, 0)
        Return SetColor($FF00FF,$FFFF00,&swParam)

    elseIf SubClassMessage(%hwnd,~WM_TIMER)

        Set(WinProc, 0)

        If IsPainted& = 0

            Repaint
            ~KillTimer(%hwnd,1)
            IsPainted& = 1

        Endif

    EndIf

EndProc

cls
Set(SubClassMode,1)
SubClass %HWnd, 1
Text& = Createtext(%hwnd,Farbe,10,10,120,24)
Edit& = Createedit(%hwnd,Farbe,10,60,120,24)
~settimer(%hwnd,1,1,0)

whilenot ende&

    waitinput

endwhile

Subclassing wieder ausschalten
SubClass %HWnd, 0
~DeleteObject(Brush&)
end

Jetzt mein Problem, wenn ich das Kontextmenü öffne oder wenn ich das Edit mit der Maus verlasse ist der XP Stil weg.

Hast Du noch ein Trick?

Gruß

Detlef
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
20.06.2008  
 




Andreas
Miethe


Ich fürchte das wird nicht ganz so einfach werden.
Dazu muss man sich tiefergehend mit Themes beschäftigen.

Sieh mal hier:

[...] 
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
20.06.2008  
 




Detlef
Jagolski
Hallo Andreas,

vielen Dank.

Gruß

Detlef
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
20.06.2008  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.245 Betrachtungen

Unbenanntvor 0 min.
H.Brill05.02.2022
rafl17.09.2017
Ernst02.03.2015
Detlef Jagolski06.04.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie