>How do I achieve the same result with a more politically correct modern vfp form object. Combo and list boxes don't appear to have a way to include the 'skip' conditions...
You can keep the popup, instantiate it, and use it as the source for the combo/listbox. Just look at the RowSourceType, there's a value for popup, and just put the popup's name in the RowSource. The values skipped for are in disabled colour and can't be picked. Here's what I could cram in five minutes, a simple form with just the combo (added a dummy cursor to have some data), pasted from class browser's output:
DEFINE CLASS form1 AS form
DoCreate = .T.
Caption = "Form1"
Name = "Form1"
ADD OBJECT combo1 AS combobox WITH ;
RowSourceType = 9, ;
RowSource = "operator", ;
Height = 24, ;
Left = 48, ;
Top = 24, ;
Width = 241, ;
Name = "Combo1"
PROCEDURE Init
DEFINE POPUP operator FROM 05,20 shadow message "Select an OPERATOR"
DEFINE BAR 1 OF operator PROMPT 'Equal '
DEFINE BAR 2 OF operator PROMPT 'Exactly Equal ' SKIP FOR FLDTYP="L"
DEFINE BAR 3 OF operator PROMPT 'Not Equal ' SKIP FOR FLDTYP="L"
DEFINE BAR 4 OF operator PROMPT 'Greater Than ' SKIP FOR FLDTYP="L"
DEFINE BAR 5 OF operator PROMPT 'Greater or Equal ' SKIP FOR FLDTYP="L"
DEFINE BAR 6 OF operator PROMPT 'Less Than ' SKIP FOR FLDTYP="L"
DEFINE BAR 7 OF operator PROMPT 'Less or Equal ' SKIP FOR FLDTYP="L"
DEFINE BAR 8 OF operator PROMPT 'Contains ' SKIP FOR FLDTYP # "C" AND FLDTYP # "M"
DEFINE BAR 9 OF operator PROMPT 'Does Not Contain ' SKIP FOR FLDTYP # "C" AND FLDTYP # "M"
DEFINE BAR 10 OF operator PROMPT 'Empty '
DEFINE BAR 11 OF operator PROMPT 'Not Empty '
DEFINE BAR 12 of operator PROMPT 'Deleted '
DEFINE BAR 13 of operator PROMPT 'Not Deleted '
create curs xx (fldtyp c(1))
* tried with L or N here, works as advertised:
insert into xx (fldtyp) value ("C")
ENDPROC
ENDDEFINE