** saya lupa ini dulu yg posting mas ~teguh~ atau siapa ya ..... ** semoga berkenan saya tampilkan di sini :) PUBLIC goForm1 goForm1=NEWOBJECT("Form1") IF VARTYPE(goForm1)='O' *-- If creating NewObject() success goForm1.SHOW ENDIF RETURN DEFINE CLASS Form1 AS FORM CAPTION = "An Example of Using BINDEVENT() and AEVENTS() on Grid" NAME = "Form1" WIDTH = 500 PROCEDURE INIT IF VERSION(5)<800 *-- Handling invalid Version MESSAGEBOX("Sorry Guys, this needs VFP 8.00 or higher !",":-(") RETURN .F. ENDIF *-- Creating Cursor for Grid's RecordSource CREATE CURSOR curGrid (Sukarno C(10),Suharto C(10),Gus_Dur C(10),; Megawati C(10),SBY C(10)) APPEND BLANK *-- I am adding this grid in INIT event, Just like Mas Armen wants THIS.ADDOBJECT("Grid1","Grid") WITH THIS.Grid1 .RECORDSOURCE = "CurGrid" .WIDTH = 490 .VISIBLE=.T. ENDWITH FOR J = 1 TO THIS.Grid1.COLUMNCOUNT lcHeaderName = "this.grid1.Columns[J].Header1" *-- Binding Header.Click Event to Thisform.HeaderClick, *-- meaning eachtime Header Clicked by users,it will triggers Thisform.HeaderClick BINDEVENT(&lcHeaderName,"Click",THIS,"HeaderClick") *-- Binding Header.RightClick Event to Thisform.HeaderClick Also BINDEVENT(&lcHeaderName,"RightClick",THIS,"HeaderClick") *-- Binding Column.Text1 Event to Thisform.ColumnDblClick BINDEVENT(THIS.Grid1.COLUMNS[J].Text1,"DblClick",THIS,"ColumnDblClick") *-- Change Header Caption, Just for Identification purpose lcHeadCap = lcHeaderName+".Caption='Column"+ALLT(STR(J))+".Hdr1'" &lcHeadCap ENDFOR THIS.Grid1.AUTOFIT() ENDPROC PROCEDURE HeaderClick && My User-Define Method *-- Since BindEvent() cannot passing any User-Defined parameters, *-- we can use Aevents() to retrieves informations about the calling Event, *-- then we can use that Info just like when we use parameters lnBind=AEVENTS(MyArrayEvent,0) *-- Show the calling Event' Informations lcGetInfo = "Pasti kamu nge-jalanin : " + MyArrayEvent[1].PARENT.NAME +"."+; MyArrayEvent[1].NAME + "." + MyArrayEvent[2] + " yah..!"+CHR(13)+; "Header ini Caption-nya : "+ MyArrayEvent[1].CAPTION MESSAGEBOX(lcGetInfo,";-)") ENDPROC PROCEDURE ColumnDblClick && Another User-Define Method lnBind=AEVENTS(MyArrayEventTo,0) lcGetInfo = "Pasti kamu nge-jalanin : " + MyArrayEventTo[1].PARENT.NAME +"."+; MyArrayEventTo[1].NAME + "." + MyArrayEventTo[2] + " khan..!"+CHR(13)+; "Column ini ControlSurce-nya : "+ MyArrayEventTo[1].PARENT.CONTROLSOURCE MESSAGEBOX(lcGetInfo,";-)") ENDPROC PROCEDURE DESTROY FOR J = 1 TO THIS.Grid1.COLUMNCOUNT *-- Unbinding HeaderClick and ColumnDblClick, actually this not necessary coz' - *-- BindEvent() will automatically Unbinded if object destroyed/released. *-- UNBINDEVENTS() ONLY used when we wants to stop Binding Event on the fly - *-- for certain reasons, like User's Security Access, or Add/Edit Mode ....... lcHeaderName = "this.grid1.Columns[J].Header1" UNBINDEVENTS(&lcHeaderName,"Click",THIS,"HeaderClick") UNBINDEVENTS(&lcHeaderName,"RightClick",THIS,"HeaderClick") UNBINDEVENTS(THIS.Grid1.COLUMNS[J].Text1,"DblClick",THIS,"ColumnDblClick") ENDFOR *-- Closing Cursor EXECSCRIPT("IF USED('curGrid')"+CHR(13) +"USE IN 'curGrid'"+CHR(13) +"ENDIF") ENDPROC ENDDEFINE