Anzahl Tabs in XbpTabPage
Moderator: Moderatoren
- klammerauf
- UDF-Programmierer
- Beiträge: 69
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 3 Mal
Anzahl Tabs in XbpTabPage
Wie kann ich denn feststellen, wie viele Tabs in einer TabPage enthalten sind?
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
--
Grüße
Sebastian
- Jan
- Marvin
- Beiträge: 14662
- 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
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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
Tom
- Jan
- Marvin
- Beiträge: 14662
- 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
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 ...
Jan
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 ...
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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.
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
Tom
- Jan
- Marvin
- Beiträge: 14662
- 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
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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.
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
Tom
- Jan
- Marvin
- Beiträge: 14662
- 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
Hallo Tom,
blöde Frage: Und wie identifiziere ich in einer :childlist die Tabpages?
Jan
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: Anzahl Tabs in XbpTabPage
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.
Ü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
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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
Tom
- Jan
- Marvin
- Beiträge: 14662
- 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
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
Mit der isDerivedFrom()-Methode kann jede Klasse abgefragt werden, die ein Objekt beerbt hat. Warum sollte XbpTabPage da eine Ausnahme sein?Mir war jetzt nicht bewußt das die XbpTabPage da mit im isDerived() drin stehen kann.
Herzlich,
Tom
Tom
- klammerauf
- UDF-Programmierer
- Beiträge: 69
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 3 Mal
Re: Anzahl Tabs in XbpTabPage
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.
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
--
Grüße
Sebastian
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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:
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.
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
Herzlich,
Tom
Tom
-
- 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
Nach meinem bescheidenen Wissenstand gibt es zumindest in den Versionen < 2.0 keine Methode setcaption für ein xbptabpageTom 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.
aber ich lasse mich gerne eines besseren belehren
Ahoile aus dem Süden
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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?
Edit: Hat es bis zur 1.9 tatsächlich nicht gegeben. Nutzt die noch jemand?
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14662
- 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
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anzahl Tabs in XbpTabPage
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.
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
Tom
-
- 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
@TomTom 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?
: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
Ahoile aus dem Süden