Darstellungsproblem [erledigt]
Moderator: Moderatoren
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Darstellungsproblem [erledigt]
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.
Nur sobald ich mein Programm in die Taskleiste verkleinere und dann wieder öffne überlagert die Groupbox meinen Button.
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.
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.
Nur sobald ich mein Programm in die Taskleiste verkleinere und dann wieder öffne überlagert die Groupbox meinen Button.
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.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Darstellungsproblem
hi,
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 ...
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
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Darstellungsproblem
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?
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Darstellungsproblem
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.
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.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Darstellungsproblem
Vor allem: was ist der :parent und was der :owner von beiden!
Viele Grüße,
Martin
Viele Grüße,
Martin
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.
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Darstellungsproblem
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
Code: Alles auswählen
oTab1 := XbpTabPage():new( oDlg:drawingArea,,{1,3F},{765,667})
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Darstellungsproblem
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
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
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Darstellungsproblem
Ja, damit funktioniert es prima, ich habe deine Funktion dafür für meine Zwecke angepasstAUGE_OHR hat geschrieben: ↑Mo, 05. Nov 2018 0:09 dafür gibt es den o:resize Callback SlotCode: Alles auswählen
oDlg:drawingArea:resize := {|aOld,aNew,oSelf| MainResize(aOld,aNew,oSelf) }
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