Anzahl Tabs in XbpTabPage

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
klammerauf
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Do, 08. Feb 2007 14:16
Wohnort: Karlsruhe
Hat sich bedankt: 3 Mal

Anzahl Tabs in XbpTabPage

Beitrag von klammerauf »

Wie kann ich denn feststellen, wie viele Tabs in einer TabPage enthalten sind?
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Jan »

Moin Sebastian,

Du könntest die Children des Dialoges zählen, die ein XbpTabPage sind. Um das sauber hinzubekommen müsstest Du eventuell den :cargo der Tabpages mit einem Wert belegen, den Du beim Auslesen der :childList() abfragen kannst.

Ich mach das sonst in der ChildList gerne über :isDerivedFrom() um z. B. alle Statics o. ä. festzustellen, aber das könnte bei den Tabpages schwierig werden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Jan, in der Childlist eines Objekts (z.B. eines Fensters, eines Statics oder irgendeines anderen Containers, der XbpTabPages enthält) sind direkt immer nur die Tabpages, die sich auf ihm befinden. Sollten sich auf einer dieser Tabpage weitere befinden, sind die in der Childlist dieses Objekts. Ich verstehe Deine Anmerkung mit dem cargo nicht ganz.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Jan »

Hallo Tom,

jetzt verstehe ich Deine Anmerkung nicht so ganz. Ja klar kann z. B. ein Dialog mehrere Tabpages beinhalten, und manche dieser Tabpages haben ebenfalls eigene Tabpages. Sowas mache ich ja auch. Ich hatte jetzt aber die Eingangsfrage so verstanden das es um die Anzahl der Tabpages eines bestimmten Objektes ging. Und das wären für mich nur die direkten Tabpages, nicht die in einem Unterobjekt.

Das mit dem :cargo meinte ich weil es eventuell schwierig sein könnte festzustellen, ob ein Objekt in der :childlist jetzt wirklich eine Tabpage ist, oder doch etwas anderes. Wenn aber der :cargo der Tabpages gesetzt wird auf "Ich bin eine Tabpage", dann kann man die :childlist abarbeiten nach Objekten, die genau das im :cargo stehen haben. Und die dann jeweils hoch zählen.

Oder habe ich jetzt Dich mißverstanden? Soll ja schon mal vorkommen :roll: ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Ich habe die Frage so verstanden, dass danach gefragt wird, wie viele Tabpages in einer Tabpage enthalten sind. Ein bestimmte XbpTabPage-Objekt ist also der Parent, nach dem gefragt wird, und dann muss ich in dessen ChildList() nur zählen, wie viele XbpTabPages darauf sind.

Wenn ich einen komplexen Dialog habe und die diversen ChildLists traversiere, um sämtliche Tabpages zu ermitteln, dann brauche ich tatsächlich zusätzliche Informationen, um herauszubekommen, wer zu wem gehört. Aber das Eltern-Kind-Verhältnis sollte trotzdem immer eindeutig sein.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Jan »

Hallo Tom,

theoretisch hast Du natürlich Recht. Aber was ist wenn jemand mein, er müsste auf den Parent (egal ob das ein Dialog, ein Static, eine übergeordnete Tabpage, was auch immer ist) nicht nur Tabpages platzieren, sondern auch noch irgend welche anderen Elemente? Info-Texte, Laufbalken, Grafiken, was auch immer. Daher meine Überlegung auszulesen, ob das Objekt in der :childlist wirklich eine Tabpage ist, oder doch etwas anderes.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Hallo, Jan.

Aber die Frage war, wie viele Tabpages sich auf einer Tabpage (direkt, nehme ich dann an) befinden. Da zählt man einfach in oMyTabPage:ChildList() die Objekte, die selbst XbpTabPage (oder davon abgeleitet) sind.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Jan »

Hallo Tom,

blöde Frage: Und wie identifiziere ich in einer :childlist die Tabpages?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 200
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Re: Anzahl Tabs in XbpTabPage

