Width of Combo-Box Widget

Chris Kelleher

Administrator
Staff member
I got the code, but i don't remember where i got it from.
I think from www.fast4gl.com

<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>

/* DEFINITIONS */
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.
END PROCEDURE.

&GLOBAL-DEFINE CB_SETDROPPEDWIDTH 352


/* PROCEDURES */
PROCEDURE SetComboWidth:
RUN SendMessageA (COMBO-BOX-1:HWND, {&CB_SETDROPPEDWIDTH}, 250, 0).
END PROCEDURE.

[/code]

====================================================
Maurits van Rijnen

Systeemontwikkelaar
E-mail : maurits.van.rijnen@bct.nl
Prive : mmvr@xs4all.nl
 

Chris Kelleher

Administrator
Staff member
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
 
Top