fbpx
Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen

TOPIC: VO Tools für X#

VO Tools für X# 10 Jan 2020 09:49 #12535

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 121
  • In meinen komplexeren Vo Apps verwende ich einige Tools/Dlls. Kann mir jemand einen Überblick geben, wie es damit nun in X# aussieht:
    - bBrowser 1.4 wegen einem CompoundField in einem Browser
    - FabPaint und FabSplitShell
    - RP2.17
    - Hoover Buttons

    Und eine Frage zur Installation einer App mittels InnoSetup:
    Kann man mit InnoSetup irgendwie erkennen, ob die benötigte .NET Version installiert ist und falls nicht, diese installieren?

    LG Franz

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 09:56 #12537

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Franz,
    - der bBrowser ist als Update verfügbar: www.bbrowser.net/
    - die Fab-Tools sollten sich migrieren lassen, wenn Fabrice nicht schon was gemacht hat, schau auf seiner Seite nach und sonst frag einfach nach
    - ReportPro ist migriert, und ist beim Entwicklungsteam erhältlich. Selber migrieren würde ich ausschließen
    - die Hoover Buttons kenne ich nicht, sollten sich aber migrieren lassen. Sind die frei verfügbar?

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 11:32 #12541

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 550
  • Hallo Franz, Wolfgang

    Auf Frans Wauters web site https://vo.wautersit.com/pubcavo gibt´s neben vielen anderen "alten" Sachen ein hoverbutton.zip.

    Der Stand der Hover Buttons ist allerdings 2002 und das Problem ist, dass die Buttons offensichtlich immer im Win2k look gezeichnet werden. Ist die App themed erscheinen die Buttons also weiterhin im Win2K look. Franz: Gibt es da etwas aktuelleres, wo themes evtl. berücksichtigt sind ? Habe das aef versucht zu kompilieren, aber eine Menge warnings erhalten. Kannst Du Dein "bereinigtes" Hoverbutton.aef mal hochladen ?

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 14:01 #12543

  • Fabrice's Avatar

  • Fabrice


  • Posts: 70
  • Hi Franz,

    FabSplitShell has been migrated, FabPaint is almost done, and more are underway ( FabOutlookBar, ....)
    Currently, I'm porting theses libraries in a "private" FabTools repository, and will turn it to public asap....But if you need it now, I can make it public now, and just indicate in the ReadMe what library has been fully done.

    Just tell me....
    Regards
    Fab

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 14:21 #12545

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 121
  • Hallo Wolfgang, hallo Karl-Heinz,
    die HooverButtons sind frei verfügbar, meine Version in VO ist allerdings auch vom Dez. 2002, müßte also das gleiche sein. Eine andere Version ist mir nicht bekannt.

    Beim bBrowser verwende ich die Version 1.4, da ich ihn nur an einer einzigen Stelle für ein Compound Field benötige. Die kostenpflichtige Version für X# werde ich wohl nur einsetzen, wenn VO nicht mehr auf Win10 läuft und ich dem Kunden dies verrechnen kann.

    LG Franz

    Please Log in or Create an account to join the conversation.

    Last edit: by lagraf.

    VO Tools für X# 10 Jan 2020 14:30 #12546

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 121
  • Hi Fabrice,
    I only use FabSplitShell and FabPaint and I don't need it urgently, but can you please inform me, when both are available for X#?
    I slowly transport my VO apps to X# to be prepared if VO does not run any more on Win10. Till this day all my customers work with VO apps.
    Regards, Franz

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 14:56 #12547

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Franz,
    verwendest Du die unveränderte Version oder hast Du sie angepasst?
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 15:37 #12551

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Franz,

    ich habe mir die Hoverbutton-Klasse angeschaut und nach Fixen aller Warnings/Fehler eine Migration probiert.
    Der Autor habe dummerweise zwei Klassen erweitert - und das ist unter .NET nicht mehr zulässig.
    Verwendest Du diese Hoverbuttons nur auf Dialog-Fenstern oder auch auf DataWindows?
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 16:14 #12553

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 550
  • Hallo Wolfgang,

    Das meiste im "CLASS HoverWindow (Window)" braucht man nicht mehr, da VO zwischenzeitlich von selbst die ownerdraw Nachrichten an die controls sendet.

    - METHOD Dispatch( oEvent ) CLASS __FormDialogWIndow
    - METHOD OwnerDraw() CLASS Event
    - und die Dispatcher der "HoverDialogWindow" und "HoverDiataDialogWindow" Klassen.


    Zudem braucht es diese Methode nicht mehr:
    METHOD OnDrawItem( lpDis ) CLASS HoverButton	
    	//This methos is called in event object on WM_DRAWITEM message
    	//I dont know why but when this method is strong typed, sometimes it is not seen at run-time
    	RETURN SELF:__Draw(lpDis)

    dafür diese Methode. Existiert eine ODDrawItem Methode schickt VO die Nachrichten dort hin.
    METHOD ODDrawItem ( oEvent ) CLASS HoverButton // VO ownerdraw Callback method 
    LOCAL lpDis AS _winDRAWITEMSTRUCT
    
    
    	lpDis := PTR( _CAST , oEvent:lParam )  
    
    	self:__Draw ( lpDis) 
    
    	RETURN SELF
    

    Kannst Du die

    FUNCTION ColorToGrayScale(lpBI AS _WINBITMAPINFO, lpvBits AS BYTE PTR, lpBIGray AS _WINBITMAPINFO, lpGray AS BYTE PTR) AS VOID PASCAL

    kompilieren ?

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    Last edit: by Karl-Heinz.

    VO Tools für X# 10 Jan 2020 16:21 #12554

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Karl-Heinz,
    die Funktion ColorToGrayScale() habe ich nicht kompilieren können, weil sich unter X# der Cast der Struktur nicht machen lässt.
    Momentan habe ich diesen Teil auskommentiert, weil ich erst mal schauen wollte, ob das Ganze prinzipiell funktioniert - und das tut es.
    Das mit der OODrawItem()-Methode wusste ich nicht - habe bisher um OwnerDraw außer in ListViews (solltest Du irgendwoher kennen....) einen großen Bogen gemacht.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 16:31 #12555

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Karl-Heinz,
    diesen Code
    rMask	:= dword(_cast, lpBI.bmiColors[1])
    gMask	:= dword(_cast, lpBI.bmiColors[2])
    bMask	:= dword(_cast, lpBI.bmiColors[3])
    würde ich ganz einfach so schreiben:
    rMask	:= lpBI.bmiColors.rgbBlue
    gMask	:= lpBI.bmiColors.rgbGreen
    bMask	:= lpBI.bmiColors.rgbRed
    Red und Blue scheinen mir aber vertauscht zu sein.

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 16:41 #12557

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Franz,

    mit den Hinweisen von Karl-Heinz läuft das jetzt, siehe Anlage.

    Wolfgang

    File Attachment:

    File Name: HoverButton.zip
    File Size:18 KB
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it
    Attachments:

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 16:46 #12560

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 550
  • Hallo Wolfgang,

    Franz kann das mit der ColorToGrayScale() ja mal teste. Ansonsten funktioniert das Zeichnen per ODDrawItem() einwandfrei. Aber wie schon erwähnt: Ist die App themed werden die Buttons halt nur im W2k look gezeichnet ... Wäre die App themed könnte man das ganze dann per Customdraw und dem CallBack

    METHOD CustomDraw ( lParam ) CLASS HoverButton // VO Callback NM_CUSTOMDRAW Messages

    machen - wenn sich denn einer das antun will :-)

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 10 Jan 2020 17:00 #12561

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Karl-Heinz,

    ich denke, spätestens mit den neuen WinForms-basierten GUI-Klassen wird das eh alles hinfällig.

    Ich habe mich von ownerdraw weitgehend ferngehalten - da waren die unzähligen aus der Zeit gefallenen Delphi-Applikationen mit ihren Buttons eine Lehre....

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 11 Jan 2020 18:22 #12571

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 550
  • Hallo Wolfgang,

    1, Ich habe mir Deinen HoverButtonLib code angesehen und bemerkt, dass die OnDrawItem() weiterhin existiert. Diese Methode wird nicht mehr benötigt wenn der Code der ODDrawItem() von:
    method ODDrawItem( oEvent as Event ) as int
    	local lpDis		as _WINDRAWITEMSTRUCT
    	local oControl	as object
    
    	~"ONLYEARLY+"
    	if oEvent:uMsg == WM_DRAWITEM
    		lpDis	:=	ptr(_cast,oEvent:lParam)
    		if lpDis.CtlType == ODT_BUTTON
    			oControl	:=	GetObjectByHandle(lpDis.hwndItem)
    			if oControl <> NULL_OBJECT  .and. IsInstanceOf(oControl, #HOVERBUTTON)// .and. IsMethod(oControl,#OnDrawItem)
    				Send(oControl, #OnDrawItem, lpDis)
    			endif
    		endif
    	endif
    	~"ONLYEARLY-"
    	return 0L

    in:
    METHOD ODDrawItem( oEvent AS Event ) AS VOID
    	LOCAL lpDis		AS _WINDRAWITEMSTRUCT 
    
    	lpDis := PTR(_CAST,oEvent:lParam)
    	
    	SELF:__Draw(lpDis)
    
    	RETURN

    geändert wird. Es ist nicht notwendig, dass in der ODDrawItem() das control geprüft, und erst über den Umweg OnDrawItem() dann SELF:__Draw(lpDis) aufgerufen wird. Da zudem ein ODDrawitem() Rückgabewert ignoriert wird macht ein INT als Rückgabe wenig Sinn. Dies ist der VO code ( dispatch.prg ) der ODDrawItem() aufruft:
    FUNCTION __Dispatch_DrawItem(oEvent AS @@event, oWindow AS OBJECT) AS LONGINT PASCAL
        LOCAL struDrawItem AS _winDRAWITEMSTRUCT
        LOCAL oControl AS OBJECT
        
        struDrawItem := PTR(_CAST, oEvent:lParam)
        
        oControl := GetObjectByHandle(struDrawItem.hwnditem)
        IF oControl != NULL_OBJECT .AND. IsMethod(oControl, #ODDrawItem)
            Send(oControl, #ODDrawItem, oEvent)
            oWindow:EventReturnValue := 1L
            RETURN 1L
        ENDIF
        IF IsInstanceOf(oWindow, #Window)
            oWindow:Default(oEvent)
        ENDIF
        RETURN 0L

    2. Um die psz warnings los zu werden habe ich zudem alle PSZ() in String2Psz() geändert

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 13 Jan 2020 07:06 #12581

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 121
  • Hallo Wolfgang und Karl-Heinz,
    danke für die Umstellung der HooverButton Lib! Ich werde demnächst zum ersten Programm kommen, wo ich die Buttons einsetze, dann probiere ich alles aus.

    PS: Ich verwende die unveränderte Version und die Buttons auch auf DataWindows!

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 13 Jan 2020 07:10 #12582

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 121
  • Noch ein paar Fragen zum ReportPro:
    • Wie hoch sind die Kosten dafür?
    • Welche Version wird für X# eingesetzt und wie wird die angefordert?
    • Für VO verwende ich 2.17, ersetzt die X# Version diese und geht auch für VO oder muß ich beide installiert lassen

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 13 Jan 2020 07:13 #12583

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Franz,
    ich weiß nicht, wie Du den HoverButton einsetzt - aber wie der Karl-Heniz geschrieben hatte, verwendet der noch den alten Look mit Windows 2000 Charme, und nicht den moderneren Look seit XP bzw. neuer.
    Vergleiche das mal:

    Gerade beim Drüberfahren ändert sich der Look und die ganze Applikation schaut wesentlich moderner aus.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it
    Attachments:

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 13 Jan 2020 07:18 #12584

  • Karl-Heinz's Avatar

  • Karl-Heinz


  • Posts: 550
  • Jungs,

    Mir ist noch aufgefallen, dass in der X# version nie ein Focus rectangle gezeichnet wird. Daher müsste im Constructor dieser seltsame cast ersetzt werden.
    //SELF:lShowFocus		:= LOGIC(_CAST,_and(GetWindowLong(SELF:hWnd,GWL_STYLE), WS_TABSTOP))  // aktuelle stand 
    
    SELF:lShowFocus		:= _and( GetWindowLong(SELF:hWnd,GWL_STYLE) , WS_TABSTOP ) == WS_TABSTOP  

    Allerdings wäre es sinnvoller SELF:lShowFocus immer auf TRUE zu setzen. Warum der Autor das Zeichnen eines focus rectangle vom Style WS_TABSTOP abhängig macht ist nicht nachvollziehbar. Anhand dem Inhalt der Struktur weiss man immer wann ein focus rectangle gezeichnet werden muss und wann nicht. Wenn bei einem Button tatsächlich kein focus rectangle erwünscht ist, könnte man dies immer noch mit dem assign ShowFocus steuern.

    In der __Draw() Methode sähe die Änderung so aus:
    	lDrawFocusRectangle :=  _AND ( lpDis.itemState , ODS_FOCUS ) == ODS_FOCUS  .AND.  _AND ( lpDis.itemState , ODS_NOFOCUSRECT ) != ODS_NOFOCUSRECT  
    
    
    //	IF SELF:lShowFocus  .and. GetFocus() == SELF:hWnd  // aktuelle stand
    
    	
    		// stattdessen
    		
    	IF lDrawFocusRectangle 
    
    		// oder 
    
    //	IF lDrawFocusRectangle .and. SELF:lShowFocus 
    	
    		SetTextColor(lpDis.hDC, 0x00000000)
    		SetBkColor(lpDis.hDC, 0x00FFFFFF)		
    		InflateRect(@lpDis.rcItem,-3,-3)
    		DrawFocusRect(lpDis.hDC,@lpDis.rcItem)
    			
    	ENDIF
    			
    //	ENDIF 
    

    Gruß
    Karl-Heinz

    Please Log in or Create an account to join the conversation.

    VO Tools für X# 13 Jan 2020 07:27 #12585

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2232
  • Hallo Franz,

    was ReportPro betrifft: ich bin mir nicht sicher, ob es da eine FoX-Subscription braucht oder ob Du die auch so durch Zuschicken eines Kaufnachweises an bekommst.
    Auf jeden Fall bleibt ReportPro für VO parallel bestehen - denn Du kannst schwer eine X#-Version bei VO einbinden und umgekehrt.
    Meines Wissens nach gibt es auch eine neuere Version von ReportPro für VO, aber die bekommst Du nur mit einer FoX-Subscription.
    Schließlich muss die Arbeit ja auch irgendwie bezahlt werden - auch das Entwicklungsteam muss schließlich von was leben.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Moderators: wriedmann