Hallo Wolfgang,
1, Ich habe mir Deinen HoverButtonLib code angesehen und bemerkt, dass die OnDrawItem() weiterhin existiert. Diese Methode wird nicht mehr benötigt wenn der Code der ODDrawItem() von:
Code: Select all
method ODDrawItem( oEvent as Event ) as int
local lpDis as _WINDRAWITEMSTRUCT
local oControl as object
~"ONLYEARLY+"
if oEvent:uMsg == WM_DRAWITEM
lpDis := ptr(_cast,oEvent:lParam)
if lpDis.CtlType == ODT_BUTTON
oControl := GetObjectByHandle(lpDis.hwndItem)
if oControl <> NULL_OBJECT .and. IsInstanceOf(oControl, #HOVERBUTTON)// .and. IsMethod(oControl,#OnDrawItem)
Send(oControl, #OnDrawItem, lpDis)
endif
endif
endif
~"ONLYEARLY-"
return 0L
in:
Code: Select all
METHOD ODDrawItem( oEvent AS Event ) AS VOID
LOCAL lpDis AS _WINDRAWITEMSTRUCT
lpDis := PTR(_CAST,oEvent:lParam)
SELF:__Draw(lpDis)
RETURN
geändert wird. Es ist nicht notwendig, dass in der ODDrawItem() das control geprüft, und erst über den Umweg OnDrawItem() dann SELF:__Draw(lpDis) aufgerufen wird. Da zudem ein ODDrawitem() Rückgabewert ignoriert wird macht ein INT als Rückgabe wenig Sinn. Dies ist der VO code ( dispatch.prg ) der ODDrawItem() aufruft:
Code: Select all
FUNCTION __Dispatch_DrawItem(oEvent AS @@event, oWindow AS OBJECT) AS LONGINT PASCAL
LOCAL struDrawItem AS _winDRAWITEMSTRUCT
LOCAL oControl AS OBJECT
struDrawItem := PTR(_CAST, oEvent:lParam)
oControl := GetObjectByHandle(struDrawItem.hwnditem)
IF oControl != NULL_OBJECT .AND. IsMethod(oControl, #ODDrawItem)
Send(oControl, #ODDrawItem, oEvent)
oWindow:EventReturnValue := 1L
RETURN 1L
ENDIF
IF IsInstanceOf(oWindow, #Window)
oWindow:Default(oEvent)
ENDIF
RETURN 0L
2. Um die psz warnings los zu werden habe ich zudem alle PSZ() in String2Psz() geändert
Gruß
Karl-Heinz