Page 1 of 1

xImage question

Posted: Wed Sep 26, 2018 7:55 am
by ellano
When I change from Image to Ximage (trying not to use freeimage.dll anymore) I get a "cannot create Dialog Box" error.

My code is fairly simple (the IMAGE version worked perfectly):

Code: Select all

   LOCAL aPath:={}, oDlg, oImages, oGet, CText[3]

   IF Fill_Images( aPath)  //Search all user images "JPG"
     cText[1]:=1
     cText[2]:=LEN(aPath)
     cText[3]:=""
     DEFINE DIALOG oDlg RESOURCE "diaporama" ;
      TITLE "Exa Pedigree: Photo album Bulls"
         REDEFINE XIMAGE oImages ID 101 OF oDlg
         REDEFINE GET oGet VAR cText[3] ID 102 OF oDlg UPDATE READONLY
         REDEFINE BUTTON ID 504 OF oDlg ACTION Next_Img( @oImages, @cText, @oDlg, @oGet, aPath )
         REDEFINE BUTTON ID 503 OF oDlg ACTION Prev_Img( @oImages, @cText, @oDlg, @oGet, aPath )
         REDEFINE BUTTON ID 501 OF oDlg ACTION oDlg:End()
      ACTIVATE DIALOG oDlg CENTER ON INIT (HB_SYMBOL_UNUSED(self), ;
                                           Img_Update( @oImages, @cText, @oDlg, @oGet, aPath))
   ELSE
     MsgStop("No available photos","No photos")
   ENDIF

...

STATIC FUNCTION Img_Update( oImages, cText, oDlg, oGet, aPath )
  oImages:SetSource( aPath[cText[1]] )
  oImages:Refresh()
  cText[3]:=cFileName( aPath[cText[1]] )
  oGet:REFRESH()
  oDlg:UPDATE()
RETURN NIL
Something simple that I am doing wrong here?

Thanks
Emiliano Llano Díaz

Re: xImage question

Posted: Wed Sep 26, 2018 5:35 pm
by nageswaragunupudi
Can you please post your rc file?

Re: xImage question

Posted: Wed Sep 26, 2018 6:10 pm
by ellano

Code: Select all

...

DIAPORAMA DIALOG 22, 26, 311, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pedigree BullFight Photos"
FONT 12, "MS Sans Serif"
{
    PUSHBUTTON  "Close", 501, 246,  84, 45, 15
    PUSHBUTTON  "->", 503, 269, 53, 16, 17
    PUSHBUTTON  "<-", 504, 247, 53, 16, 17
    EDITTEXT    102, 10, 172, 225, 13
    CONTROL     "", 101, "TImage", 0 | WS_CHILD | WS_VISIBLE, 10, 14, 225, 150
}
The same control (Timage) works correctly in other dialog when using xImage :?:

Re: xImage question

Posted: Wed Sep 26, 2018 7:05 pm
by nageswaragunupudi
The same control (Timage) works correctly in other dialog when using xImage :?:
Even then, please change TImage as TXImage in this rc file. Your sample should work with this change.

Re: xImage question

Posted: Thu Sep 27, 2018 5:58 am
by ellano
The other image (else where in the program in a more elaborated and complex code) continues to work nicely with the change, but this one refuses to do the work.

Error occurred at: 27/09/2018, 07:52:01
Error description: Error BASE/1004 No exported method: EVAL
Args:
[ 1] = U

Stack Calls
===========
Called from: => (b)EVAL( 0 )
Called from: .\source\classes\XIMAGE.PRG => TXIMAGE:DEFAULT( 204 )
Called from: .\source\classes\XIMAGE.PRG => TXIMAGE:INITIATE( 189 )
Called from: => __OBJSENDMSG( 0 )
Called from: .\source\function\HARBOUR.PRG => OSEND( 291 )
Called from: .\source\function\HARBOUR.PRG => ASEND( 259 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:INITIATE( 781 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 1036 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 287 )

Re: xImage question

Posted: Thu Sep 27, 2018 6:44 am
by nageswaragunupudi
Complex? Actually it is very simple to program with XImage. I simplified your program to demonstrate the simplicity in dealing with ximage.

Code: Select all

#include "fivewin.ch"

function Main()

   local oDlg, oImage, oSay
   local cPath    := "c:\\fwh\\bitmaps\\pngs\\"
   local aImages  := DIRECTORY( cPath + "*.png" )
   local nImage   := 1

   AEval( aImages, { |a,i| aImages[ i ] := cPath + a[ 1 ] } )

   DEFINE DIALOG oDlg RESOURCE "diaporama" ;
      TITLE "Exa Pedigree: Photo album Bulls"

   REDEFINE XIMAGE oImage SOURCE aImages[ nImage ] ID 101 OF oDlg UPDATE
   REDEFINE SAY oSay PROMPT { || cFileName( aImages[ nImage ] ) } ID 102 OF oDlg UPDATE COLOR CLR_BLACK,CLR_WHITE
   REDEFINE BUTTON ID 504 OF oDlg WHEN nImage > 1 ACTION ( nImage--, oDlg:Update() )
   REDEFINE BUTTON ID 503 OF oDlg WHEN nImage < Len( aImages ) ACTION ( nImage++, oDlg:Update() )
   REDEFINE BUTTON ID 501 OF oDlg ACTION oDlg:End()

   oDlg:bPainted := { || oDlg:Box( oSay:nTop-1, oSay:nLeft-1, oSay:nTop + oSay:nHeight, ;
                         oSay:nLeft + oSay:nWidth, CLR_GRAY ) }

   ACTIVATE DIALOG oDlg CENTER

return nil
Simple nImage++ or nImage-- switches images without any additional code.

rc file (minor changes)

Code: Select all

DIAPORAMA DIALOG 22, 26, 311, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pedigree BullFight Photos"
FONT 12, "MS Sans Serif"
{
    PUSHBUTTON  "Close", 501, 246,  84, 45, 15
    PUSHBUTTON  "->", 503, 269, 53, 16, 17
    PUSHBUTTON  "<-", 504, 247, 53, 16, 17
    CTEXT  ""  102, 10, 172, 225, 13, SS_CENTERIMAGE
    CONTROL     "", 101, "TXImage", 0 | WS_CHILD | WS_VISIBLE, 10, 14, 225, 150
}
Image

Re: xImage question

Posted: Thu Sep 27, 2018 8:37 am
by ellano
Indeed, simpler (ahaha the answer was in the SOURCE key word).

Nevertheless, it refused to work until I did this slight change to your otherwise elegant code:

Code: Select all

       REDEFINE BUTTON ID 504 OF oDlg WHEN nImage > 1 ACTION ( nImage--, oImage:REFRESH() )
       REDEFINE BUTTON ID 503 OF oDlg WHEN nImage < Len( aDirectorio ) ACTION ( nImage++, oImage:REFRESH() )
 
Thanks for your time and interest in the question
Emiliano Llano Díaz