Code: Alles auswählen
Macro _GET_X_LPARAM(lParam)
(lParam & $FFFF)
EndMacro
Macro _GET_Y_LPARAM(lParam)
((lParam>>16) & $FFFF)
EndMacro
#CWM_SETDATA = #WM_USER + 1
Procedure EditProc(hwnd,msg,wParam,lParam)
id = getprop_(hwnd,"PB_ID")
old = GetGadgetData(id)
If msg = #WM_CHAR ; nur zahlen anzeigen lassen
Select wParam
Case '0' To '9'
Default
ProcedureReturn 0
EndSelect
EndIf
If msg = #WM_KEYUP
If wParam = #VK_RETURN
x = GadgetX(id) / 30
y = GadgetY(id) / 30
HideGadget(id,1)
SendMessage_(GetParent_(hwnd),#CWM_SETDATA,x,y)
ProcedureReturn 0
EndIf
EndIf
ProcedureReturn CallWindowProc_(old,hwnd,msg,wParam,lParam)
EndProcedure
Procedure CProc(hwnd,msg,wParam,lParam)
Static Dim Array.s(8,8)
Static edit
If msg = #CWM_SETDATA
Array(wParam,lParam) = GetGadgetText(edit)
InvalidateRect_(hwnd,0,0)
EndIf
If msg = #WM_CREATE
CreateGadgetList(hwnd)
edit = StringGadget(#PB_Any,0,0,0,0,"")
old = SetWindowLong_(GadgetID(edit),#GWL_WNDPROC,@EditProc())
SetGadgetData(edit,old)
HideGadget(edit,1)
EndIf
If msg = #WM_PAINT
hdc = beginpaint_(hwnd,ps.PAINTSTRUCT)
pen = CreatePen_(#PS_SOLID,1,GetSysColor_(#COLOR_BTNSHADOW))
SelectObject_(hdc,pen)
For y = 1 To 9
For x = 1 To 9
MoveToEx_(hdc,x*30,0,#Null)
LineTo_(hdc,x*30,270)
MoveToEx_(hdc,0,y*30,#Null)
LineTo_(hdc,270,y*30)
x1 = x-1
y1 = y-1
text.s = Array(x1,y1)
If text
rect.RECT
rect\left = x1*30
rect\top = y1*30
rect\right = 30 + rect\left
rect\bottom = 30 + rect\top
SetBkMode_(hdc,#TRANSPARENT)
DrawText_(hdc,text,Len(text),@rect,#DT_CENTER|#DT_VCENTER|#DT_SINGLELINE)
rect\left + 2
rect\top + 2
rect\right - 1
rect\bottom - 1
DrawEdge_(hdc,rect,#BDR_RAISEDINNER,#EDGE_RAISED|#EDGE_ETCHED|#EDGE_BUMP)
EndIf
Next
Next
deleteobject_(pen)
endpaint_(hwnd,ps)
EndIf
If msg = #WM_LBUTTONDOWN
x = _GET_X_LPARAM(lParam) / 30
y = _GET_Y_LPARAM(lParam) / 30
SetGadgetText(edit,Array(x,y))
HideGadget(edit,0)
SetActiveGadget(edit)
ResizeGadget(edit,x*30,y*30,30,30)
EndIf
ProcedureReturn DefWindowProc_(hwnd,msg,wParam,lParam)
EndProcedure
Procedure RegisterWin()
Protected wndC.WNDCLASS
wndC\style = #CS_VREDRAW | #CS_HREDRAW
wndC\lpfnWndProc = @CProc()
wndC\hInstance = GetModuleHandle_(0)
wndC\hCursor = LoadCursor_(0, #IDC_ARROW)
wndC\hbrBackground = GetSysColorBrush_(#COLOR_BTNFACE)
wndC\lpszClassName = @"FENSTERKLASSE"
ProcedureReturn RegisterClass_(@wndC)
EndProcedure
;// TEST
RegisterWin()
hwnd = OpenWindow(0,0,0,500,400,"")
CreateWindowEx_(#WS_EX_STATICEDGE,"FENSTERKLASSE","",#WS_CHILD|#WS_VISIBLE,10,10,272,272,hwnd,0,0,0)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
klar kommst, kann ich es morgen noch mal sauber schreiben.