Das nächste Entwicklertreffen findet Anfang Mai in Münster statt - weitere Infos bzw. zur Anmeldung!

seltsames Verhalten einer abgeleiteten XbpMLE Klasse

Hier können die Unterschiede, Fehler und Probleme zwischen den Versionen bzw. bei der Migration besprochen werden

Moderator: Moderatoren

Antworten
georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

seltsames Verhalten einer abgeleiteten XbpMLE Klasse

Beitrag von georg » So, 13. Aug 2017 18:24

So, das wird jetzt etwas komplizierter ...

Ich arbeite nicht direkt mit den Xbase-Parts, sondern habe von jeder Klasse eine eigene, abgeleitete Klasse, die ich über eine #TRANSLATE Anweisung einbinde:

Code: Alles auswählen

#TRANSLATE XbpMLE()            => MyXbpMLE()
d.h. in meinem Code verwende ich XbpMLE(), und die eingebundene .ch-Datei sorgt dafür, dass anstelle eines XbpMLE ein MyXbpMLE verwendet wird.

Die abgeleitete Klasse sieht so aus:

Code: Alles auswählen

CLASS MyXbpMLE FROM XbpMLE
   EXPORTED:
   VAR DataLinkName
   VAR ChainSeq
   VAR PartParent
   VAR ShortCutKey
   VAR ShortCutKeyHandler
   VAR ValidateEntry
   METHOD create
   METHOD handleEvent
ENDCLASS

METHOD MyXbpMLE:create(oParentExt, oOwner, aPos, aSize, aPresParam, lVisible)
   Local cClassName
   Local oParent

   IF oParentExt == NIL
      oParent := self:setParent()
   ELSE
      oParent := oParentExt
   ENDIF
   WHILE .T.
      cClassName := oParent:className()
      IF cClassName == "MyXbpDialog"
         self:PartParent := oParent
         EXIT
      ENDIF
      oParent := oParent:setParent()
   END
   IF self:ShortCutKey = NIL
      self:ShortCutKey := 0
   ENDIF

   self:XbpMLE:create(oParentExt, oOwner, aPos, aSize, aPresParam, lVisible)
RETURN (Self)

METHOD MyXbpMLE:handleEvent(nEvent, mp1, mp2)
   DO CASE
   CASE nEvent = xbeP_SetInputFocus
      IF self:PartParent <> NIL
         self:PartParent:LastElementWithFocus := self
      ENDIF
   	self:XbpMLE:handleEvent(nEvent, mp1, mp2)
   CASE nEvent = xbeP_KillInputFocus
   	self:XbpMLE:handleEvent(nEvent, mp1, mp2)
   OTHERWISE
   	self:XbpMLE:handleEvent(nEvent, mp1, mp2)
   ENDCASE
RETURN (Self)
Hauptgrund für die Ableitungen sind Felder, die ich in den Xbase-Parts brauche, z.B. um ein Xbase-Part einem Feld in einer Tabelle zuordnen zu können. Der andere Grund liegt darin, dass ich beim Wechsel zu einem anderen Programm bei der Rückkehr zu meinem Programm das Xbase-Part aktivieren will, das vor dem Fokus-Wechsel aktiv war.

Diese Systematik funktioniert unter 1.90 355 ohne Probleme, unter der 2.0 817 bekomme ich sehr seltsame Verhaltensweisen.

Aus einem Browse rufe ich einen XbpDialog auf, auf den ich mehrere Xbase-Parts lege:
vorMaus.png
vorMaus.png (2.53 KiB) 1306 mal betrachtet
Bewege ich jetzt die Maus über die XbpMLE (bzw. MyXbpMLE), werden sie ausgegraut, d.h. Vordergrundfarbe = Hintergrundfarbe:
nachMaus.png
nachMaus.png (2.66 KiB) 1306 mal betrachtet
Dieses Verhalten betrifft NUR XbpMLE, keine XbpSLE. Steht in dem XbpMLE ein Text, ist dieser nicht sichtbar, solange Vordergrundfarbe = Hintergrundfarbe.

Ich habe also im Debugger einmal überwacht, welche Events durch die Methode handleEvent laufen. Dabei gebe ich in Klammern an, ob das XbpMLE vor bzw. nach dem Event korrekt angezeigt wird.

1. Bewegen der Maus in das XbpMLE:
xbeM_Motion (OK / OK)
xbeM_Enter (OK / OK)
xbeM_Motion (OK / falsch)

2. Klick mit der linken Maustaste in das XbpMLE:
xbeM_LbDown (falsch / OK)
xbeM_Motion (OK / OK)
xbeM_LbUp (OK / OK)
xbeM_LbClick (OK / OK)
xbeP_SetInputFocus (OK / OK)
xbeP_KillInputFocus (OK / OK)
xbeP_Paint (OK / OK)

3. Herausbewegen der Maus aus dem XbpMLE
xbeM_Motion (falsch / falsch)
xbeM_Motion (falsch / falsch)
xbeM_Leave (falsch)
xbeM_Leave (falsch)

Ich habe auch einen Versuch gemacht, mit "echten" XbpMLE zu arbeiten (indem ich die #TRANSLATE-Anweisung auf Kommentar gesetzt habe und alles noch ein compiliert habe). Es wird das gleiche Verhalten gezeigt.

Dann habe ich versucht, das Verhalten mit einem kleinen Musterprogramm nachzubilden, aber dort verhalten sich die XbpMLE korrekt. Jetzt gehen mir langsam die Ideen aus, was ich machen/versuchen kann.

Hat einer von Euch eine Idee?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 14597
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: selbst Verhalten einer abgeleiteten XbpMLE Klasse

Beitrag von Martin Altmann » So, 13. Aug 2017 18:30

Was ist der Parent deines problematischen Mles?

Viele Grüße,
Martin.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: selbst Verhalten einer abgeleiteten XbpMLE Klasse

Beitrag von georg » So, 13. Aug 2017 19:38

Hallo, Martin -


das Programm ist in Threads organisiert. Jeder Thread hat einen XbpDialog als Parent. Auf der :drawingArea des XbpDialog platziere ich XbpStatic, die als Parent für die Xbase-Parts dienen. Jedes XbpMLE hat ein "eigenes" XbpStatic als Parent.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 14597
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: seltsames Verhalten einer abgeleiteten XbpMLE Klasse

Beitrag von Martin Altmann » So, 13. Aug 2017 20:01

Ok,
das ist es also nicht.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: seltsames Verhalten einer abgeleiteten XbpMLE Klasse

Beitrag von georg » So, 20. Aug 2017 16:32

So, da ich inzwischen mal wieder etwas Zeit hatte, habe ich mir die Sache noch einmal angesehen.

Es ist definitiv so, dass als "Reaktion" auf das xbeM_Motion das XbpMLE "unleserlich" wird. Also habe ich jetzt mal dieses Event ausgefiltert, und damit funktioniert das Programm an der Stelle wie erwartet.

Da das Problem scheinbar bei keinem anderen aufgetreten ist, denke ich, dass es wenig Sinn macht, hier einen PDR aufzumachen, da eine Schmalspurversion kein Fehlverhalten zeigt.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Antworten