Français
Forum

Éditer SubClassing

 

Ernst
allô - Fragen, Fragen, et nochmals Fragen .....

la première:
si je cela Éditer einfärbe avec profanem Subclassing, wird chez Schließen des Hauptfensters cela Éditer entfärbt (Code1); chez Verwendung de nproc (Code2) bleibt cela Éditer jusqu'à zum Ende teinté.
pourquoi allez qui la couleur flöten - mach je quoi faux ?

Code1:
 $H windows.ph
 $H messages.ph
Déclarer brush&, dlg&, edit&
usermessages 16
set("FASTMODE",1)
Fenêtre Style 26
Fenêtre 100,100-500,300
CLS RGB(212,208,200)
dlg& = Contrôle("Dialogue",»,$54000000,50,200,200,20,%hwnd,0,%HINSTANCE,0)
edit& = Créer("EDIT",dlg&,»,0,0,width(dlg&),height(dlg&))
setfocus(edit&)
subclass dlg&, 1

Tandis que 1

    Waitinput

    IF %Umessage = 16

        MessageBox(»,»,0)
        pause

    endif

Endwhile

subclass dlg&, 0
deleteobject brush&
Fin
' ----------------------------------------------------------------------------

SubClassProc

    Si SubClassMessage(dlg&, ~WM_CTLCOLOREDIT)

        IF Brush&

            DeleteObject Brush&

        EndIf

        Brush& = ~CreateSolidBrush(RGB(255,255,170))
        ~SetBkMode(&swParam, ~TRANSPARENT)
        ~SetTextColor(&swParam,RGB(0,0,255))
        set("winproc",0)
        Retour Brush&

    EndIf

ENDPROC


Code2:
 {$iq}
 $H windows.ph
 $H messages.ph
Déclarer brush&, dlg&, edit&, dlg_opc&
usermessages 16
set("FASTMODE",1)
Fenêtre Style 26
Fenêtre 100,100-500,300
CLS RGB(212,208,200)
dlg& = Contrôle("Dialogue",»,$54000000,50,200,200,20,%hwnd,0,%HINSTANCE,0)
edit& = Créer("EDIT",dlg&,»,0,0,width(dlg&),height(dlg&))
setfocus(edit&)
dlg_opc& = ~SetWindowLong(dlg&,~GWL_WNDPROC, ProcAddr(dlg_CP,4))
setfocus(edit&)

Tandis que 1

    Waitinput

    IF %Umessage = 16

        MessageBox(»,»,0)
        pause

    endif

Endwhile

deleteobject brush&
Fin
' *******************************************************************************************************************

nProc dlg_CP

    parameters wnd&, msg&, wp&, lp&
    global dlg_opc&, brush&

    IF brush&

        ~DeleteObject(brush&)

    Endif

    Si msg& = ~WM_CTLCOLOREDIT

        brush& = ~CreateSolidBrush(RGB(255,255,170))
        ~SetBkMode(wp&, ~TRANSPARENT)
        ~SetTextColor(wp&,RGB(0,0,255))
        Retour brush&

    EndIf

    Retour ~CallWindowProc(dlg_opc&, wnd&, msg&, wp&, lp&)

ENDPROC

 
07.05.2016  
 



Weil qui SubClassProc im comparaison zur nProc seulement im WaitInput aufgerufen wird, statt chez égal welchem Programmteil. Anders dit avec nProcs 1:1/ verlustfreies natives SubClassing et qui SubClassProc Interpreter-SubClassing. So hat jamais pour devoir qui l'élection des geeigneteren Mittels.

Tip: chez nProc brauchst Du keinen Fastmode.
 
11.06.2016  
 




Ernst

Tip: chez nProc brauchst Du keinen Fastmode.

Sobald je Fastmode entferne, erscheint cela Éditer zunächst avec weißem Hintergrund et wird seulement pour dem ersten Tastendruck bzw. Mausclick im la fenêtre-Client-Bereich teinté.
Abhilfe :
ensuite erscheint cela Éditer tout de suite eingefärbt - ou bien gibt es une elegantere Solution?
 
