Rather this, with minor correction:---
METHOD findText( cText, nPos, lCaseSensitive, lExact ) CLASS LISTBOX

   LOCAL nPosFound
   LOCAL nPass
   LOCAL nPasses
   LOCAL nSize

   IF !ISCHARACTER( cText )
      RETURN 0
   ENDIF
   IF !ISNUMBER( nPos )
      nPos := 1
   ENDIF
   IF !ISLOGICAL( lCaseSensitive )
      lCaseSensitive := .T.
   ENDIF
   IF !lCaseSensitive
      cText := Lower( cText )
   ENDIF
   IF !ISLOGICAL( lExact )
      lExact := Set( _SET_EXACT )
   ENDIF

   nSize := Len( ::aItems ) - nPos + 1
   nPasses := iif( nPos > 1, 2, 1 )

   IF lExact
      FOR nPass := 1 TO nPasses
         IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
                                                 { | aItem | aItem[
_ITEM_cTEXT ] == cText },;
                                                 { | aItem | Lower( aItem[
_ITEM_cTEXT ] ) == cText } ), nPos, nSize ) ) > 0
            EXIT
         ENDIF

         nSize := nPos - 1
         nPos := 1
      NEXT
   ELSE
      FOR nPass := 1 TO nPasses
         /* NOTE: Intentionally using "=" comparison to honor the _SET_EXACT
setting. */
         IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
                                                 { | aItem | aItem[
_ITEM_cTEXT ] = cText },;
                                                 { | aItem | Lower( aItem[
_ITEM_cTEXT ] ) = cText } ), nPos, nSize ) ) > 0
            EXIT
         ENDIF

         nSize := nPos - 1
         nPos := 1
      NEXT
   ENDIF

   RETURN nPosFound

METHOD findData( cData, nPos, lCaseSensitive, lExact ) CLASS LISTBOX

   LOCAL nPosFound
   LOCAL nPass
   LOCAL nPasses
   LOCAL nSize

   IF !ISCHARACTER( cData )
      RETURN 0
   ENDIF
   IF !ISNUMBER( nPos )
      nPos := 1
   ENDIF
   IF !ISLOGICAL( lCaseSensitive )
      lCaseSensitive := .T.
   ENDIF
   IF !lCaseSensitive
      cData := Lower( cData )
   ENDIF
   IF !ISLOGICAL( lExact )
      lExact := Set( _SET_EXACT )
   ENDIF

   nSize := Len( ::aItems ) - nPos + 1
   nPasses := iif( nPos > 1, 2, 1 )

   IF lExact
      FOR nPass := 1 TO nPasses
         IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
                                                 { | aItem |
_LISTBOX_ITEMDATA( aItem ) == cData },;
                                                 { | aItem | Lower(
_LISTBOX_ITEMDATA( aItem ) ) == cData } ), nPos, nSize ) ) > 0
            EXIT
         ENDIF

         nSize := nPos - 1
         nPos := 1
      NEXT
   ELSE
      FOR nPass := 1 TO nPasses
         /* NOTE: Intentionally using "=" comparison to honor the _SET_EXACT
setting. */
         IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
                                                 { | aItem |
_LISTBOX_ITEMDATA( aItem ) = cData },;
                                                 { | aItem | Lower(
_LISTBOX_ITEMDATA( aItem ) ) = cData } ), nPos, nSize ) ) > 0
            EXIT
         ENDIF

         nSize := nPos - 1
         nPos := 1
      NEXT
   ENDIF

   RETURN nPosFound
---

Brgds,
Viktor

On Wed, Feb 18, 2009 at 1:55 PM, Viktor Szakáts <[email protected]>wrote:

