Fehlermeldung mit EVM

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Fehlermeldung mit EVM

Beitrag von Jan »

Ich benutze die Image-Button-Klasse von Alaska. Da gibt es diese Zeile:

Code: Alles auswählen

   GraCaptionStr( oPS, {::TextRect[1],::TextRect[2]}, ;
                       {::TextRect[3],::TextRect[4]}, ::Caption, ;
                  ::TextAlign )
Und genau die produziert sporadisch eine Fehlermeldung
oError:args :
-> VALTYPE: U VALUE:NIL
-> VALTYPE: N VALUE:1
oError:canDefault : .F.
oError:canRetry : .F.
oError:canSubstitute: .T.
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : <U of >[<1>]
oError:osCode : 0
oError:severity : 2
oError:subCode : 3
oError:subSystem : BASE
oError:thread : 2
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
(EVM Ereignis-Dispatcher)Aufgerufen von XBPIMAGEBUTTON:DRAWTEXT(389)
Was will mir "(EVM Ereignis-Dispatcher)" sagen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Fehlermeldung mit EVM

Beitrag von AUGE_OHR »

Jan hat geschrieben:Was will mir "(EVM Ereignis-Dispatcher)" sagen?
Fehlermeldung EVM Ereignis-Dispatcher kenne ich vor allem mit ActiveX, meistens im Zusammenhang mit Threads
Errorsys : EVM Ereignis-Dispatcher
preview.xbase++.servicelevel1
5. Januar 2009

Calling XBase++ DLL from C# application, possible ?
public.xbase++.generic
25. April 2009
es läuft dabei auf ein Timeing Problem zwischen Windows und Xbase++ Queue hinaus
da du Ownerdraw verwendest wird das (Timeing) Problem noch grösser ... es läuft unter Xbase++ ja nur auf 1 x CPU
Re: Multicore cpu and smp
public.xbase++.generic
18. Dezember 2008
Steffen F. Pirsig
...
- With the EVM we have no experiments made as of yet, but with
owner-drawing an average Xbase++ application may gain performance
we need to investigate into that before 2.0
wenn der Fehler beim Aufbau einer "neuen" Maske, mit mehrer XbpImageButtons, passiert dann solltest du jedem Ownerdraw Part beim Aufbau "mehr Zeit" geben.

Code: Alles auswählen

   FOR i := 1 TO 12
     oPb := Xbp...():new( ...)
     oPB:Caption := ...
     oPB:Create()
     SLEEP(1)
   NEXT
obwohl die angegebene Zeile mit GraCaptionStr() auf die Method o:DRAWTEXT verweist scheint mir das Problem
schon vorher zu liegen wobei ich auf ::TextRect tippe was wohl NIL ist -> ComputeLayout() entspricht dabei der Windows Method Measureitem.

Code: Alles auswählen

   aRect      := aInfo[XBP_DRAWINFO_RECT]
danach folgt Code zur Berechnung für ::CaptionLayout. der Code der dort steht "kostet" Zeit und ist im Prinzip "unsinnig" ...


ein Windows WC_BUTTON kann, wenn die entsprechenden Styles gesetzt werden, OHNE Ownerdraw Bitmap/Icon und Text zusammen auf dem Button haben.
den Text kann man mit Konstanten ausrichten und auch zur Laufzeit ändern ( wenn man will )
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx


aber zurück zum Problem ...
ich würde ::TextRect abfangen/prüfen und der Method ComputeLayout() einen Rückgabewert .T./.F. verpassen

Code: Alles auswählen

METHOD XbpImageButton:ComputeLayout( oPS, aInfo )
...
RETURN lRet

METHOD XbpImageButton:Draw( oPS, aInfo )
   // Align image and caption
   IF ::ComputeLayout( oPS, aInfo )
      // Draw button elements
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fehlermeldung mit EVM

Beitrag von Jan »

Hallo Jimmy,

Danke für die ausführliche Antwort. Ich hab das mal mit Sleep() versucht. Das ist etwas schwierig zu testen, weil der Fehler bei mir nur seht sporadisch auftritt, ich kann das auf meinem Rechner kaum erzwingen. Aber es scheint, als ob ich erst mit einem Sleep(100) das Problem beheben kann. Was natürlich schon recht lang ist.

Interessant ist in dem Zusammenhang, das der Fehler ausschließlich dann auftritt, wenn ich enie Grafik auf den Button lege. Ich verwende die Klasse aus anderen Gründen schon länger. Aber erst jetzt mit Grafiken drauf. Und nur bei diesen Buttons tritt der Fehler auf.

Ich werd mal heute mal parallel den Support von Alaska kontakten. Das ist immerhin deren Klasse, und deren unergründliche Fehlermeldung. Mal schauen, was die dazu sagen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten