espacio entre lineas en COMBOBox

espacio entre lineas en COMBOBox

Postby goosfancito » Sun Dec 10, 2023 11:22 am

Hola.
Consulta, en un combobox duro y puro (no xbrowse) puedo darle un margen entre cada linea mas grande dle que tiene por defecto?

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: espacio entre lineas en COMBOBox

Postby nageswaragunupudi » Sun Dec 10, 2023 4:06 pm

Code: Select all  Expand view  RUN
@ r,c COMBOBOX .............. ITEMHEIGHT <nHeight>
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: espacio entre lineas en COMBOBox

Postby goosfancito » Mon Dec 11, 2023 4:57 am

nageswaragunupudi wrote:
Code: Select all  Expand view  RUN
@ r,c COMBOBOX .............. ITEMHEIGHT <nHeight>


y ya que estamos para el listbox?
Grazie Mille
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: espacio entre lineas en COMBOBox

Postby Jimmy » Mon Dec 11, 2023 5:38 am

as i can say you need enable Ownerdraw
Image

Code: Select all  Expand view  RUN
     oCombo_left := TComboBox() :new( 0, 0,, acItem, 90, 300, oMain,,,, BFcolor, BGcolor, .T., oFontDefault,,,, .F., acBitmaps )
      oCombo_left:nDropWidth( 200 )
      oCombo_left:nItemHeight( 32 )
      oCombo_left:nSelectionHeight( 32 )
      oCombo_left:Select( DriveNumber( cStartLeft ) )
      oCombo_left:bCloseUp := { || Change2Drive( oCombo_left:GetSelText(), 1 ) }
      oCombo_left:lIncSearch := .T.

      // use Codeblock to call Method
         oCombo_left:bOwnerDraw := { | a, b, c, d | oExpl_Left:DoMyComBo( a, b, c, d, @acItem, @acType, @acBitmaps, oCombo_left ) }



