Darstellungsproblem [erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
peternmb
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 468
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Darstellungsproblem [erledigt]

Beitrag von peternmb » Sa, 03. Nov 2018 10:11

Hallo,

ich lege auf die Ecke einer Groupbox einen Button um den Inhalt (in diesem Fall eine Bilddatei) mit dem dafür zugeordneten Standardprogramm zu öffnen - das funktioniert soweit wunderbar.
A.PNG
A.PNG (4.88 KiB) 823 mal betrachtet

Nur sobald ich mein Programm in die Taskleiste verkleinere und dann wieder öffne überlagert die Groupbox meinen Button.
B.PNG
B.PNG (2.63 KiB) 823 mal betrachtet

Ich hole den Button bei der nächsten Useraktion mit configure() wieder manuell in den Vordergrund - ist aber nicht der ideale Weg.
Gib es vielleicht eine Möglichkeit, damit das Problem gar nicht erst auftritt?

Ich verwende die 1.90.355 unter Windows-10.
Zuletzt geändert von peternmb am Mo, 05. Nov 2018 11:58, insgesamt 1-mal geändert.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Darstellungsproblem

Beitrag von AUGE_OHR » So, 04. Nov 2018 0:38

hi,
peternmb hat geschrieben:
Sa, 03. Nov 2018 10:11
Gib es vielleicht eine Möglichkeit, damit das Problem gar nicht erst auftritt?
das Problem ist die Reihenfolge des o:Create().

bei einen re-paint, was bei MINIMIZED -> NORMALIZED passiert, werden in der Reihenfolge der o:Create() die XbParts gemalt. wenn also der Button nach der Groupbox erstellt wurde müsste es passen ...
gruss by OHR
Jimmy

peternmb
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 468
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Darstellungsproblem

Beitrag von peternmb » So, 04. Nov 2018 11:03

AUGE_OHR hat geschrieben:
So, 04. Nov 2018 0:38
das Problem ist die Reihenfolge des o:Create().
die Buttons werden nach den Groupboxen erzeugt, bei der Erstellung passt ja auch alles (siehe Bild A).
Man sieht es sogar, dass beim repaint die Reihenfolge nicht korrekt abgearbeitet wird.

Kann ich vielleicht als Workaround den normalized-Event irgendwie in meine Eventloop einbauen und die Buttons mit configure() wieder nach vorn bringen?

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

Re: Darstellungsproblem

Beitrag von georg » So, 04. Nov 2018 13:43

Hallo, Peter -


da sich die Cracks zurückhalten (ist ja Sonntag) ... Ich habe den Eindruck, dass die Xbase-Parts in der umgekehrten Reihenfolge abgearbeitet werden könnten was das Neuzeichnen angeht. Vertausch doch mal die Reihenfolge und erstelle zuerst den Button, dann die Groupbox (zeichne den Button neu) und probiere dann Minimieren/Wiederherstellen aus.
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: 14548
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Darstellungsproblem

Beitrag von Martin Altmann » So, 04. Nov 2018 14:50

Vor allem: was ist der :parent und was der :owner von beiden!

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.

peternmb
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 468
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Darstellungsproblem

Beitrag von peternmb » So, 04. Nov 2018 17:36

georg hat geschrieben:
So, 04. Nov 2018 13:43
...Vertausch doch mal die Reihenfolge und erstelle zuerst den Button, dann die Groupbox (zeichne den Button neu) und probiere dann Minimieren/Wiederherstellen aus.
bringt leider Nichts, es ändert sich Nichts.

Die GroupBox und die Buttons haben als Parent eine TabPage, einen Owner habe ich nicht eingetragen.

Code: Alles auswählen

gBox1 := XbpStatic():new(oTab1,,{10,40},{465,590})
gBox1:type   := XBPSTATIC_TYPE_GROUPBOX
die TabPage hat als Parent oDlg:drawingArea und ebenfalls keinen Owner

Code: Alles auswählen

oTab1 := XbpTabPage():new( oDlg:drawingArea,,{1,3F},{765,667})

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Darstellungsproblem

Beitrag von AUGE_OHR » Mo, 05. Nov 2018 0:09

peternmb hat geschrieben:
So, 04. Nov 2018 11:03
Kann ich vielleicht als Workaround den normalized-Event irgendwie in meine Eventloop einbauen und die Buttons mit configure() wieder nach vorn bringen?
dafür gibt es den o:resize Callback Slot

Code: Alles auswählen

   oDlg:drawingArea:resize := {|aOld,aNew,oSelf| MainResize(aOld,aNew,oSelf) }

PROCEDURE MainResize(aOldSize,aNewSize,oSelf)
   IF aOldSize[1] == 0 .AND. aOldSize[2] == 0               // was minimize
      // hier wäre der Zustand
      aOldSize := aNewSize                                  // New Size
   ELSEIF aNewSize[1] == 0 .OR. aNewSize[2] == 0            // is now minimized
      RETURN
   ELSEIF aNewSize[1] == aOldSize[1] .AND. aNewSize[2] == aOldSize[2]
      RETURN
   ENDIF                                                    // same Size
   // hier geht es dann los
   oSelf:lockUpdate(.T.)
   aChild := oSelf:Childlist()
   iMax   := LEN(aChild )
   FOR i := 1 TO iMax
      DO CASE
         CASE aChild[i]:isDerivedFrom("XbpStatic")
            aChild[i]:setSize( aNewSize )      // geht hier über die gesamte o:DrawingArea
            aSubChild := aChild[i]:Childlist()
            jMax := LEN(aSubChild)
            FOR j := 1 TO jMax
                  // hier die SubItems
            NEXT
      ENDCASE
   NEXT
   oSelf:lockUpdate(.F.)
   oSelf:invalidateRect()
RETURN
wie du siehst würde man üblicherweise nichts weiter machen ausser die Pos/Size zu setzten.

wenn der Button nach der Groupbox angelegt wurde muss er in der Childlist() auch dahinter sei d.h. er wird später bearbeitet -> "übermalt" die Groupbox
gruss by OHR
Jimmy

peternmb
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 468
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Darstellungsproblem

Beitrag von peternmb » Mo, 05. Nov 2018 11:58

AUGE_OHR hat geschrieben:
Mo, 05. Nov 2018 0:09
dafür gibt es den o:resize Callback Slot

Code: Alles auswählen

   oDlg:drawingArea:resize := {|aOld,aNew,oSelf| MainResize(aOld,aNew,oSelf) }
Ja, damit funktioniert es prima, ich habe deine Funktion dafür für meine Zwecke angepasst
Da es sich nur um 4 Buttons handelt bringe ich die nach dem maximize mit configure() wieder nach vorne.

Code: Alles auswählen

oDlg:drawingArea:resize := {|aOld,aNew,oSelf| ButtonShow(aOld,aNew,oSelf) }

PROCEDURE ButtonShow(oDlgOldSize,oDlgNewSize)
   IF oDlgOldSize[1] == 0 .AND. oDlgOldSize[2] == 0   //  oDlg ist wieder maximized
	pbFav1:configure()
	pbFav2:configure()
	pbedB:configure()
	pbedT:configure()
   ENDIF   
RETURN

Antworten