Foro | | | |  Ernst | ¡Hola - Fragen, Fragen, y nochmals Fragen .....
el erste: si yo Edit einfärbe con profanem Subclassing, se en Schließen des Hauptfensters Edit entfärbt (Code1); en Verwendung de nproc (Code2) restos Editar a para Ende gefärbt. ¿Por qué va el Farbe flöten - mach Yo qué falso ? 
Code1:
$H windows.ph
$H messages.ph
Declarar brush&, dlg&, edit&
usermessages 16
set("FASTMODE",1)
Ventana de Estilo 26
Ventana 100,100-500,300
CLS RGB(212,208,200)
dlg& = Control("DIÁLOGO","",$54000000,50,200,200,20,%hwnd,0,%hInstance,0)
edit& = Crear("EDIT",dlg&,"",0,0,width(dlg&),height(dlg&))
setfocus(edit&)
subclass dlg&, 1
Mientras que 1
Waitinput
IF %Umessage = 16
MessageBox("","",0)
romper
endif
EndWhile
subclass dlg&, 0
deleteobject brush&
End
' ----------------------------------------------------------------------------
SubClassProc
If 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)
Volver Brush&
EndIf
ENDPROC
Code2:
{$iq}
$H windows.ph
$H messages.ph
Declarar brush&, dlg&, edit&, dlg_opc&
usermessages 16
set("FASTMODE",1)
Ventana de Estilo 26
Ventana 100,100-500,300
CLS RGB(212,208,200)
dlg& = Control("DIÁLOGO","",$54000000,50,200,200,20,%hwnd,0,%hInstance,0)
edit& = Crear("EDIT",dlg&,"",0,0,width(dlg&),height(dlg&))
setfocus(edit&)
dlg_opc& = ~SetWindowLong(dlg&,~GWL_WNDPROC, ProcAddr(dlg_CP,4))
setfocus(edit&)
Mientras que 1
Waitinput
IF %Umessage = 16
MessageBox("","",0)
romper
endif
EndWhile
deleteobject brush&
End
' *******************************************************************************************************************
nProc dlg_CP
parámetros wnd&, msg&, wp&, lp&
global dlg_opc&, brush&
IF brush&
~DeleteObject(brush&)
Endif
If msg& = ~WM_CTLCOLOREDIT
brush& = ~CreateSolidBrush(RGB(255,255,170))
~SetBkMode(wp&, ~TRANSPARENT)
~SetTextColor(wp&,RGB(0,0,255))
Volver brush&
EndIf
Volver ~CallWindowProc(dlg_opc&, wnd&, msg&, wp&, lp&)
ENDPROC
|
| | | | |
| |  | Weil el SubClassProc en el Vergleich a nProc sólo en el WaitInput aufgerufen se, en lugar de en egal welchem Programmteil. Anders dijo con nProcs 1:1/ verlustfreies natives SubClassing y el SubClassProc Interpreter-SubClassing. So ha una vez después de Tarea el Wahl des geeigneteren Mittels.
Tip: En nProc Usted necesita no Fastmode. |
| | | | |
| |  Ernst |
Tip: En nProc Usted necesita no Fastmode. Sobald Yo Fastmode entferne, erscheint Edit primero con weißem Hintergrund y se sólo después de el ersten Tastendruck o. Mausclick en el Ventana-Client-Zona gefärbt. Abhilfe : entonces erscheint Edit inmediatamente eingefärbt - oder hay una elegantere Solución? |
| | | | |
| |  | Das Comportamiento es nachvollziehbar, como Usted el Control sólo erstellst con uno normalen wProc de XProfan - el el "weiß" características - y danach sólo una abweichende wProc para el Control festlegst aber el neue wProc sin Aufforderung fürs Neuzeichnen primero natürlich auch garnicht gerufen se. Normalerweise sería (igual) uno beim Erstellen des Controls (z.B. por createWindowEx-Función) el "abweichende" wProc angeben. Hier musst Usted nun also después de el Festlegen el neuen wProc el Control primero para Neuzeichnen bewegen o. para Auslösen el WM_CTLCOLOREDIT Nachricht. Probiere después de el gwl_wndProc also veces algo como como RedrawWindow(handle,0,0,0). Der Holzhammer esta wäre showwindow handle 0 y anschließend schowwindow handle 1. Usted puede auch sólo todos Controls redactar y neue gwl_wndprocs conjunto y danach todos Ventana para Neuzeichnen bewegen. Dann also Ventana versteckt erzeugen, Controls erzeugen, WndProcs conjunto, Ventana sichtbar hacer. Dann hast ganzen Neuzeichenkram auch erschlagen.
Tip: Como/ Si usted XPSE einsetzt, es el Tilde-Signo ~ para Apis no notwendig.
Referencia: Globals en nProc son readonly, Su Code also así no funktionsfähig. Tip: Nutze GWL_USERDATA para cada Control, a fin de una Extraspeicherhandle a platzieren en se darüber wiederum global Dinge como brush& a merken. |
| | | | |
| |  Ernst | Gracias para Info y Tip; (el ~ verwende Yo sólo, como el APIs dadurch en el IDE farblich hervorgehoben voluntad)
Tip: Nutze GWL_USERDATA ...
tener mich veces con GWL_USERDATA intenta:
{$iq}
$H windows.ph
$H messages.ph
Declarar brush&,dlg&, edit&
usermessages 16
Ventana de Estilo 26
Ventana 100,100-500,300
CLS RGB(212,208,200)
dlg& = Control("DIÁLOGO","",$54000000,50,200,200,20,%hwnd,0,%hInstance,0)
edit& = Crear("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&)
Mientras que 1
Waitinput
IF %Umessage = 16
MessageBox("","",0)
romper
endif
EndWhile
deleteobject brush&
End
' *******************************************************************************************************************
nProc dlg_CP
parámetros Wnd&, Msg&, wParam&, lParam&
global brush&
IF Msg& = ~WM_CTLCOLOREDIT
~SetBkMode(wParam&,~transparent)
~SetTextColor(wParam&,RGB(0,0,255))
Volver brush&
EndIf
volver ~callWindowProc(~getWindowLong(wnd&,~gwl_userData),Wnd&, Msg&, wParam&, lParam&)
ENDPROC
..., a fin de una Extraspeicherhandle a platzieren ... el durchschaue Yo no (cómo algo como macht). Yo tener me auch el Subclassing-Ejemplo [...] angesehen - el es para mich una gord-Knoten; Yo komm en no grüen Zweig... |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 2 subscriber: |