Seite 1 von 2
Parentangabe
Verfasst: Mo, 12. Feb 2018 9:58
von Manfred
Hi,
jetzt habe ich das gleiche Problem unter express++ auch. Aber was muß ich denn da jetzt für einen Parent angeben?
viewtopic.php?f=99&t=10173
Code: Alles auswählen
local oDialog := NIL
local oRahmen := NIL
@ 55, 5 DCGROUP oRahmen;
PARENT oDialog; <---------- was muß da hin? oDialog:drawingarea bringt hier einen Fehler wegen unbekannt.
SIZE DCGUI_PARENTWIDTH-30,DCGUI_PARENTHEIGHT - 70
//------------------------------------------------------------------------------
DCGETOPTIONS;
BORDER XBPDLG_SIZEBORDER;
CLOSEQUERY MSG {|| IF(oSysPara:oMessage:anzeigen(" Abbruch?",.T.,"N"),.T.,.F.)};
HILITEGETS GRA_CLR_CYAN;
NOMAXBUTTON;
NOMINBUTTON;
PIXEL;
SAYOPTIONS XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT;
TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW;
WINDOWWIDTH 400;
WINDOWHEIGHT 200
DCREAD GUI;
OPTIONS GetOptions;
PARENT @oDialog
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 10:01
von Martin Altmann
Du hast doch oDialog auf NIL gesetzt - wie soll das gehen?
Außerdem hast Du oParent auch am Ende nochmals angegeben!
Viele Grüße,
Martin
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 10:10
von Manfred
Hi Martin,
denke bitte daran, das wir hier in express++ sind da läuft das etwas anders. Es kann aber auch sein, das ich das in der ganzen Zeit ein wenig falsch gemacht habe. Ich werde das nochmal prüfen. Aber die Frage steht noch im Raum.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 10:11
von Martin Altmann
Nochmal:
Wenn Du oParent auf NIL setzt, kann oParent:drawingArea an der Stelle danach nicht klappen! Genauso wenig wie oParent.
Dein @oParent am Ende macht da Sinn.
Viele Grüße,
Martin
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 10:26
von Manfred
Martin,
das habe ich verstanden. Aber was muß ich da angeben, damit der Rahmen nicht wieder doppelt erscheint? Wenn ich nur oParent bei DCGROUP angebe, dann klappte das schon, aber seit 2.x wird alles doppelt gemalt. Außerdem ist es bei express so, das erst alles in ein Array geschrieben wird und dann zum Schluß, wenn die Oberfläche erzeugt wurde alles reingeschrieben wird. (so meine ich es verstanden zu haben) Und da sollte dann ein Parent existieren, auf dessen Area geschrieben werden kann. Wenn ich den Parent weglasse, ist die Gruppe auch irgendwo im Nirvana. Wobei der doppelte Rahmen wohl nur bei der Gruppenerzeugung auftritt, wenn ich andere Parts reinschreibe ist das nicht.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 10:31
von Tom
Du musst überhaupt keinen Parent angeben, solange der Parent nicht etwas anderes als der Dialog ist, den Du sowieso gerade erzeugst (DCREAD ... PARENT @oDialog). Wenn Du Bereiche hast, die in einen anderen Parent laufen, etwa Elemente auf einer Groupbox, dann vereinfachen DCSETPARENT TO oGroup vor dem ersten Element und DCSETPARENT TO nach dem letzten den Code etwas.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 10:39
von Manfred
Hi Tom,
ok mit Parent
- mit parent.PNG (42.25 KiB) 10225 mal betrachtet
ohne parent
- ohne Parent.PNG (38.79 KiB) 10225 mal betrachtet
dann muß ich es komischerweise nur anders von nden Startpositionen angeben. Das hatte ich nicht genau erkannt. Der Rahmen liegt nämlich dann ganz woanders.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 12:26
von Manfred
Tom, das ist so nicht korrekt. Wenn ich keinen Parent angebe, passierz sowas:
Code: Alles auswählen
METHOD DialogFahrerZusatz:stornierentagesdienste(aTagesdienste)
LOCAL getlist := {}
LOCAL GetOptions
LOCAL lErfolg := .T.
LOCAL oBrowse := NIL
LOCAL oDialog := NIL
LOCAL oPbAbbruch := NIL
LOCAL oPbSpeichern := NIL
LOCAL oRahmenBrowse := NIL
LOCAL oRahmenPB := NIL
MEMVAR oSysPara
//------------------------------------------------------------------------------
@ 5,5 DCGROUP oRahmenBrowse;
SIZE DCGUI_PARENTWIDTH-10,DCGUI_PARENTHEIGHT - 50
@ DCGUI_ROW,5 DCGROUP oRahmenPB;
SIZE DCGUI_PARENTWIDTH-10, ::nPbHoehe+10
@ 10,5 DCBROWSE oBrowse;
DATA aTagesdienste;
NOSOFTTRACK;
PARENT oRahmenBrowse;
SIZE DCGUI_PARENTWIDTH-10,DCGUI_PARENTHEIGHT-10;
TABSTOP
DCBROWSECOL OBJECTVAR datum;
HEADER "Datum";
PARENT oBrowse;
WIDTH 70
DCBROWSECOL OBJECTVAR dienstbez;
HEADER "Dienst";
PARENT oBrowse;
WIDTH 120
DCBROWSECOL OBJECTVAR nummerneu;
HEADER "neuer Fahrer";
PARENT oBrowse;
WIDTH 80
//------------------------------------------------------------------------------
@ 0,0 DCPUSHBUTTON;
CAPTION "Speichern";
EVAl {|| oPbSpeichern:setPos({10,10})};
OBJECT oPbSpeichern;
PARENT oRahmenPB;
SIZE ::nPbLaenge,::nPbHoehe;
TABSTOP;
TOOLTIP "Ändert die angezeigten Tagesdienste um"
@ 0,0 DCPUSHBUTTON;
CAPTION "Abbruch";
EVAL {|| oPbAbbruch:setPos( {oPbSpeichern:currentpos()[1] + oPbspeichern:currentsize()[1],10} )};
OBJECT oPbAbbruch;
PARENT oRahmenPB;
SIZE ::nPbLaenge,::nPbHoehe;
TABSTOP;
TOOLTIP "Abbruch ohne Speichern"
//------------------------------------------------------------------------------
DCGETOPTIONS;
BORDER XBPDLG_SIZEBORDER;
CLOSEQUERY MSG {|| IF(oSysPara:oMessage:anzeigen(" Abbruch?",.T.,"N"),.T.,.F.)};
HILITEGETS GRA_CLR_CYAN;
NOMAXBUTTON;
NOMINBUTTON;
PIXEL;
SAYOPTIONS XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT;
TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW;
WINDOWWIDTH 500;
WINDOWHEIGHT 700
DCREAD GUI;
OPTIONS GetOptions;
PARENT @oDialog;
TITLE "Tagesdienste eines Fahrers ändern"
RETURN lErfolg
- ohne Parent.PNG (43.97 KiB) 10210 mal betrachtet
Die Rahmen dienen als Parent für den browse, bzw. für die Buttons. Sie werden aber anscheinend nicht berücksichtigt. Schau mal, wo die PB erscheinen. die sollten doch eigentlich direkt im Parent auftauchen und nicht versetzt. das habe ich nicht, wenn ich in der Group den parent angebe. Deshalb habe ich das wohl auch immer so gemacht. Irgendwas ist da noch nicht richtig.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 12:33
von Manfred
ich sehe gerade, die Positionen derr Pushbutton liegen bei 10,10 das fällt aus dem rahmen raus. Aber müßten dann die PB nicht in dem Rahmen verschwinden und nicht darüber hinausgehen? Ich glaube das habe ich noch nicht wirklich verstanden.....
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 12:51
von Tom
Du musst bei Elementen, die auf/in anderen Elementen liegen, natürlich einen Parent angeben. Das ist z.B. Deine Groupbox. Du musst aber nicht den Dialog selbst irgendwo als Parent angeben. Der entsteht zuletzt, ist also überhaupt noch nicht definiert, weshalb Du auch immer Deine Doppelfensterchen bekommen hast. Du hast einen Dialog auf einem Dialog erzeugt. Ohne Parentangaben liegt alles, was Du erzeugst, direkt auf dem Dialog, und manchmal triffst Du dann zufällig Deine Groupbox, meistens aber nicht. Das mit der Größe dürfte dann auch noch ein Problemchen sein. Also: Bei den Buttons die Box als Parent angeben, sonst nicht(s).
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 13:27
von Tom
Dein Code sieht für mich allerdings richtig aus. Seltsam. Ich arbeite allerdings nie mit den relativen Postionen (PARENTWIDTH/HEIGHT), ansonsten kann ich da eigentlich keine Fehler sehen. Du erzeugst die Boxen, das Browse und die Pushbuttons. Beim Browse und den Buttons sind die Boxen als Parent(s) angegeben. Alles richtig.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 13:31
von Manfred
sage ich ja, aber ab der 2.0er gibt es die Probleme. Ich hoffe ich mache da nicht was anderes falsch, was ich jetzt übersehe. Mal sehen, was die Zukunft bringt. Bisher war es ja immer irgendwas saublödes, was übersehen wurde.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 13:34
von Tom
Und, ja, die Buttons dürften eigentlich nur teilweise zu sehen sein.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 13:41
von Tom
Mmh. Mit der 2.0 kompiliert:
Code: Alles auswählen
FUNCTION MAIN()
LOCAL GetList := {}, oGroup
@ 0, 0 DCGROUP oGroup CAPTION 'Test' SIZE 35,2.5
@ 1, 1 DCPUSHBUTTON CAPTION 'Ein Test' SIZE 20,1 PARENT oGroup
@ 1,21 DCPUSHBUTTON CAPTION 'Zwei Tests' SIZE 20,1 PARENT oGroup
DCREAD GUI FIT ADDBUTTONS
RETURN NIL
Ergebnis:
- buttons.jpg (9.31 KiB) 10191 mal betrachtet
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 13:44
von Manfred
ich sehe das richtig, das der rechte Button über den Rahmen hinausgeht? So wie es nicht sein sollte?
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 13:57
von Tom
Ja, über den gezeichneten Rand schon, aber nicht über den Rand des Parts, der ja ein bisschen weiter weg liegt. Das ist so richtig und war auch in der 1.9 exakt so.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 14:02
von Manfred
ok, aber bei meinem Beispiel stehen die Buttons weit oben drüber und das sollte ja eigentlich passieren!?
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 14:11
von Tom
Es sollte wie beim Browse aussehen. Das wird ja auch abgeschnitten.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 14:19
von Jan
Manfred,
das passiert automatisch, wenn der Xbpart größer ist als der Parent, und keine Scrollbar eingebaut ist. Daß der Button bei der Groupbox über den Rahmen raus geht liegt daran, das die Linie ja nicht die grenze des Static ist, sondern der Static selber noch ein paar Pixel breiter ist. kann man sehr schön an der oberen Linie sehen, wo ja noch Platz für den oberen Teil der Caption ist.
Jan
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 15:52
von Tom
Oder wenn man das Element einfärbt.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 15:54
von Jan
Oder so.
Jan
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 20:36
von Manfred
also jetzt verliere ich den Glauben ganz. Wenn ich in eine Zelle des Browse klicke zum Editieren, dann verschwinden die Button unten.
Re: Parentangabe
Verfasst: Mo, 12. Feb 2018 22:09
von Tom
Daddelst Du irgendwie zwischendrin mit der DrawingArea herum? Kannst Du etwas kompilierbaren Code extrahieren, der das Verhalten zeigt?
Re: Parentangabe
Verfasst: Di, 13. Feb 2018 7:30
von Wolfgang Ciriack
also jetzt verliere ich den Glauben ganz. Wenn ich in eine Zelle des Browse klicke zum Editieren, dann verschwinden die Button unten.
Dann hast du den falschen Parent
Re: Parentangabe
Verfasst: Di, 13. Feb 2018 8:29
von Manfred
@Tom,
also zumindest nicht bewußt.
@Wolfgang,
das klingt nachvollziehbar, aber wer hat ihn dann gewechselt? Ich sicherlich nicht. Der Code ist ja recht knapp, siehe weiter oben