> Yes it would be good.
> Is this what you had in mind?:
> ---
> METHOD findText( cText, nPos, lCaseSensitive, lExact ) CLASS LISTBOX
>
>    LOCAL nPosFound
>    LOCAL nPass
>    LOCAL nPasses
>    LOCAL nSize
>    LOCAL lOldExact
>
>    IF !ISCHARACTER( cText )
>       RETURN 0
>    ENDIF
>    IF !ISNUMBER( nPos )
>       nPos := 1
>    ENDIF
>    IF !ISLOGICAL( lCaseSensitive )
>       lCaseSensitive := .T.
>    ENDIF
>    IF !lCaseSensitive
>       cText := Lower( cText )
>    ENDIF
>    DEFAULT lExact TO Set( _SET_EXACT )
>
>    nSize := Len( ::aItems ) - nPos + 1
>    nPasses := iif( nPos > 1, 2, 1 )
>
>    IF lExact
>       FOR nPass := 1 TO nPasses
>          IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
>                                                  { | aItem | aItem[
> _ITEM_cTEXT ] == cText },;
>                                                  { | aItem | Lower( aItem[
> _ITEM_cTEXT ] ) == cText } ), nPos, nSize ) ) > 0
>             EXIT
>          ENDIF
>
>          nSize := nPos - 1
>          nPos := 1
>       NEXT
>    ELSE
>       FOR nPass := 1 TO nPasses
>          /* NOTE: Intentionally using "=" comparison to honor the
> _SET_EXACT setting. */
>          IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
>                                                  { | aItem | aItem[
> _ITEM_cTEXT ] = cText },;
>                                                  { | aItem | Lower( aItem[
> _ITEM_cTEXT ] ) = cText } ), nPos, nSize ) ) > 0
>             EXIT
>          ENDIF
>
>          nSize := nPos - 1
>          nPos := 1
>       NEXT
>    ENDIF
>
>    RETURN nPosFound
>
> METHOD findData( cData, nPos, lCaseSensitive, lExact ) CLASS LISTBOX
>
>    LOCAL nPosFound
>    LOCAL nPass
>    LOCAL nPasses
>    LOCAL nSize
>    LOCAL lOldExact
>
>    IF !ISCHARACTER( cData )
>       RETURN 0
>    ENDIF
>    IF !ISNUMBER( nPos )
>       nPos := 1
>    ENDIF
>    IF !ISLOGICAL( lCaseSensitive )
>       lCaseSensitive := .T.
>    ENDIF
>    IF !lCaseSensitive
>       cData := Lower( cData )
>    ENDIF
>    DEFAULT lExact TO Set( _SET_EXACT )
>
>    nSize := Len( ::aItems ) - nPos + 1
>    nPasses := iif( nPos > 1, 2, 1 )
>
>    IF lExact
>       FOR nPass := 1 TO nPasses
>          IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
>                                                  { | aItem |
> _LISTBOX_ITEMDATA( aItem ) == cData },;
>                                                  { | aItem | Lower(
> _LISTBOX_ITEMDATA( aItem ) ) == cData } ), nPos, nSize ) ) > 0
>             EXIT
>          ENDIF
>
>          nSize := nPos - 1
>          nPos := 1
>       NEXT
>    ELSE
>       FOR nPass := 1 TO nPasses
>          /* NOTE: Intentionally using "=" comparison to honor the
> _SET_EXACT setting. */
>          IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,;
>                                                  { | aItem |
> _LISTBOX_ITEMDATA( aItem ) = cData },;
>                                                  { | aItem | Lower(
> _LISTBOX_ITEMDATA( aItem ) ) = cData } ), nPos, nSize ) ) > 0
>             EXIT
>          ENDIF
>
>          nSize := nPos - 1
>          nPos := 1
>       NEXT
>    ENDIF
>
>    IF lOldExact != NIL
>       Set( _SET_EXACT, lOldExact )
>    ENDIF
>
>    RETURN nPosFound
> ---
>
> Brgds,
> Viktor
>
>
> On Wed, Feb 18, 2009 at 1:36 PM, Przemyslaw Czerpak <[email protected]>wrote:
>
>> On Tue, 17 Feb 2009, [email protected] wrote:
>>
>> Hi Viktor,
>>
>> > Log Message:
>> > -----------
>> > 2009-02-18 00:19 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
>> >   * source/rtl/listbox.prg
>> >     ! Restored _SET_EXACT dependent code parts to have the
>> >       same logic as before my modifications a few years ago.
>> >       Przemek, is it right now? I honestly didn't understand
>> >       the issue here.
>>
>> I suggest to fully remove _SET_EXACT modifications and replace it
>> by own code which will work respecting _SET_EXACT setting. I'll
>> try to make it.
>>
>> best regards,
>> Przemek
>> _______________________________________________
>> Harbour mailing list
>> [email protected]
>> http://lists.harbour-project.org/mailman/listinfo/harbour
>>
>
>
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to