Beitrag von Dominik Krebs »

Ich verwende die Klasse tbxTabControl() von Friedhelm.
Über eine Instanzvariable können wir das abfragen.
Ist tatsächlich auch gar nicht so kompliziert eine solche Klasse zu basteln.
Zuletzt geändert von Dominik Krebs am Fr, 16. Feb 2024 11:52, insgesamt 1-mal geändert.
Gruß Dominik
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Und wie identifiziere ich in einer :childlist die Tabpages?

Code: Alles auswählen

FUNCTION CountPagesOnMyself(oMyTab)
LOCAL nCtr, nNumberOfTabpages := 0, aChildList := oMyTab:ChildList(), nLen := Len(aChildList)
FOR nCtr := 1 TO nLen
  IF aChildList[nCtr]:isDerivedFrom('XbpTabPage')
     nNumberOfTabPages ++
  ENDIF
NEXT
RETURN nNumberOfTabPages 
Zuletzt geändert von Tom am Fr, 16. Feb 2024 12:35, insgesamt 1-mal geändert.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Jan »

Hallo Tom,

OK, wenn das geht ist das natürlich OK. Mir war jetzt nicht bewußt das die XbpTabPage da mit im isDerived() drin stehen kann. In dem Fall ist der :cargo natürlich tatsächlich vollkommen überflüssig.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Mir war jetzt nicht bewußt das die XbpTabPage da mit im isDerived() drin stehen kann.
Mit der isDerivedFrom()-Methode kann jede Klasse abgefragt werden, die ein Objekt beerbt hat. Warum sollte XbpTabPage da eine Ausnahme sein?
Herzlich,
Tom
Benutzeravatar
klammerauf
UDF-Programmierer
UDF-Programmierer
Beiträge: 69
Registriert: Do, 08. Feb 2007 14:16
Wohnort: Karlsruhe
Hat sich bedankt: 3 Mal

Re: Anzahl Tabs in XbpTabPage

Beitrag von klammerauf »

Danke für alle Antworten, meine Frage war tatsächlich etwas missverständlich formuliert.

Ich wollte auf jeden Fall wissen, wie viele Tabpage-Objekte sich auf einem Parent befinden. Und wie ich gezielt bei einem davon die :caption ändern kann. Aus der Online-Doku bin ich auch nicht schlau geworden.

Der Trick von Tom mit :isderivedfrom() ist vermutlich die Lösung, Danke.
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Der "Trick" von Tom sagt Dir nur, wie viele Tabpages es auf einem bestimmten Parent gibt.

Der einfachste Weg, um die Caption einer bestimmten Tabpage zu ändern, besteht in der Verwendung der Methode ":SetCaption()". Um das gezielt zu machen, ist es sinnvoll, alle Tabpages in unterschiedlichen Variablen (oTab1, oTab2) oder in einem Array ("aTabs[1 ... x]") unterzubringen, dann kannst Du mit oTab1:Caption die Caption abfragen und mit oTab:SetCaption("So heißt das jetzt") neu setzen (danach: oTab1:InvalidateRect(), damit die Lasche neu gezeichnet wird). Du kannst natürlich auch die ChildList() des Parents durchwandern und schauen, ob ein bestimmtes Tabpage-Objekt die Caption hat, die Du erwartest, und änderst das dann:

Code: Alles auswählen

FUNCTION ChangeCaption(oMyTab,cCaption,cNewCaption)
LOCAL nCtr, aChildList := oMyTab:ChildList(), nLen := Len(aChildList)
FOR nCtr := 1 TO nLen
  IF aChildList[nCtr]:isDerivedFrom('XbpTabPage')
    IF aChildList[nCtr]:Caption == cCaption
      aChildList[nCtr]:SetCaption(cNewCaption)
      EXIT
     ENDIF
  ENDIF