Code: Select all  Expand view  RUN
METHOD DoMyComBo()
LOCAL WinDir        := GETENV( "Windir" )
LOCAL cPara         := ""
LOCAL cAlign        := nOr( DT_LEFT, DT_NOPREFIX )
LOCAL nIcoHandle    := 0
LOCAL nSize         := 32
LOCAL ii, nCount, xPara
LOCAL oSelf
LOCAL nIdCtl
LOCAL oStruc
LOCAL nPointer
LOCAL acItem, acType, cItemText, oObj
LOCAL CtlType
LOCAL CtlID
LOCAL itemID
LOCAL itemAction
LOCAL itemState
LOCAL hwndItem
LOCAL hDC
LOCAL aRect
LOCAL nLeft
LOCAL nTop
LOCAL nRight
LOCAL nBottom
LOCAL itemData
LOCAL cDLL
LOCAL hModule
LOCAL nResID
LOCAL aBitmaps, hBitMap, acBitmaps
LOCAL OldAt         := - 1
LOCAL BrushHiBack   := CreateSolidBrush( BFcolor )
LOCAL BrushSysColor := CreateSolidBrush( BGcolor )
LOCAL aGrad         := { ;
                    { .5, BFcolor, BGcolor }, ;
                    { .6, BGcolor, BFcolor }, ;
                    { .1, BFcolor, BGcolor }, ;
                    }

   nCount := PCOUNT()
   FOR ii := 1 TO nCount
      xPara := PValue( ii )
      DO CASE
         CASE ii = 1
            oSelf := xPara
         CASE ii = 2
            nIdCtl := xPara
         CASE ii = 3
            oStruc := xPara
         CASE ii = 4
            nPointer := xPara
         CASE ii = 5
            acItem := xPara
         CASE ii = 6
            acType := xPara
         CASE ii = 7
            acBitmaps := xPara
         CASE ii = 8
            oObj := xPara
            IF !EMPTY( oObj )
               IF VALTYPE( oObj ) = "O"
                  OldAt := oObj:nAt
               ENDIF
            ENDIF
      ENDCASE
   NEXT

   CtlType := oStruc:CtlType
   CtlID := oStruc:CtlID
   itemID := oStruc:itemID
   itemAction := oStruc:itemAction
   itemState := oStruc:itemState
   hwndItem := oStruc:hwndItem
   hDC := oStruc:hDC
   aRect := oStruc:aRect
   itemData := oStruc:itemData

   nTop := aRect[ 1 ]
   nLeft := aRect[ 2 ]
   nBottom := aRect[ 3 ]
   nRight := aRect[ 4 ]

   IF CtlType = ODT_COMBOBOX .OR. CtlType = ODT_LISTBOX               // .AND. CtlID =

      SetBkMode( hDC, 1 )                                             // TRANSPARENT =1 OPAQUE =2

      DO CASE
         CASE itemAction = ODA_SELECT
            FillRect( hDC, aRect, BrushSysColor )
            SetTextColor( hDC, BFcolor )

         CASE itemAction = ODA_DRAWENTIRE
            IF OldAt = itemID + 1 .AND. oObj:IsOpen()
               OldAt = - 1
               IF BGColor = 256 * 256 * 256 - 1                       // 16777215
                  //  Msginfo("white")
                  FillRect( hDC, aRect, COLOR_MENUHILIGHT + 1 )
                  SetTextColor( hDC, GetSysColor( COLOR_MENU ) )
               ELSE
                  GradientFill( hDC, aRect[ 1 ], aRect[ 2 ], aRect[ 3 ] - 1, aRect[ 4 ], aGrad, .t. )
                  SetTextColor( hDC, BFcolor )
               ENDIF
            ELSE
               FillRect( hDC, aRect, BrushSysColor )
               SetTextColor( hDC, BFcolor )
            ENDIF

         CASE itemAction = ODA_FOCUS
            IF BGColor = 256 * 256 * 256 - 1                          // 16777215
               FillRect( hDC, aRect, COLOR_MENUHILIGHT + 1 )
               SetTextColor( hDC, GetSysColor( COLOR_MENU ) )
            ELSE
               GradientFill( hDC, aRect[ 1 ], aRect[ 2 ], aRect[ 3 ] - 1, aRect[ 4 ], aGrad, .t. )
               SetTextColor( hDC, BFcolor )
            ENDIF

      ENDCASE

      // use System Icon from DLL
      IF lUse_IconEx = .T.

         cDLL := WinDir + "\System32\imageres.dll"

         DO CASE
            CASE acType[ itemID + 1 ] = DRIVE_UNKNOWN
               nResID := 75
            CASE acType[ itemID + 1 ] = DRIVE_NO_ROOT_DIR
               nResID := 32

            CASE acType[ itemID + 1 ] = DRIVE_REMOVABLE
               IF SUBSTR( acItem[ itemID + 1 ], 1, 1 ) $ "AB"
                  nResID := 23
               ELSE
                  cDLL := WinDir + "\System32\DDORes.dll"
                  nResID := 2389
               ENDIF

            CASE acType[ itemID + 1 ] = DRIVE_FIXED
               IF SUBSTR( acItem[ itemID + 1 ], 1, 2 ) = "C:"
                  nResID := 36
               ELSE
                  nResID := 32
               ENDIF
            CASE acType[ itemID + 1 ] = DRIVE_REMOTE
               nResID := 33
            CASE acType[ itemID + 1 ] = DRIVE_CDROM
               nResID := 30
            CASE acType[ itemID + 1 ] = DRIVE_RAMDISK
               nResID := 34

         ENDCASE

         hModule := GetModuleHandle( cDLL )
         IF hModule == 0
            hModule := LoadLibrary( cDLL )
         ENDIF
         nIcoHandle := LOADIMAGERESICON( hModule, nResID, 32 )

         DrawIconEx( hDC, ;
                     nTop - 4, ;
                     nLeft, ;
                     nIcoHandle, ;
                     nSize, ;
                     nSize, ;
                     0, ;                                             // _In_     UINT   istepIfAniCur,
                     0, ;                                             // _In_opt_ HBRUSH hbrFlickerFreeDraw,
                     nOr( DI_NORMAL ) )                               // _In_     UINT   diFlags

         DestroyIcon( nIcoHandle )
         FreeLibrary( hModule )

      ELSE                                                            // use Resource

         aBitmaps := FW_ReadImage( nil, acBitmaps[ itemID + 1 ], { nSize - 2, nSize - 2 }, .F. )
         hBitMap := aBitmaps[ 1 ]

         DrawBitmap( hDC, hBitMap, nTop + 3, nLeft, nSize - 3, nSize - 6 )

         PalBmpFree( aBitmaps )
         DeleteObject( hBitMap )

      ENDIF

      nLeft += 32 + 4

      cItemText := acItem[ itemID + 1 ]

      DrawText( hDC, ;
                cItemText, ;
                { nTop + 4, nLeft, nBottom, nRight }, ;
                cAlign )
   ENDIF

   DeleteObject( BrushHiBack )
   DeleteObject( BrushSysColor )

RETURN .T.
 
greeting,
Jimmy
User avatar
Jimmy
 
Posts: 1732
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany

Re: espacio entre lineas en COMBOBox

Postby nageswaragunupudi » Mon Dec 11, 2023 6:45 am

goosfancito wrote:
nageswaragunupudi wrote:
Code: Select all  Expand view  RUN
@ r,c COMBOBOX .............. ITEMHEIGHT <nHeight>


y ya que estamos para el listbox?
Grazie Mille


You asked for combox, I answered for combobox.

Do you want for listbox?
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: espacio entre lineas en COMBOBox and ListBox

Postby goosfancito » Mon Dec 11, 2023 9:35 am

yes, in listbox too. gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 47 guests