I made the following include file, which has the following procedures:
(see source for parms).
procedures:
p-ComboAddValue : Adds an item to a combobox
p-ComboAutoWidh : Sets the width of the list using the content
p-ComboDropDown : Forces the combo to display the list
p-ComboSetWidth : Manually set the combo box width
functions:
f-getComboId : Returns the id of the currently selected item.
To create the include:
Open the procedure editor.
insert the code.
Save.
and open using File Open in the UIB.
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
&ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Include
/*--------------------------------------------------------------------------
File :
Purpose :
Syntax :
Description :
Author(s) :
Created :
Notes :
------------------------------------------------------------------------*/
/* This .W file was created with the Progress UIB. */
/*----------------------------------------------------------------------*/
/* *************************** Definitions ************************** */
/* API DEF'S VOOR COMBO/LISTBOX ID'S */
DEFINE VARIABLE iRC AS INTEGER NO-UNDO.
DEFINE VARIABLE iRecid AS INTEGER NO-UNDO.
PROCEDURE SendMessageA EXTERNAL "USER32.DLL":
DEFINE INPUT PARAMETER hwnd AS LONG NO-UNDO.
DEFINE INPUT PARAMETER wmsg AS LONG NO-UNDO.
DEFINE INPUT PARAMETER wparam AS LONG NO-UNDO.
DEFINE INPUT PARAMETER lparam AS LONG NO-UNDO.
DEFINE RETURN PARAMETER rc AS LONG NO-UNDO.
END PROCEDURE.
&GLOBAL-DEFINE CB_GETITEMDATA 336
&GLOBAL-DEFINE CB_SETITEMDATA 337
&GLOBAL-DEFINE CB_GETCURSEL 327
&GLOBAL-DEFINE CB_SETDROPPEDWIDTH 352
&GLOBAL-DEFINE CB_SHOWDROPDOWN 335
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
/* ******************** Preprocessor Definitions ******************** */
/* _UIB-PREPROCESSOR-BLOCK-END */
&ANALYZE-RESUME
/* ************************ Function Prototypes ********************** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD f-GetComboId Include
FUNCTION f-GetComboId RETURNS INTEGER
( iph-combo AS WIDGET-HANDLE ) FORWARD.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* *********************** Procedure Settings ************************ */
&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
/* Settings for THIS-PROCEDURE
Type: Include
Allow:
Frames: 0
Add Fields to: Neither
Other Settings: INCLUDE-ONLY
*/
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS
/* ************************* Create Window ************************** */
&ANALYZE-SUSPEND _CREATE-WINDOW
/* DESIGN Window definition (used by the UIB)
CREATE WINDOW Include ASSIGN
HEIGHT = 2
WIDTH = 40.
/* END WINDOW DEFINITION */
*/
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Include
/* *************************** Main Block *************************** */
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* ********************** Internal Procedures *********************** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE p-ComboAddValue Include
PROCEDURE p-ComboAddValue :
/*--------------------------------------------------------------------------
----
Purpose: Adds a value to a combo-box (ussing add-last).
Parameters: combobox handle, item display text, item id
Notes:
----------------------------------------------------------------------------
--*/
DEFINE INPUT PARAMETER iph-combo_box AS WIDGET-HANDLE NO-UNDO.
DEFINE INPUT PARAMETER ipc-value AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ipi-id AS INTEGER NO-UNDO.
iph-combo_box:ADD-LAST(ipc-value).
RUN SendMessageA (INPUT iph-combo_box:HWND,
INPUT {&CB_SETITEMDATA},
INPUT iph-combo_box:NUM-ITEMS - 1,
INPUT ipi-id,
OUTPUT iRC).
IF iRC = -1 THEN
MESSAGE "SetItemData Failed" VIEW-AS ALERT-BOX.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE p-ComboAutoWidth Include
PROCEDURE p-ComboAutoWidth :
/*--------------------------------------------------------------------------
----
Purpose: Sets the width of a combo-box, using the content length
Parameters: combobox handle, min. width, max. width
Notes:
----------------------------------------------------------------------------
--*/
DEFINE INPUT PARAMETER iph-combo_box AS WIDGET-HANDLE NO-UNDO.
DEFINE INPUT PARAMETER ipi-min_width AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER ipi-max_width AS INTEGER NO-UNDO.
DEFINE VARIABLE li-tel AS INTEGER NO-UNDO INITIAL 0.
DEFINE VARIABLE li-width AS INTEGER NO-UNDO INITIAL 0.
DEFINE VARIABLE li-tmp AS INTEGER NO-UNDO.
DO li-tel = 1 TO iph-combo_box:NUM-ITEMS:
li-tmp =
FONT-TABLE:GET-TEXT-WIDTH-PIXELS(TRIM(iph-combo_box:ENTRY(li-tel)),
iph-combo_box:FONT).
IF li-tmp > li-width THEN
li-width = li-tmp.
END.
IF li-width < ipi-min_width THEN
li-width = ipi-min_width.
IF li-width > ipi-max_width THEN
li-width = ipi-max_width.
RUN p-ComboSetWidth(iph-combo_box, li-width).
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE p-ComboDropDown Include
PROCEDURE p-ComboDropDown :
/*--------------------------------------------------------------------------
----
Purpose: forces the combobox to drop, without clicking on it
Parameters: combo-box handle
Notes:
----------------------------------------------------------------------------
--*/
DEFINE INPUT PARAMETER iph-combo_box AS WIDGET-HANDLE NO-UNDO.
RUN SendMessageA (iph-combo_box:HWND, {&CB_SHOWDROPDOWN}, 1, 0, OUTPUT
iRC).
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE p-ComboSetWidth Include
PROCEDURE p-ComboSetWidth :
/*--------------------------------------------------------------------------
----
Purpose: manually set the combo box width
Parameters: <none>
Notes:
----------------------------------------------------------------------------
--*/
DEFINE INPUT PARAMETER iph-combo_box AS WIDGET-HANDLE NO-UNDO.
DEFINE INPUT PARAMETER ipi-width AS INTEGER NO-UNDO.
RUN SendMessageA (iph-combo_box:HWND, {&CB_SETDROPPEDWIDTH}, ipi-width, 0,
OUTPUT iRC).
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* ************************ Function Implementations ***************** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION f-GetComboId Include
FUNCTION f-GetComboId RETURNS INTEGER
( iph-combo AS WIDGET-HANDLE ) :
/*--------------------------------------------------------------------------
----
Purpose:
Notes:
----------------------------------------------------------------------------
--*/
DEFINE VARIABLE li-retval AS INTEGER NO-UNDO INITIAL ?.
RUN SendMessageA (INPUT iph-combo:HWND,
INPUT {&CB_GETCURSEL},
INPUT 0,
INPUT 0,
OUTPUT iRC).
IF iRC = -1 THEN
MESSAGE "No Selected Row" VIEW-AS ALERT-BOX.
ELSE
DO:
RUN SendMessageA (INPUT iph-combo:HWND,
INPUT {&CB_GETITEMDATA},
INPUT iRC,
INPUT 0,
OUTPUT iRecid).
IF iRecid = -1 THEN
MESSAGE "Invalid Item Data Returned" VIEW-AS ALERT-BOX.
ELSE
li-retval = iRecId.
END.
RETURN li-retval. /* Function return value. */
END FUNCTION.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
[/code]
====================================================
Maurits van Rijnen
Systeemontwikkelaar
E-mail : maurits.van.rijnen@bct.nl
Prive : mmvr@xs4all.nl
Telefoon: +31 (0)46 - 4424545 Telefax: +31 (0)46 - 4424730
Internet :
http://www.bct.nl E-Mail : info@bct.nl