NEXT
RETURN NIL
Aber das ist unnötig kompliziert. Wenn Du weißt, dass "oTab1" (statt "oXbp", wo in den Beispielen alle XbParts gespeichert werden) die Tabpage ist, deren Caption Du ändern willst, dann mach das einfach direkt. oTab1:SetCaption("Aber hallo"), oTab:InvalidateRect(), feddisch.
Herzlich,
Tom
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Anzahl Tabs in XbpTabPage

Beitrag von flanelli »

Tom hat geschrieben: Mo, 19. Feb 2024 10:44 Aber das ist unnötig kompliziert. Wenn Du weißt, dass "oTab1" (statt "oXbp", wo in den Beispielen alle XbParts gespeichert werden) die Tabpage ist, deren Caption Du ändern willst, dann mach das einfach direkt. oTab1:SetCaption("Aber hallo"), oTab:InvalidateRect(), feddisch.
Nach meinem bescheidenen Wissenstand gibt es zumindest in den Versionen < 2.0 keine Methode setcaption für ein xbptabpage
aber ich lasse mich gerne eines besseren belehren :-)
Ahoile aus dem Süden
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Ich habe XbpTabpage:SetCaption() zur Verfügung und kann die Methode verwenden. Aber ich kann auch der iVar "Caption" einfach einen Wert zuweisen, das geht ebenso. InvalidateRect() danach, und die Caption ist gesetzt.

Edit: Hat es bis zur 1.9 tatsächlich nicht gegeben. Nutzt die noch jemand? :o
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14656
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Jan »

Tom,

Wenn ich aus welchem Grund auch immer kein :SetCaption() machen kann, und nur ein :caption geht, mach ich immer ein :configure() im Anschluß, um das im Objekt wegzuspeichern. Daß das auch mit InvaliudateRect() war mir bislang unbekannt. Wobei ich damit auch nicht wirklich aktiv arbeite.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Anzahl Tabs in XbpTabPage

Beitrag von Tom »

Jan, so war es auch dokumentiert. Und es gibt einen PDR von Anno Tobak (zur 1.2), der noch offen ist, und der das Fehlen von SetCaption bemängelt: https://www.alaska-software.com/scripts ... PDRID=2626

Grundsätzlich, da, wo es geht: Wenn ich eine Caption mit SetCaption() ändere, ist in aller Regel das Repaint implizit, z.B. bei einem Static oder einem Button. Bei einer Tabpage muss man eigenartigerweise nachhelfen, etwa mit InvalidateRect(). Setze ich die iVar Caption direkt, muss ich bei Statics, Buttons das Configure() ausführen. Bei XbpTabpages reicht auch da ein InvalidateRect().

Weil bei mir Tabpages sowieso in stark aufgepumpten Klassen sitzen, muss ich nichts davon tun. ;)
Herzlich,
Tom
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Anzahl Tabs in XbpTabPage

Beitrag von flanelli »

Tom hat geschrieben: Mo, 19. Feb 2024 12:30 Ich habe XbpTabpage:SetCaption() zur Verfügung und kann die Methode verwenden. Aber ich kann auch der iVar "Caption" einfach einen Wert zuweisen, das geht ebenso. InvalidateRect() danach, und die Caption ist gesetzt.

Edit: Hat es bis zur 1.9 tatsächlich nicht gegeben. Nutzt die noch jemand? :o
@Tom
:caption:="xxx" mit anschließenden :configure() hat auch in der 1.9 funktioniert, nur ein :setcaption("xxx") gab es nicht.

btw. ich bin überzeugt, dass noch etliche Applikationen unter 1.9 am Laufen sind, aus welchen Gründen auch immer.
Wir selbst haben zwei kleine Apps ( mit geringer Komplexität ) auch nie umgestellt weil es einfach bis dato nicht die geringste
Notwendigkeit dafür ergeben hat.

Aber ansonsten hast Du natürlich in allen Punkten völlig recht =D>
Ahoile aus dem Süden
Antworten