RedimDataWindow
Posted: Wed Feb 05, 2020 9:29 am
Ich verwende in meinen Kassenprogrammen die Klasse RedimDataWindow, welche alle Controls an die Bildschirmgröße anpasst. Mein Kassenfenster leite ich von RedimDataWindow ab. In einer For ... Next Schleife werden die Controls abgearbeitet, ControlFont, Origin und Size zugeordnet. Wenn ich das Programm ein paar Mal hintereinander starte, funktioniert es manchmal und dann wieder nicht!!! Die Zuordnung des ControlFonts ist dann das Problem, im Error Objekt steht dann "Konvertierungsfehler von USUAL (FLOAT) oin PTR".
Mal vom Begriff "oin" in der Fehlermeldung abgesehen:
-> Wie kann das Programm mit dem gleichen Fenster 1x funktionieren und dann wieder nicht?
-> Was ist an der Zuordnung des ControlsFonts eines Controls falsch?
Code: Select all
CLASS RedimDataWindow INHERIT DataWindow
METHOD ResizeWindow( oDimension ) // Methode gekürzt!
LOCAL nWidth AS INT
LOCAL nHeight AS INT
LOCAL nLen AS DWORD
LOCAL nI, nJ AS DWORD
LOCAL nPos AS DWORD
LOCAL nHorFaktor AS FLOAT
LOCAL nVerFaktor AS FLOAT
LOCAL aC AS ARRAY
LOCAL symName AS SYMBOL
LOCAL oSize AS Dimension
LOCAL oOrigin AS Point
LOCAL uError AS USUAL
BEGIN SEQUENCE
IF ! IsInstanceOf( oDimension, #Dimension )
oDimension := SELF:Size
ENDIF
nWidth := oDimension:Width
nHeight := oDimension:Height
nHorFaktor := Round( FLOAT( nWidth ) / FLOAT( _nSizeWidth ), 2 )
nVerFaktor := Round( FLOAT( nHeight ) / FLOAT( _nSizeHeight ), 2 )
IF _oFont != NULL_OBJECT
_oFont:Destroy()
_oFont := NULL_OBJECT
ENDIF
_oFont := Font{ , Integer( FLOAT( _nFontSize ) * nVerFaktor ), _cFontName }
IF _lFontBold
_oFont:Bold := TRUE
ENDIF
aC := SELF:GetControls( #Control )
nLen := ALen( aC )
FOR nI := 1 UPTO nLen
symName := aC[nI]:NameSym
nPos := AScan( _aControls, {|a| a[1] == symName } )
IF nPos > 0
oSize := Dimension{ Integer( FLOAT( _aControls[nPos,3]:Width ) * nHorFaktor ), ;
Integer( FLOAT( _aControls[nPos,3]:Height ) * nVerFaktor )}
oOrigin := Point{ Integer( FLOAT( _aControls[nPos,2]:X ) * nHorFaktor ), ;
Integer( FLOAT( _aControls[nPos,2]:Y ) * nVerFaktor ) }
// Wenn die Zuordnung von ControlFont auskommentiert wird funktionierts immer!
// Mit der Zuordnung funktionierts manchmal und dann wieder nicht!
aC[nI]:ControlFont := _oFont
aC[nI]:Origin := oOrigin
aC[nI]:Size := oSize
ENDIF
NEXT
RECOVER USING uError
IF IsInstanceOf(uError, #Error)
ErrorBox{, uError:Description}:Show()
ENDIF
END SEQUENCE
RETURN NIL
-> Wie kann das Programm mit dem gleichen Fenster 1x funktionieren und dann wieder nicht?
-> Was ist an der Zuordnung des ControlsFonts eines Controls falsch?