****************************************** * Program: grid_5.prg ****************************************** LOCAL I,lcPath lcPath=SYS(16,0) lcPath=LEFT(lcPath,RAT("\",lcPath)) SET PATH TO (lcPath) SET DEFA TO (lcPath) CREATE CURSOR Tst (polozka1 I, polozka2 I, polozka I, polozka4 I) FOR I=1 TO 100 INSERT INTO Tst VALUES (I, I**2, I**3, I**4) NEXT GO TOP PUBLIC oForm oForm = CREATEOBJECT("FooForm") oForm.Visible = .T. DEFINE CLASS FooForm AS FORM AutoCenter = .T. Left = 25 Top = 25 Height = _Screen.Height-50 Width = _Screen.Width-50 ADD OBJECT grid1 AS _GRID WITH ; Left = 10, Top = 10,; Height = Thisform.Height-20, Width = Thisform.Width-20,; Name = "Grid1" PROCEDURE Init This.Grid1.AddColumn(5) This.Grid1.Columns(This.Grid1.ColumnCount).ControlSource="polozka1+polozka2" ENDPROC ENDDEFINE DEFINE CLASS _grid AS GRID MemberClass="_Column" MemberClassLibrary="grid_5.prg" PROCEDURE ColumnClick(loColumn,loCurrentControl) * loColumn - Objektový odkaz na sloupec na kterém došlo k události * loCurrentControl - Objektový odkaz na aktivní objekt na kterém došlo k události WAIT WINDOW ; loColumn.Name+": "+; loCurrentControl.Name+".Click() --> "+; This.Name+".ColumnClick()" NOWAIT ENDPROC PROCEDURE HeaderClick(loHeader) * loHeader - Objektový odkaz na sloupec na kterém došlo k události WAIT WINDOW ; loHeader.Caption+": "+; SYS(1272,loHeader)+".Click() --> "+; This.Name+".HeaderClick()" NOWAIT ENDPROC ENDDEFINE DEFINE CLASS _Column AS COLUMN HeaderClass="_Header" HeaderClassLibrary="grid_5.prg" ADD OBJECT TEXT1 AS TEXTBOX PROCEDURE Init() This.SetAll("Visible",.T.) ENDPROC PROCEDURE Click() This.Parent.ColumnClick(This,EVAL("This."+This.CurrentControl)) ENDPROC PROCEDURE text1.Click() This.Parent.Click() ENDPROC ENDDEFINE DEFINE CLASS _Header AS HEADER PROCEDURE Click() This.Parent.Parent.HeaderClick(This) ENDPROC ENDDEFINEA v čem je ta výhoda? Při nutnosti použití vlastní třídy sloupce se musela dosud použít metoda AddObject() a specifikovat třídu sloupce (metoda AddColumn() se nedala použít neboť se potom vytvořil sloupec dle třídy Column - od VFP 8.0 tato metoda respektuje vlastnosti Member ). Nyní při inicializaci gridu stačí nastavit vlastnost ColumnCount na gridu a pak jen nastavit jednotlivé sloupce (zdroj dat, popis, šířku, atd.). Snad už jen jednu věc - celý zdrojový kód musí být uložen v souboru grid_5.prg.
<< Předchozí díl | Následující díl >> |