Traditionally we define our objects ahead of time and give them all constant values. PBForms does this, and I imagine the other forms designers do as well.
So I thought I would dip my toe in the object waters and decided to use a progress bar as my guniea pig. Since I can create multiple instances of my object, can I avoid pre-defining the control id for my progress bar? Is there a function like the GUID function to create a random id (and hopefully make sure it is not already in use)?
Here my experiment in code:
So I thought I would dip my toe in the object waters and decided to use a progress bar as my guniea pig. Since I can create multiple instances of my object, can I avoid pre-defining the control id for my progress bar? Is there a function like the GUID function to create a random id (and hopefully make sure it is not already in use)?
Here my experiment in code:
Code:
#COMPILE EXE #DIM ALL %ID_VAL = 1001 FUNCTION PBMAIN () AS LONG DIM x AS LONG DIM y AS LONG DIM hdlg AS DWORD DIM mymeter AS MeterProperty DIM othermeter AS MeterProperty mymeter = CLASS "progressmeter" othermeter = CLASS "progressmeter" mymeter.x = 5 mymeter.y = 20 mymeter.xx = 350 mymeter.yy = 15 mymeter.text = "Where does this show?" othermeter.x = 5 othermeter.y = 50 othermeter.xx = 350 othermeter.yy = 15 DIALOG NEW 0, "Test Object", 5,5,360,70 TO hdlg DIALOG SHOW MODELESS hdlg mymeter.make (hdlg,%ID_VAL) mymeter.range (1,100) othermeter.make (hdlg,%ID_VAL+1) othermeter.range (1,100) FOR y = 1 TO 100 othermeter.pos = y FOR x = 1 TO 100 mymeter.pos = x DIALOG DOEVENTS NEXT x NEXT y MSGBOX "Well?" END FUNCTION CLASS ProgressMeter ' Define values that would be required across methods INSTANCE hdlg AS DWORD INSTANCE ID AS DWORD 'Define values it might be convenient to pre-define before creating control INSTANCE ptext AS STRING INSTANCE x AS LONG INSTANCE y AS LONG INSTANCE xx AS LONG INSTANCE yy AS LONG INSTANCE exists AS LONG CLASS METHOD CreateControl(BYVAL hdlgin AS DWORD, IDin AS LONG) CONTROL ADD PROGRESSBAR, hdlgin, IDin, ptext, x,y,xx,yy,%WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR %PBS_SMOOTH exists = 1 hdlg = hdlgin ID = idin END METHOD CLASS METHOD SetRange(BYVAL RANGE AS LONG) END METHOD INTERFACE MeterProperty INHERIT IUNKNOWN PROPERTY GET x AS LONG PROPERTY = x END PROPERTY PROPERTY SET x (BYVAL v AS LONG) x=v END PROPERTY PROPERTY GET y AS LONG PROPERTY = y END PROPERTY PROPERTY SET y (BYVAL v AS LONG) y=v END PROPERTY PROPERTY GET xx AS LONG PROPERTY = xx END PROPERTY PROPERTY SET xx (BYVAL v AS LONG) xx=v END PROPERTY PROPERTY GET yy AS LONG PROPERTY = yy END PROPERTY PROPERTY SET yy (BYVAL v AS LONG) yy=v END PROPERTY PROPERTY GET TEXT AS STRING PROPERTY = ptext END PROPERTY PROPERTY SET TEXT (BYVAL v AS STRING) ptext=v END PROPERTY PROPERTY GET lorange AS LONG LOCAL waste AS LONG LOCAL value AS LONG IF exists = 1 THEN PROGRESSBAR GET RANGE hdlg, ID TO value, waste PROPERTY = value ELSE PROPERTY = -1 END IF END PROPERTY PROPERTY GET hirange AS LONG LOCAL waste AS LONG LOCAL value AS LONG IF exists = 1 THEN PROGRESSBAR GET RANGE hdlg, ID TO waste,value PROPERTY = value ELSE PROPERTY = -1 END IF END PROPERTY METHOD RANGE (BYVAL loval AS LONG,hival AS LONG) IF exists = 1 THEN PROGRESSBAR SET RANGE hdlg, ID, loval, hival END IF END METHOD PROPERTY GET POS AS LONG LOCAL value AS LONG IF exists = 1 THEN PROGRESSBAR GET POS hdlg, ID TO value PROPERTY = value ELSE PROPERTY = -1 END IF END PROPERTY PROPERTY SET POS (BYVAL value AS LONG) IF exists = 1 THEN PROGRESSBAR SET POS hdlg, ID, value END IF END PROPERTY METHOD make(BYVAL hdlgin AS DWORD, idin AS LONG) me.CreateControl (hdlgin, idin) END METHOD END INTERFACE END CLASS
Comment