FW Preview user style

FW Preview user style

Postby Detlef » Sat May 07, 2022 10:18 am

Hi all,

again i have a problem with the FW Preview window.
I finally managed to get a nearly bare screen without any buttons except the one to close.
This button I want to put at the right end of the bar.
But I can't.
When I ask for the value oWnd:nWidht it gives me 545 which is completely wrong.
Here my code:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

REQUEST FWHARU

PROCEDURE Main()
//----------------
LOCAL oPrn

   TPreview():bSetUp := { |oPreview, oWnd| oWnd:oMenu:End(), oWnd:oMsgBar:End(),;
                                           oPreview:oBar:bPainted := {|| NIL } ,;
                                           oWnd:oBar:aControls[ 2 ]:End()      ,;
                                           msginfo( "width of window: " + trim( str( oWnd:nWidth ) ) ),;
                                           oWnd:oBar:aControls[ 1 ]:nLeft := oWnd:nWidth - 32,;
                                           oPreview:oFactor:End();
                        }
   RPrevUserBtns( { |oPrV, oBar| ReportExtend( oPrV, oBar ) }, 2007, { 48, 48 } )

   TPreview():lListViewHide := .t.
   TPrinter():lUseHaruPDF := .t.

   PRINT oPrn NAME "Druckvorschau" PREVIEW
      PAGE
         oPrn:Say( "Line one" )
      ENDPAGE
   ENDPRINT

RETURN

FUNCTION ReportExtend( oPreview, oBar )
//-------------------------------------
   do while len( oBar:aControls ) > 0
      oBar:Del( Len( oBar:aControls ) )
   enddo

RETURN .f.
 

I'll be glad for any helping idea.
Thanks,
Detlef
User avatar
Detlef
 
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: FW Preview user style

Postby cnavarro » Sat May 07, 2022 3:40 pm

Look original code of RPREVIEW,PRG class
Code: Select all  Expand view  RUN

METHOD Activate() CLASS TPreview

   local hWndMain

   if ::oWnd == nil
      return nil
   endif

   if ::bSetUp != nil
      Eval( ::bSetUp, Self, ::oWnd )
   endif

   ACTIVATE WINDOW ::oWnd MAXIMIZED ;
 

Codeblock ::bSetup is evaluate before ACTIVATE WINDOW ::oWnd MAXIMIZED, then, ::oWnd does not yet have the dimensions of the window when it is maximized
Then, at moment, please, use this
Code: Select all  Expand view  RUN

   TPreview():bSetUp := { |oPreview, oWnd| oWnd:oMenu:End(), oWnd:oMsgBar:End(),;
                                           oPreview:oBar:bPainted := {|| NIL } ,;
                                           oWnd:oBar:aControls[ 2 ]:End()      ,;
                                           oWnd:Maximize(), ;
                                           MsgInfo( "width of window: " + trim( str( oWnd:nWidth ) ), oWnd:ClassName() ) }
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW Preview user style

Postby Detlef » Sat May 07, 2022 4:23 pm

Many thanks for the clarification, Cristobal.
I overlooked that point in the rpreview.prg.
User avatar
Detlef
 
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: FW Preview user style

Postby cnavarro » Sat May 07, 2022 5:34 pm

Dear Detlef, if you want to modify the method, try this way

Code: Select all  Expand view  RUN


METHOD Activate() CLASS TPreview

   local hWndMain
   local oThis    := Self

   if ::oWnd == nil
      return nil
   endif

   // Modified - CNL, look ON INIT clause
   // if ::bSetUp != nil
   //   Eval( ::bSetUp, Self, ::oWnd )
   // endif

   ACTIVATE WINDOW ::oWnd MAXIMIZED ;
      ON INIT      ( if( oThis:bSetUp != nil, Eval( oThis:bSetUp, Self, oThis:oWnd ), ) ) ;
      ON RESIZE    ( ::PaintMeta(), ::ResizeListView() ) ;
      ON UP        ::VScroll( GO_UP )             ;
      ON DOWN      ::VScroll( GO_DOWN )           ;
      ON PAGEUP    ::VScroll( GO_UP, GO_PAGE)     ;
      ON PAGEDOWN  ::VScroll( GO_DOWN, GO_PAGE)   ;
      ON LEFT      ::HScroll( GO_LEFT )           ;
      ON RIGHT     ::HScroll( GO_RIGHT )          ;
      ON PAGELEFT  ::HScroll( GO_LEFT, GO_PAGE )  ;
      ON PAGERIGHT ::HScroll( GO_RIGHT, GO_PAGE ) ;
      VALID        ( ::oWnd:oIcon := nil       ,;
                     ::oFont:End()             ,;
                     ::oCursor:End()           ,;
                     ::oMeta1:End()            ,;
                     ::oMeta2:End()            ,;
                     ::oDevice:End()           ,;
                     ::oHand:End()             ,;
                     If( Empty( ::oImageList ),, ( ::oImageList:End(), ::oImageList := nil ) ),;
                     If( ! Empty( ::oImageListPages ), ::oImageListPages:End(),),;
                     ::oWnd := nil             ,;
                     ::oDevice:oPreview := nil ,;
                     ::lExit := .T. )

     if ::oDevice:lPrvModal
         if ::oWndMain == nil
            StopUntil( { || ::lExit } )
         else
            hWndMain    := WndMain():hWnd
            StopUntil( { || ::lExit .or. !IsWindow( hWndMain ) } )
         endif
     endif

return nil
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW Preview user style

Postby Otto » Sat May 07, 2022 6:01 pm

Hello friends,

I think there is a certain danger in our group.

I recently heard a lecture by a philosopher who said that it is dangerous to develop the technical language more and more.
This way you exclude people from active participation and eventually philosophy sinks into meaninglessness.