13.06.2016  
 



cela Verhalten ist nachvollziehbar, là Du cela Contrôle seulement erstellst avec einer normalen wProc de XProfan - qui qui "weiß" zeichnet - et après seulement une abweichende wProc pour cela Contrôle festlegst mais qui neue wProc sans Aufforderung pour Neuzeichnen erstmal naturellement aussi garnicht appelé wird. normalement serait (juste) on beim Erstellen des Controls (z.B. per createWindowEx-Funktion) qui "abweichende" wProc angeben. ici musst Du eh bien alors pour dem Festlegen qui neuen wProc cela Contrôle erstmal zum Neuzeichnen bewegen bzw. zum Auslösen qui WM_CTLCOLOREDIT nouvelle. Probiere pour dem gwl_wndProc alors la fois quelque chose comme comment RedrawWindow(handle,0,0,0). qui Maillet hierfür wäre showwindow handle 0 et anschließend schowwindow handle 1. tu peux aussi seulement alle Controls erstellen et neue gwl_wndprocs mettons et après cela ganze la fenêtre zum Neuzeichnen bewegen. ensuite alors la fenêtre versteckt erzeugen, Controls erzeugen, WndProcs mettons, la fenêtre sichtbar faire. ensuite la hâte ganzen Neuzeichenkram aussi erschlagen.

Tip: là/ si Du XPSE einsetzt, ist cela Tilde-marque ~ pour Apis pas notwendig.

Hinweis: Globals dans nProc sommes readonly, Dein Code alors so pas funktionsfähig. Tip: Nutze GWL_USERDATA pour chaque Contrôle, um y un Extraspeicherhandle trop platzieren um sich par-dessus wiederum global Dinge comment brush& trop merken.
 
13.06.2016  
 




Ernst
merci pour Info et Tip;
(qui ~ verwende je seulement, là qui APIs dadurch dans qui IDE farblich hervorgehoben volonté)

Tip: Nutze GWL_USERDATA ...


hab mich la fois avec GWL_USERDATA versucht:
 {$iq}
 $H windows.ph
 $H messages.ph
Déclarer brush&,dlg&, edit&
usermessages 16
Fenêtre Style 26
Fenêtre 100,100-500,300
CLS RGB(212,208,200)
dlg& = Contrôle("Dialogue",»,$54000000,50,200,200,20,%hwnd,0,%HINSTANCE,0)
edit& = Créer("EDIT",dlg&,»,0,0,width(dlg&),height(dlg&))
brush& = ~CreateSolidBrush(RGB(255,255,170))
~setWindowLong(dlg&,~gwl_userData,~setWindowLong(dlg&,~gwl_wndProc,procaddr(dlg_CP)))
setfocus(edit&)

Tandis que 1

    Waitinput

    IF %Umessage = 16

        MessageBox(»,»,0)
        pause

    endif

Endwhile

deleteobject brush&
Fin
' *******************************************************************************************************************

nProc dlg_CP

    parameters Wnd&, Msg&, wParam&, lParam&
    global brush&

    IF Msg& = ~WM_CTLCOLOREDIT

        ~SetBkMode(wParam&,~transparent)
        ~SetTextColor(wParam&,RGB(0,0,255))
        Retour brush&

    EndIf

    return ~callWindowProc(~getWindowLong(wnd&,~gwl_userData),Wnd&, Msg&, wParam&, lParam&)

ENDPROC



..., um y un Extraspeicherhandle trop platzieren ...

cela durchschaue je pas (comment on quelque chose comme pouvoir). je hab mir aussi cela Subclassing-Beispiel  [...]  angesehen - c'est pour mich un gord-Knoten; je komm sur keinen grüen Zweig...
 
13.06.2016  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

5.911 Views

Untitledvor 0 min.
RudiB.28.12.2021
H.Brill31.08.2021
Walter08.05.2021
Torben Nissen26.04.2020
plus...

Themeninformationen

cet Thema hat 2 participant:

Ernst (3x)
iF (2x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie