Darstellungsproblem [erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Darstellungsproblem [erledigt]

Beitrag von peternmb »

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) 5960 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) 5960 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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Darstellungsproblem

Beitrag von AUGE_OHR »

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
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Darstellungsproblem

Beitrag von peternmb »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Darstellungsproblem

Beitrag von georg »

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
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Darstellungsproblem

Beitrag von Martin Altmann »

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Darstellungsproblem

Beitrag von peternmb »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Darstellungsproblem

Beitrag von AUGE_OHR »

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
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Darstellungsproblem

Beitrag von peternmb »

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