I notice a similar tendency here with us.

When I follow these ramifications, I ask myself, why don't we just make another class with these properties so that everyone understands how it works?

Best regards,
Otto


Image
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6335
Joined: Fri Oct 07, 2005 7:07 pm

Re: FW Preview user style

Postby cnavarro » Sat May 07, 2022 8:23 pm

Dear Otto
Sorry but I don't quite understand your proposal. Can he explain better what he means?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: FW Preview user style

Postby Detlef » Sat May 07, 2022 9:12 pm

cnavarro wrote:Dear Detlef, if you want to modify the method, try this way
Code: Select all  Expand view  RUN

METHOD Activate() CLASS TPreview ...
...
 


Thanks again, Cristobal, I will study this and modify rpreview.prg to my needs.
User avatar
Detlef
 
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: FW Preview user style

Postby Otto » Sun May 08, 2022 12:14 am

Dear Cristobal,

For example, I only need preview and print button.

What I mean is, you should have - if we at FIVEWIN have the great advantage of having access to the source code courage and simply modify the classes.

But it's certainly easier with reduced, specific code to get what you want.

Best regards,
Otto


Image

Image
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6335
Joined: Fri Oct 07, 2005 7:07 pm

Re: FW Preview user style

Postby nageswaragunupudi » Sun May 08, 2022 5:26 am

Code: Select all  Expand view  RUN

TPreview():bButtonBar := { |oPrev, oWnd| CustomBar( oPrev, oWnd ) }
 


Code: Select all  Expand view  RUN

function CustomBar( oPrev, oWnd )

   local oBar, oBtn

   DEFINE BUTTONBAR oBar OF oWnd SIZE 48,48 2007

   DEFINE BUTTON oBtn OF oBar

   DEFINE BUTTON oBtn OF oBar RESOURCE FWBitmap( "Exit2" ) ;
   ACTION oWnd:End() BTNRIGHT TOOLTIP FWString( "Exit" )

   oPrev:oBar  := oBar

return oBar
 
Regards

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

Re: FW Preview user style

Postby Otto » Sun May 08, 2022 8:01 am

Dear Mr. Rao,

I know that.
But that's just a small example.
And if you want individual behaviour, you have to pass more code blocks. Not only the menu.

But tell me one reason why this is better.
I believe that few can understand or use these code blocks well.
It complicates programming.

I think it's easier for an application programmer to just build the menu and appearance.

We have to be careful not to lose touch with application programmers who just want to solve a problem quickly.

For us experienced programmers, it appears simply pass the object to a new function and continue working there.
But I have a young team of employees who always ask me the question, why can't we just change the method?

We can. But here in the forum, this is always dismissed as spaghetti code.
Maybe if some went along with the "Spaghetti Code" attempt, we'd have more help
from the "application developer segment" and visually, a preview that matches WINDOWS 11.

Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6335
Joined: Fri Oct 07, 2005 7:07 pm

Re: FW Preview user style

Postby Antonio Linares » Sun May 08, 2022 1:29 pm

Dear Otto,

> a preview that matches WINDOWS 11

How would it look like ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42117
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: FW Preview user style

Postby Otto » Sun May 08, 2022 5:48 pm

Dear Antonio,
I have not found anything yet.
But I think it will be similar to the browsers.

Best regards,
Otto
Image
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6335
Joined: Fri Oct 07, 2005 7:07 pm

Re: FW Preview user style

Postby Otto » Sun May 08, 2022 6:54 pm

Hello friends,
I think I found an easy way to modify class source and not loosing compatibility.

No matter how complex a class is, you can split the code into separate files
without paying attention to where the function/method starts or ends - just one block

Split the classes

copy the part you want to change into one file and save it 2 times, once as original and once for your modifications

// convention
for modification:
Class filename + _ + name for the block.
You can cut lines without paying attention to where the function starts or ends - simply a block
Original
class filename + _ STD_+ name for the block.

In the remaining class, you insert the file with #include

#include in the file where you saved the block


with this simple definition you can switch between the original CLASS and the modified CLASS


#define MODIFIED_CLASS MODIFIED_CLASS


#ifdef MODIFIED_CLASS
#include "C:\Entwicklung_2012\print\source\rpreview_BuildButtonBar.prg"
#else
#include "C:\Entwicklung_2012\print\source\rpreview_STD_BuildButtonBar.prg"
#endif

Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6335
Joined: Fri Oct 07, 2005 7:07 pm

Re: FW Preview user style

Postby James Bott » Wed May 11, 2022 1:30 am

I highly recommend NOT modifying the FW source.

I recommend creating a new class that inherits from the FW class and create a method (with the same name) in that new class that contains the modification needed. This way when a new FW version comes out you won't have to keep modifying the source, you just inherit from the new source and override that one method.

Of course, if that method in the original source is modified in a new version of FW, then you will have to update your new class's method.

This is a standard OOP programming technique. It saves a lot of confusion and extra programming.
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Re: FW Preview user style

Postby Otto » Wed May 11, 2022 6:13 am

Dear James,

You're right.
But remember when you taught me OOP, what problems I experienced first.

But the standardization and wrapping everything into FIVEWIN often inhibits the ideas of the application developers.

Even if we application-programmers try to create general solutions, it's an overload and then your own program suffers.

Also, regarding mod harbour I have so far the experience that the objects are to be seen somewhat with other eyes.
Here runs then the source code 1 time and then the program exits after it has created HTML/JS for the APACHE server.

I think here, to create an object that 5 lines later is already dead again brings nothing but that it becomes more complex.

I post a law here.
The more complex and sophisticated our source code becomes, the less contribution we get from the application programmers.

Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6335
Joined: Fri Oct 07, 2005 7:07 pm

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 54 guests

cron