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
mit parent.PNG (42.25 KiB) 10225 mal betrachtet
ohne parent
ohne Parent.PNG
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
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..... :banghead:

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
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. :wink:

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 :D

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